|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机蓝牙数码管 完成最基本的蓝牙信息显示以及开关控制功能
( X- o* K9 H& [! n/ e/**********************************************************************************************
8 f" D% p# U9 \- ~* a7 n程序名: 蓝牙数码管 m! v% X- C' g
编写人: 莫沫
+ i4 m" y4 i8 y" C' b/ R编写时间: 2017年1月26日
( w6 ^" ?& p; B% C8 \硬件支持: STC12C2052AD 12MHz
N# y- C2 L6 _接口说明: pwm P3.7 & A$ ]# C! ~ ^. G
修改日志: ~& h& b/ V. C% B" }& n9 p
NO.1- 2017年1月26日 14:56:26 完成最基本的蓝牙信息显示以及开关控制功能
, e+ E- v0 p7 C- d**********************************************************************************************/+ E$ P, y+ w' _2 T# A# Y7 c! P
#include <STC12C5A60S2.H>
+ P. G8 P0 c1 W#define DIS P2 . B" D8 Q7 K5 ^- ~ F: |
unsigned char NUM;" b/ l/ o; s0 m: U0 [: C' Q
unsigned char code disdata[]={
' [& e* x# m. Z) w/ x0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 //无小数点数码管段码表(0~f)
+ `7 V) p5 f& Q};
! H8 Z1 [$ Q2 [% k7 {/*********************************************************************************************
7 k, s9 n4 `6 X3 V1 ?函数名:PWM初始化函数$ u$ g& e# a% N' T
调 用:PWM_init();
- P. E3 Y- [. K* Z' r* t参 数:无& Y$ @, N+ j" K* d5 c
返回值:无
' ~. ^' T3 ], h3 k; N6 E% k结 果:将PCA初始化为PWM模式,初始占空比为0
: K2 K% p G3 F5 e: e( O备 注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可" v. k& j3 F( |/ @$ u
/**********************************************************************************************/9 }4 x0 ?3 x" K
/*void PWM_init (void){
C0 f& H1 Y9 }, Q1 L8 a W- TCMOD=0x02; //设置PCA定时器
/ T4 d6 {7 m* \ CL=0x00; ) M6 u# u" N7 g% q; {3 N
CH=0x00;
0 b1 d N. _! w6 b+ w0 }: M4 o CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)8 S; K# ~! U# k, d) P& w* M
CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同
/ M C/ [( F+ q; l) B7 s: B/ r CCAP0H=0x00; // PWM0初始时为0- _! Z' g+ v& V! I
CR=1; //启动PCA定时器3 g" J1 B- ]4 m5 F2 `* B
}; o( K- S3 i! ]) a0 r
/**********************************************************************************************/
% F, m" p( E2 }. x) ^! L2 N8 x0 E3 ^9 V& |( X
" D( w" S8 s. O/*********************************************************************************************+ N% v, S9 A! U$ C, b. \" W4 t. s) }
函数名:UART串口初始化函数
8 w5 B# P2 h5 X2 B2 m8 z3 g2 Z调 用:UART_init();3 O3 L% L+ }2 b9 M! v V
参 数:无# x& T. H, E7 x* X! L
返回值:无
4 c& {& I- y* Q% O$ h K" L/ N8 i; n结 果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
/ K. @0 _- v- x% X+ `+ {$ o; b备 注:振荡晶体为11.0592MHz,PC串口端设置 [ 19200,8,无,1,无 ]5 [# ~$ R& I( e$ p& y' d( ]! c
/**********************************************************************************************/
+ s3 |& ]5 z8 P3 E7 T2 Jvoid UART_init (void){% o- z l/ i) l8 Y, O0 }/ C, I" J
EA = 1; //允许总中断(如不使用中断,可用//屏蔽)" |1 a m1 M8 g1 O
ES = 1; //允许UART串口的中断0 z* v3 K5 [0 }$ O* ?9 D u* ^1 x
TMOD = 0x20; //定时器T/C1工作方式2
: U4 ] y m4 q' G. L SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
. q3 h+ G1 F9 c* } TH1 = 0xFD; //定时器初值高8位设置9 D5 q* _" C! S: K. Y
TL1 = 0xFD; //定时器初值低8位设置( L. `4 M7 K* u
// PCON = 0x80; //波特率倍频(屏蔽本句波特率为9600)
) k. ~( ?/ a% ^8 I. D2 N$ n0 M TR1 = 1; //定时器启动
0 \( W* J' O9 l" o% s8 x6 a}
* K8 L# I3 I" i' y. I/**********************************************************************************************/$ @5 L5 {" S6 Z! g
/*********************************************************************************************
9 h. i4 r; N0 z V8 e3 N% ^函数名:UART串口接收中断处理函数
. H. c: A/ P! x$ B) e A调 用:[SBUF收到数据后中断处理]
+ ]3 G! q: P2 `) K* g. |参 数:无
* h" S2 D6 y9 ]1 U2 i# |4 q返回值:无7 E# L- q) D$ n+ S+ D; O! Y0 ^
结 果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去): ~5 C% t U& I
备 注:过长的处理程序会影响后面数据的接收
% Z' r" B* o. t/ K5 u; P' \/**********************************************************************************************/8 C7 S+ B5 N7 f% V
void UART_R (void) interrupt 4 using 1{ //切换寄存器组到1- n# f- o( I1 u( G
unsigned char UART_data; //定义串口接收数据变量
( O( C9 D% x2 d a RI = 0; //令接收中断标志位为0(软件清零)8 V# B, _ ?8 `5 v
UART_data = SBUF; //将接收到的数据送入变量 UART_data% J0 a7 L6 o2 x- v0 E
if(UART_data == '0') NUM=0;1 p K# ?' B. t2 \
if(UART_data == '1') NUM=1;. ^* r! x- c5 R' r8 n9 N. m
if(UART_data == '2') NUM=2;
( c4 l, |7 f P" }& G, H5 W( ~ if(UART_data == '3') NUM=3;
, p; y. o$ P% F4 V if(UART_data == '4') NUM=4;
7 O2 `8 G B& | if(UART_data == '5') NUM=5;
7 O9 v, H" v8 f/ s% R1 {0 j if(UART_data == '6') NUM=6;
+ O! a' _. D# N if(UART_data == '7') NUM=7;/ ~1 w, I ]( k7 V8 z2 H
if(UART_data == '8') NUM=8;, D$ E: [7 @. u; t- }) r
if(UART_data == '9') NUM=9;: a0 p$ V& i+ \5 w3 Y
if(UART_data == 'A') NUM=10;
( A0 w! P8 Y7 _! Y8 z. ~2 | if(UART_data == 'B') NUM=11;
& J% X. ]3 M9 `# I if(UART_data == 'C') NUM=12;7 o- @" U( ^6 P& `4 m+ C6 y
if(UART_data == 'D') NUM=13;) K2 s: K) W$ `# k3 z
if(UART_data == 'E') NUM=14;, `5 G8 y n7 u5 a& k0 @
if(UART_data == 'F') NUM=15;
1 w6 S: a. I6 K M2 e} 8 S! S" E$ Z, t
/**********************************************************************************************/6 o; K( I4 K/ N% X. F
/*********************************************************************************************
7 C/ U U- J$ j: U; Q函数名:PWM0占空比设置函数9 `' c0 S. g& R5 c. N
调 用:PWM0_set();/ g: c" ] s9 {- l" U% m& r" J8 c
参 数:0x00~0xFF(亦可用0~255)
2 ]4 T" e' f" T' E' T- c. w返回值:无5 e. O6 Z. v: i A+ D2 H! u
结 果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
. V! \3 L5 [# b% ~备 注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
/ t j2 t+ ^" H- c0 o/**********************************************************************************************
7 l- z: B# Z8 Y- \8 Z8 fvoid PWM0_set (unsigned char a){
: ^9 H4 f" F: z CCAP0L= a; //设置值直接写入CCAP0L
1 J7 G) n; z# K5 c" R CCAP0H= a; //设置值直接写入CCAP0H
: @% b8 g0 c1 y# \) W. p}" ^, z& v D- `' N- f6 k w+ i
/**********************************************************************************************/
7 r5 l" w( x& s" u2 n# h1 T+ G
, k& c, s; K/ v6 `* o# i0 W ^+ k/ l" Z( `5 d, U" I; {
/*********************************************************************************************+ d: D# U& H( B8 s2 ^
函数名:主函数9 v! F, B; p2 n6 ]- d, U/ w7 L
调 用:无1 r7 Y( y, C8 W' c, |* ~
参 数:无
; }- g6 \* _7 s$ \2 ]返回值:无
7 `8 }( Y7 d5 ~; P) g结 果:程序开始处,无限循环
) M6 ^/ J" |6 {5 ?* j. m' c; ]备 注:8 l, W; ?- f- x6 ?6 R8 ?4 ~
/**********************************************************************************************/" x$ \8 e& {% e; ?3 d+ i
void main (void){
, E. o5 ?' ` Q; O NUM = 15;+ ]9 ^: O" n* a' f0 n8 E
UART_init();+ k: @! G2 p; T' \ O
8 L$ Z/ a. c P o! E( y8 w
# `, V0 I3 H" d- g6 S$ U% h( d
" A, `2 F2 L3 @! ~3 `( ]" t* I8 X…………限于本文篇幅 余下代码请从论坛下载附件…………4 \9 i3 c5 G/ R! N* d" i E. g5 ^" _
' i) S8 Z% _8 ]2 M+ h. o1 u5 Y
- D5 o4 F }( `9 _' [
3 c) Y. h! W+ C& R" U
6 @1 \; e7 S- o1 X4 y
" w n" Z# F; Y/ Z5 R- A4 |
1 {8 O0 w1 t! @
1 I4 ~8 [. x0 s |
|