1、课程设计报告蓝牙校时电子钟课程设计报告:可校时数字钟设计设计目的:设计制作具有下列功能的数字钟:1.自动计时,lcd显示器显示时、分和秒;2.具备手机校准功能;3.具备手机设置定时闹钟功能。设计原理:stc89c51单片机自带计时器计时,使用T0计时器,P1.0P1.4为按键检测端口,P1.6为闹钟输出,P2.5P2.7为LCD1602使能端控制,P0口接LCDD段选,通过串口通信与蓝牙模块连接,手机app发送数据。设计流程:先实现初始化与键盘监控;再通过中断完成数据的接收;最后通过按键检测实现数据更替。流程图如图所示。使用器材:单片机STC52RCLCD1602蓝牙模块HC06开关LED灯泡
2、电阻导线11.0592晶振电容开发板USB接口排阻电位器电路仿真图:实验结果: 该电子钟具有5个按键,三个控制时分秒的增加,一个控制蓝牙校时,一个控制闹钟设计。LCD第一排显示当前时间,第二排显示闹钟,蓝牙校时及闹钟设置由手机app完成数据发送。数字钟源程序:/*头文件*/#include#include #define uint unsigned int#define uchar unsigned char#define yh 0x80 /LCD第一行的初始位置#define er 0x80+0x40 /LCD第二行初始位置sbit a1=P10; / “秒加”键 K1sbit a2=P11
3、; /“分钟加”键 K2sbit a3=P12; / “小时加”键 K3sbit b1=P13; / “校时”键 K1 sbit b2=P14;sbit c=P15;sbit rs=P27;sbit rw=P26; sbit en=P25; uchar a;uchar i=0;uchar seconde=0;uchar minite=0;uchar hour=12;uchar mstcnt=0;uchar code tab1=Time: : : ;/显示的固定字符uchar code tab2=Clock: : : ;/显示的固定字符uchar tate6;uchar ldat6=130000
4、;uchar time6=120000;void delay_1ms(uint xms)/延时函数,有参函数 uint x,y; for(x=xms;x0;x-) for(y=124;y0;y-);/*液晶写入指令函数*/void write_1602com(uchar com) rs=0;/数据/指令选择置为指令 rw=0; delay_1ms(1); P0=com;/送入数据 delay_1ms(1); en=1;/拉高使能端,为制造有效的下降沿做准备 delay_1ms(1); en=0;/en由高变低,产生下降沿,液晶执行命令/*液晶写入数据函数*/void write_1602dat
5、(uchar dat) rs=1;/数据/指令选择置为数据 rw=0; delay_1ms(1); P0=dat;/送入数据 delay_1ms(1); en=1; /en置高电平,为制造下降沿做准备 delay_1ms(1); en=0; /en由高变低,产生下降沿,液晶执行命令/*液晶初始化函数*/void lcd_init() write_1602com(0x38);/设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 delay_1ms(5); write_1602com(0x0c);/开显示不显示光标 delay_1ms(5); write_1602com(0x06);/整
6、屏不移动,光标自动右移 delay_1ms(5); write_1602com(0x01);/清显示 delay_1ms(5); write_1602com(er+0); for(a=0;a14;a+) write_1602dat(tab2a); write_1602com(yh+0); for(a=0;a13;a+) write_1602dat(tab1a); void pro_value() tate0=hour/10; /将湿度的整数部分的十位和个位分开 tate1=hour%10; tate2=minite/10; tate3=minite%10; tate4=seconde/10;
7、tate5=seconde%10; write_1602com(yh+6); for(a=0;a2;a+) write_1602dat(tatea+0x30); write_1602com(yh+9); for(a=2;a4;a+) write_1602dat(tatea+0x30); write_1602com(yh+12); for(a=4;a6;a+) write_1602dat(tatea+0x30); void pros_data() write_1602com(er+7); for(a=0;a2;a+) write_1602dat(timea); write_1602com(er+
8、10); for(a=2;a4;a+) write_1602dat(timea); write_1602com(er+13); for(a=4;a=6) i=0; void check( ) if(b1=0) delay_1ms(30); if(b1=0) hour=(ldat0-48)*10+(ldat1-48); minite=(ldat2-48)*10+(ldat3-48); seconde=(ldat4-48)*10+(ldat5-48); if(b2=0) delay_1ms(30); if(b2=0) for(a=0;a6;a+) timea=ldata; void clock(
9、) if(minite=0) if(seconde=0) c=1; delay_1ms(3000); c=0; if(hour=(time0-48)*10+(time1-48) if(minite=(time2-48)*10+(time3-48) if(seconde=(time4-48)*10+(time5-48) c=1; delay_1ms(3000); c=0; /*主函数*/void main() lcd_init(); display1(); P1=0xff; TMOD = 0x21; /time0为定时器,方式1TH0=0x3c; /预置计数初值TL0=0xb0;EA=1; ET0=1; TR0=1; c=0; while(1) keyscan( ); /按键扫描 time_pro( ); pro_value(); pros_data(); lanyaInit( ); check( ); clock( );
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1