|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机蓝牙数码管 完成最基本的蓝牙信息显示以及开关控制功能: c" q( Y* m3 t9 V
/**********************************************************************************************; D5 V T: T+ N
程序名: 蓝牙数码管
, n9 Y# `# C4 v编写人: 莫沫
4 M l- @. K1 {0 y% l* Z) K编写时间: 2017年1月26日 % a9 X4 Z# b7 G4 s+ V; U
硬件支持: STC12C2052AD 12MHz2 T2 g2 R9 D9 F3 K$ _, E. e
接口说明: pwm P3.7 " j4 z k8 R- n
修改日志:
( @, y. `* `. x- \4 T NO.1- 2017年1月26日 14:56:26 完成最基本的蓝牙信息显示以及开关控制功能
3 w; m& {: P" a6 V+ d! M) e* J**********************************************************************************************/2 H3 U0 S- E: J, l( X$ |+ t% d
#include <STC12C5A60S2.H> 2 Z. U% P; x" i d3 a
#define DIS P2
2 r, Q6 }% j" [! Zunsigned char NUM;; [7 J; g7 r; a) T
unsigned char code disdata[]={
8 L& D7 k4 v: a0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 //无小数点数码管段码表(0~f) - }5 [4 `; E4 a Y+ {9 a/ _# A# ]
};. j3 e! X( {6 r% i& \# E
/*********************************************************************************************9 j$ c' ]) @ v; P$ N% N
函数名:PWM初始化函数- N! A8 V9 U) S3 {- }
调 用:PWM_init();. E/ c2 y- B' v% m
参 数:无9 S, L7 m% ^5 }0 X
返回值:无0 T9 G0 ~3 K2 U6 n) N5 P
结 果:将PCA初始化为PWM模式,初始占空比为0' T8 P3 I( }4 n! Z
备 注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可
( ?3 R: l# Q5 z" d2 A! F4 C9 }0 T/**********************************************************************************************/
0 J: {8 D! {0 o/*void PWM_init (void){( B7 x) @6 y' F- }
CMOD=0x02; //设置PCA定时器
2 L( c" c) n* a3 A9 e. s- [2 s CL=0x00;
( i, u, W; K0 X6 C7 ?2 { CH=0x00;8 a' R% E c2 w" d0 U
CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
C" f/ D& R! v2 y CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同
% s, F! k' v- s: v CCAP0H=0x00; // PWM0初始时为0
4 Z3 l* h8 w2 P4 W8 a* F& F CR=1; //启动PCA定时器
) {; p* M6 n: C7 x9 C* v f; Q}
1 L9 ]! W$ o3 ^" H7 h3 k/**********************************************************************************************/# A2 `( z7 J7 G) V
* X* V9 B* }( g) B& Q
4 Y/ U8 _* }: e& h# j! n/********************************************************************************************** T+ }7 w# R7 `% N" i
函数名:UART串口初始化函数
0 V- G6 n& A- E6 v2 z$ l调 用:UART_init();
( G$ u# p8 {' P$ K6 C% `参 数:无: R, i& B0 ~5 L b- T
返回值:无) K* T- p' u6 V, v
结 果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
! ?. ?! q! Z# b9 k备 注:振荡晶体为11.0592MHz,PC串口端设置 [ 19200,8,无,1,无 ]
: g+ f- q% y% v: X% P+ q/**********************************************************************************************/
& K1 S9 M+ s7 f/ T7 N1 P2 ]! @7 L# fvoid UART_init (void){9 L5 X% B/ x l2 H/ C' D
EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
; \( O, \5 `$ ~7 X0 g. c) L ES = 1; //允许UART串口的中断- a, g6 J& g/ q& C( V7 n7 I: Y$ a3 L
TMOD = 0x20; //定时器T/C1工作方式2$ | ~( C* j0 B. _$ I2 L8 Z" {! l
SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
& x! ^7 c0 u1 t$ j% J7 q( o$ R TH1 = 0xFD; //定时器初值高8位设置. t% f8 o* z7 i: d2 C3 H0 |
TL1 = 0xFD; //定时器初值低8位设置& M5 y" s0 E4 I7 e+ L* A- ^9 [
// PCON = 0x80; //波特率倍频(屏蔽本句波特率为9600)* c6 F$ D8 }/ G9 {4 K0 y& q
TR1 = 1; //定时器启动 x7 D) n6 [! `4 z- @5 F6 T
}* O. A" X/ U% V, h2 ~/ s1 y
/**********************************************************************************************/
0 H, s2 b% h9 w5 L$ E; G! _/********************************************************************************************** m2 P* X, S) I3 Z
函数名:UART串口接收中断处理函数7 z1 H; t* i9 l- ?
调 用:[SBUF收到数据后中断处理]; F* y5 R' V9 s7 L4 I5 k
参 数:无
$ E7 G7 } r0 R) \5 ~( l返回值:无
$ f( g. h, ^ L4 l$ H结 果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)! k6 v1 Z2 {( @, u6 b' Q" c
备 注:过长的处理程序会影响后面数据的接收$ k$ c# I1 T; L7 N) z7 l% j2 i: ~
/**********************************************************************************************/7 ?3 z! U1 s' z" M4 k h
void UART_R (void) interrupt 4 using 1{ //切换寄存器组到1' q( S5 V! n V" ?& f
unsigned char UART_data; //定义串口接收数据变量7 A: v1 [+ s# A0 t
RI = 0; //令接收中断标志位为0(软件清零)
0 f0 P9 e# s, K6 X! j( X UART_data = SBUF; //将接收到的数据送入变量 UART_data: D, H( E7 u% h- ?) O
if(UART_data == '0') NUM=0;
( V( Q/ { F- L2 Z- f e if(UART_data == '1') NUM=1;
4 ?7 X) S3 F. E8 q if(UART_data == '2') NUM=2;$ i0 y4 }& o) v$ b7 V
if(UART_data == '3') NUM=3;: {9 U4 S% N: ?: m9 }
if(UART_data == '4') NUM=4;! s+ x0 b T7 K p% q0 ~/ c
if(UART_data == '5') NUM=5;
- Y. J: r& ^1 m$ A& \0 k, p if(UART_data == '6') NUM=6;# L9 D* P! |+ D- ^+ |1 N4 G5 M. h) t" r
if(UART_data == '7') NUM=7;
$ T: ]( R# o+ l* H0 l& J if(UART_data == '8') NUM=8;
+ @0 A& j" B7 d0 t if(UART_data == '9') NUM=9;
: ~& f& K/ h" L& Y/ @9 [ if(UART_data == 'A') NUM=10;
% o7 k! O0 W. Q$ m& ~! u9 W. k if(UART_data == 'B') NUM=11;
5 r2 _' I7 `5 A& {, S6 S2 r3 _ if(UART_data == 'C') NUM=12;( s3 |1 t) y' \' Y# i8 u" |
if(UART_data == 'D') NUM=13;
7 O+ \ w' q1 ^' T if(UART_data == 'E') NUM=14;
7 O+ `0 G2 k, f if(UART_data == 'F') NUM=15;/ ]: E6 O, I3 e9 d6 B: [
}
" }" ]$ \" b1 x. j' \/**********************************************************************************************/+ Q( K, |0 A' G
/*********************************************************************************************
2 V" W* L) U4 F: ~函数名:PWM0占空比设置函数
( T Y E" C6 D6 ^" ?6 `调 用:PWM0_set();) i0 h$ r* T7 O# ^: {4 D
参 数:0x00~0xFF(亦可用0~255)
3 w: C8 ^3 c$ q) ?, [9 s1 X. j返回值:无
: ?. h. u, ^0 t- U$ Y6 J结 果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平- Q: }, g6 u( [
备 注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可. ^& P/ X. A4 W/ ^ y- ]$ r
/**********************************************************************************************
; h. o2 \+ D7 D9 |' Evoid PWM0_set (unsigned char a){$ w. P F( g5 y! P# F/ N @/ y
CCAP0L= a; //设置值直接写入CCAP0L0 n/ s/ B8 h8 V: n+ h+ s3 ]
CCAP0H= a; //设置值直接写入CCAP0H
: O5 p( S7 I8 _! k+ x6 k}, ~( e% }) P' R( @/ y
/**********************************************************************************************/8 a" K& P! q, {% s
, j% i8 R6 ^: s% E1 M+ t$ h* S$ m# m" U& a& a
/*********************************************************************************************& Z8 q+ k! w" m8 `: O8 t, e, h9 X
函数名:主函数
0 \$ B0 g* ?8 u7 a调 用:无
+ P7 _% z' W0 V$ B- e5 _' e参 数:无
C! e& }$ n. o* e返回值:无: S' M+ e3 U2 B* h+ C% V2 P
结 果:程序开始处,无限循环
+ ^- O5 [, g* p) x# ^0 r1 J( q# y备 注:
0 |/ }9 z- R8 f9 w/**********************************************************************************************/
6 z4 S Z+ L7 j$ \% yvoid main (void){
. l1 b8 y4 A) `- e* H7 v; } NUM = 15;
+ ]2 Z' F& n6 @7 h4 q% M. z* ? UART_init();
+ z) x* T, n# C; u7 A4 D2 U! |' G4 X$ E3 K
/ J( r; h Z) D& N* e+ u
2 q C% n! [+ {/ x; V1 U, L…………限于本文篇幅 余下代码请从论坛下载附件…………6 M2 F0 t& H* L, h7 ?
* W% O' Z2 Q/ Y5 \: g
1 m* c3 g1 d4 s: ~ c- C
N d( L% ~* }, [) _
. q# I O7 X( Y& g7 n$ c& ~$ w
* ]- ^' y2 m, Y% L) f U1 A! i. s
: J. H1 S9 B+ k _+ r6 Q
+ x" n& \, n6 J0 c2 S& g3 R7 p |
|