|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机蓝牙数码管 完成最基本的蓝牙信息显示以及开关控制功能
" |# N! y$ c' w/**********************************************************************************************) V- b' N0 a6 H
程序名: 蓝牙数码管
4 u2 f( G' V" z# u4 i3 O! }9 p编写人: 莫沫 0 L: Y# W/ J3 W
编写时间: 2017年1月26日
$ E; C9 a! Y9 A/ \2 P" u% ~6 o4 ?1 X硬件支持: STC12C2052AD 12MHz' r R" m7 x' N' I( M: Q
接口说明: pwm P3.7 6 z; N/ s8 C& m( p
修改日志:
, g: u6 j, X% C1 ^# E NO.1- 2017年1月26日 14:56:26 完成最基本的蓝牙信息显示以及开关控制功能 ; d4 l/ A, G& K
**********************************************************************************************/
) D& M% i6 D F% z8 N#include <STC12C5A60S2.H> ' w; D4 u, E6 ]6 T1 X7 L
#define DIS P2 0 ]8 V* G( c' R8 |, V a! W* A% Y2 Y
unsigned char NUM;
# U$ n3 I y! L. x0 x; ]( Munsigned char code disdata[]={
7 @1 U& t8 z: ]5 o0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 //无小数点数码管段码表(0~f) 4 _1 G% m# F% T# V$ o
};
) Q5 e: b0 K* f0 f/*********************************************************************************************
7 e3 E) }' H6 H: d1 f2 d8 S; ^ p5 v函数名:PWM初始化函数" {$ e$ C3 r2 p. B
调 用:PWM_init();
! `7 m- @/ A. Y- l9 N参 数:无
- L' K/ m1 v! g2 m* J返回值:无
- U+ Z) D d: S( i; q, h结 果:将PCA初始化为PWM模式,初始占空比为0
4 T7 z& c# H' C' f) {5 W备 注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可
' S: ?- ?; n, N9 n" q/**********************************************************************************************/
5 b, n3 g7 r k |/ k$ i/*void PWM_init (void){( b# E6 j: u9 T/ R D+ X( }
CMOD=0x02; //设置PCA定时器
" I$ \% U5 u% [% Q4 ~3 s. C CL=0x00; + W: }& P5 c; D7 b+ x3 T# n5 V
CH=0x00;8 N# j% u0 n. Z3 P c1 k% ^
CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
d9 ~$ q6 O& _ CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同. a8 Z3 u5 p) h' C' l
CCAP0H=0x00; // PWM0初始时为0
' C0 I, C1 q3 c4 N% Z9 g CR=1; //启动PCA定时器; _( q' [# s* z7 ?! l
}
% z. z1 W* B- m/**********************************************************************************************/
) v, B% l/ c" }/ S
- M2 l8 ^) a x0 g2 s9 r5 Y
; S0 }3 E# c: n; @8 b! M: U/*********************************************************************************************
) l, p4 H# f! M: ^5 P T函数名:UART串口初始化函数( D) _1 s( r" Z9 Z
调 用:UART_init();
% ^! u3 ]/ M' ]& k9 d! x5 f# j$ R% g参 数:无0 g! k- D2 b( \/ N( Z
返回值:无/ f8 T% C V; `( {
结 果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)4 F. ]& \7 ~ W$ Y ]
备 注:振荡晶体为11.0592MHz,PC串口端设置 [ 19200,8,无,1,无 ]9 f3 S* A* c* b% W" X
/**********************************************************************************************/
9 E! u- w: ^9 a* \9 u$ Y2 Z/ zvoid UART_init (void){3 x- M* Y0 H" S/ _5 a
EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
' M3 f7 s! O' g2 d ES = 1; //允许UART串口的中断
& O) h, O) Y: N9 R1 |$ B& N TMOD = 0x20; //定时器T/C1工作方式2
; |9 B: \0 J1 t7 t3 ?* p SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
- C/ D. g* E& M9 h2 K0 p TH1 = 0xFD; //定时器初值高8位设置' R0 i7 e$ D! M4 K" X
TL1 = 0xFD; //定时器初值低8位设置/ X& e2 p. ?* j- k
// PCON = 0x80; //波特率倍频(屏蔽本句波特率为9600)1 b5 _! X z4 `5 r
TR1 = 1; //定时器启动
/ x+ s4 W+ o3 r" ~6 r. o}
! a4 T6 n. E! X/**********************************************************************************************/
# `) R+ z V5 w: A0 k; N/*********************************************************************************************
& J8 P1 g4 f- Y; O5 a- h7 {) h函数名:UART串口接收中断处理函数
9 G8 b0 d" Z* P. J调 用:[SBUF收到数据后中断处理]$ B, h0 A! C+ N- p* b& z9 R! R
参 数:无
7 k5 X" g" ~- `2 i" ^& X! {返回值:无0 K+ ?8 ~3 f+ X- e+ i
结 果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)4 x$ e" s2 w# |- a7 ]5 i f- G% _
备 注:过长的处理程序会影响后面数据的接收% @ f* w: Z, [
/**********************************************************************************************/
0 D6 }2 g( `! J6 @- u- p5 L* h/ Kvoid UART_R (void) interrupt 4 using 1{ //切换寄存器组到1: \2 k' i, o* c5 D/ p* m
unsigned char UART_data; //定义串口接收数据变量# d+ R/ F6 i+ ?$ {8 F) J
RI = 0; //令接收中断标志位为0(软件清零)
7 C0 x7 y( s9 Y5 p3 l. j- M& W UART_data = SBUF; //将接收到的数据送入变量 UART_data
$ _8 i- ^" L( c4 s8 x; E' ] if(UART_data == '0') NUM=0;
- P3 K, D. ?, {% `+ j5 O5 n1 U if(UART_data == '1') NUM=1;
# ]# d" D P2 @+ m3 M) x R. ` if(UART_data == '2') NUM=2;
) B, C; K/ j( E$ z if(UART_data == '3') NUM=3;
8 V) z# N w8 ]: X0 y" \ if(UART_data == '4') NUM=4;
8 i4 z' B& l( E7 @5 n+ \ if(UART_data == '5') NUM=5;- I$ Y, ]0 e* h# {
if(UART_data == '6') NUM=6;
* v3 F( `0 K$ ~! t5 i; g; } if(UART_data == '7') NUM=7;! a! z, X8 v3 L* L) B3 H
if(UART_data == '8') NUM=8;+ U e M8 V! ]1 c
if(UART_data == '9') NUM=9;
1 v/ Z. J, m) ?& k if(UART_data == 'A') NUM=10;5 Z7 f Q# X8 [$ H
if(UART_data == 'B') NUM=11;
' \- ^1 _+ k W8 D/ [: S if(UART_data == 'C') NUM=12;
) S. b, Y5 K! c if(UART_data == 'D') NUM=13;
; ?% M/ N( z; O5 M4 m5 ^ y/ ? if(UART_data == 'E') NUM=14;+ n4 q! R% U! p4 X' w _
if(UART_data == 'F') NUM=15;( Y4 n& ^9 ]* P( L2 {3 W. P
}
3 L( Y, C8 P: i/**********************************************************************************************/
* D% z& f5 K: h/*********************************************************************************************
, d7 @1 _* b/ z& `$ s' Y! `函数名:PWM0占空比设置函数
) K/ M2 G( _& n( T. f- A$ r调 用:PWM0_set();
7 {' o5 k# h# l8 x: E0 ]; Z参 数:0x00~0xFF(亦可用0~255)* ]4 ?# m6 O% E- q: E4 x; `
返回值:无
8 d& H- c. N. [0 ^( R7 M4 ^结 果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
$ O& k# E% ^" k6 f; n7 Y- ]) K# U备 注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
h1 f1 c# p4 t4 X0 _7 L/**********************************************************************************************
$ c. X( R/ `( _1 @( Ivoid PWM0_set (unsigned char a){
! |, g( R) y$ d% Q: @& h CCAP0L= a; //设置值直接写入CCAP0L, v. Z6 V1 T5 Z4 h$ t
CCAP0H= a; //设置值直接写入CCAP0H
7 h" S& _! h1 N% x& N}
, E. F- h( B/ j1 S/**********************************************************************************************/% J0 y5 R; k) Y. c5 A
0 ?4 N+ f4 ^' m4 ]& y
2 Q O# f* P* Y' o- ~/*********************************************************************************************7 z1 @5 j/ T" g9 }' s
函数名:主函数
8 X- \3 T; p' W7 q7 }$ e调 用:无
: N2 z; t: {8 s$ t3 c/ m9 o: \参 数:无9 G# i: E1 @+ y7 V9 x
返回值:无
* m7 R: i5 ^% h$ I, J结 果:程序开始处,无限循环
( G/ |( d8 X) O7 I2 A备 注:0 i# p/ M- Z+ b- Q$ r. r6 j& B; n8 y
/**********************************************************************************************/" o. |; @% x+ [7 q, `9 c
void main (void){2 y8 @0 R2 j w
NUM = 15;' l3 b; L1 K. J0 e2 Q8 N b9 r
UART_init();: x* u" q3 r; e$ P
& E& ?, v/ g" x# z O4 `, ~3 v& `9 P1 Q5 A L1 M7 h( q
/ Y4 G% x; E3 e, R S; W
…………限于本文篇幅 余下代码请从论坛下载附件…………
/ ~6 o: ^- ]* ~( \' w: ~) c; E8 [: ]# p- H
. l5 `: Z' s2 R' c/ @6 y
: X ]" t- F' o( \3 s: O J9 l$ a5 [% H* `& `4 p
7 m& I2 a6 L N, Z* r
( x9 Y- Y* H- j0 w4 \ e% m; D
5 t& ~6 j1 e6 ~1 V3 ?6 E) O) |' b
|
|