2022年嵌入式电子闹钟时钟课程设计.pdf

上传人:C****o 文档编号:14803285 上传时间:2022-05-07 格式:PDF 页数:13 大小:550.59KB
返回 下载 相关 举报
2022年嵌入式电子闹钟时钟课程设计.pdf_第1页
第1页 / 共13页
2022年嵌入式电子闹钟时钟课程设计.pdf_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《2022年嵌入式电子闹钟时钟课程设计.pdf》由会员分享,可在线阅读,更多相关《2022年嵌入式电子闹钟时钟课程设计.pdf(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、嵌入式电子闹钟() 时钟课程设计#include /头文件#include #define uchar unsigned char /宏定义#define uint unsigned int / 位定义sbit rs=P25; /液晶位定义sbit lcden=P27; sbit s1=P20; /时间功能切换按键sbit s2=P21; /按键加sbit s3=P23; /按键减sbit s4=P24; /闹钟功能切换键sbit rst=P15; /ds1302引脚定义sbit io=P16; sbit sclk=P17; sbit beep=P30; /蜂鸣器uchar num,count

2、,shi,fen,miao,s1num,s2num, year,month,day,week,flag,flag1,year1,month1, day1,week1,shi1,fen1,miao1,year2,month2, day2,week2,shi2,fen2,miao2,year5,month5, day5,week5,shi5,fen5,miao5,wk,ashi,afen; /参数定义uchar code table=20 - - ; /液晶固定显示uchar code table1= : : 00:00; /* uchar time_dat7=12,1,6,6,12,59,59;

3、 /年周月日时分秒uchar write_add7=0 x8c,0 x8a,0 x88,0 x86,0 x84,0 x82,0 x80; uchar read_add7=0 x8d,0 x8b,0 x89,0 x87,0 x85,0 x83,0 x81; */ void write_com(uchar com); /液晶写指令函数void write_data(uchar date); /液晶写数据函数void write_ds1302(uchar add,uchar dat); /ds1302芯片写指令函数void set_rtc(); /ds1302时间设置函数void time_pros

4、(); /ds1302进制转换函数void read_rtc(); /ds1302读时间函数void alarm(); /闹钟函数void delay(uint z) /延时函数 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void init() /初始化 lcden=0; flag=0; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计 flag1=0; write_c

5、om(0 x38); write_com(0 x0c); write_com(0 x06); write_com(0 x01); write_com(0 x80); /液晶固定显示 , 第一行 for(num=0;num14;num+) write_data(tablenum); delay(5); write_com(0 x80+0 x40); /液晶显示第二行 for(num=0;num20;num+) write_data(table1num); delay(5); void write_com(uchar com)/1602液晶写指令 rs=0; P0=com; delay(5); l

6、cden=1; delay(5); lcden=0; void write_data(uchar date)/1602液晶写写数据 rs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; void write_sfm(uchar add,uchar date)/时分秒 uchar shi3,ge; shi3=date/10; ge=date%10; write_com(0 x80+0 x40+add); write_data(0 x30+shi3); write_data(0 x30+ge); 精品资料 - - - 欢迎下载 - - - - -

7、 - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计 void write_nyr(uchar ad,uchar date)/年月日 uchar shi4,ge2; shi4=date/10; ge2=date%10; write_com(0 x80+ad); write_data(0 x30+shi4); write_data(0 x30+ge2); void write_week(uchar wk) /星期按西方星期设置星期天为第一天 write_com(0 x

8、80+11); switch(wk) case 1: write_data(S); delay(5); write_data(U); delay(5); write_data(N); break; case 2: write_data(M); delay(5); write_data(O); delay(5); write_data(N); break; case 3: write_data(T); delay(5); write_data(U); delay(5); write_data(E); break; case 4: write_data(W); delay(5); write_da

9、ta(E); delay(5); write_data(D); break; case 5: write_data(T); delay(5); write_data(H); delay(5); write_data(U); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计 break; case 6: write_data(F); delay(5); write_data(R); delay(5); write_

10、data(T); break; case 7: write_data(S); delay(5); write_data(A); delay(5); write_data(T); break; void keyscan() /按键函数 if(s1=0) delay(5); if(s1=0) write_com(0 x0f); s1num+; /记录按键次数 flag=1; flag1=1; while(!s1); switch(s1num)/光标闪烁点定位 case 1:write_com(0 x80+0 x40+6); /秒 break; case 2:write_com(0 x80+0 x4

11、0+3); /分 break; case 3:write_com(0 x80+0 x40+0); /时 break; case 4:write_com(0 x80+11); /星期 break; case 5:write_com(0 x80+8); /日 break; case 6:write_com(0 x80+5); /月 break; case 7:write_com(0 x80+2); /年 break; case 8:s1num=0; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共

12、13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计 write_com(0 x0c);/设置开显示光标不显示关闭时间设置 set_rtc(); flag=0; break; if(s1num!=0) /按键加减 if(s2=0) /加按键函数 delay(10); if(s2=0) while(!s2); switch(s1num) /根据功能键相应次数做出调节 case 1: miao+; /秒加 if(miao=60) miao=0; write_sfm(6,miao); write_com(0 x80+0 x40+6); break; case 2: fe

13、n+; /分加 if(fen=60) fen=0; write_sfm(3,fen); write_com(0 x80+0 x40+3); break; case 3: shi+; /时加 if(shi=24) shi=0; write_sfm(0,shi); write_com(0 x80+0 x40+0); break; case 4: week+; /星期加 if(week=8) week=1; write_week(week); write_com(0 x80+11); break; case 5: day+; /日加 if(day=32) 精品资料 - - - 欢迎下载 - - -

14、- - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计 day=1; write_nyr(8,day); write_com(0 x80+8); break; case 6: month+; /月加 if(month=13) month=1; write_nyr(5,month); write_com(0 x80+5); break; case 7: year+; /年加 if(year=100) year=0; write_nyr(2,year); write

15、_com(0 x80+2); break; if(s3=0) /减按键函数同上 delay(10); if(s3=0) while(!s3); switch(s1num) /根据功能键相应次数做出调节 case 1: miao-; if(miao=-1) miao=59; write_sfm(6,miao); write_com(0 x80+0 x40+6); break; case 2: fen-; if(fen=-1) fen=59; write_sfm(3,fen); write_com(0 x80+0 x40+3); break; case 3: shi-; if(shi=-1) sh

16、i=23; write_sfm(0,shi); write_com(0 x80+0 x40+0); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计 break; case 4: week-; if(week=-1) week=7; write_week(week); write_com(0 x80+11); break; case 5: day-; if(day=-1) day=31; write_nyr(8,

17、day); write_com(0 x80+8); break; case 6: month-; if(month=-1) month=12; write_nyr(5,month); write_com(0 x80+5); break; case 7: year-; if(year=-1) year=99; write_nyr(2,year); write_com(0 x80+2); break; if(s4=0) /闹钟按键 delay(5); if(s4=0) write_com(0 x0f); /光标闪烁 s2num+; /记录按键次数 flag=1; while(!s4); switc

18、h(s2num)/光标闪烁点定位 case 1:write_com(0 x80+0 x40+13); /分 break; case 2:write_com(0 x80+0 x40+10); /时 break; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计 case 3:write_com(0 x0c); /关闭闹钟设置 flag=0; s2num=0; break; if(s2num!=0) /闹钟设置 if

19、(s2=0) /闹钟加 delay(10); if(s2=0) while(!s2); switch(s2num) /根据功能键相应次数做出调节 case 1: afen+; if(afen=60) afen=0; write_sfm(13,afen); write_com(0 x80+0 x40+13); break; case 2: ashi+; if(ashi=24) ashi=0; write_sfm(10,ashi); write_com(0 x80+0 x40+10); break; if(s3=0) /闹钟减 delay(10); if(s3=0) while(!s3); swi

20、tch(s2num) /根据功能键相应次数做出调节 case 1: afen-; if(afen=-1) afen=59; write_sfm(13,afen); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计 write_com(0 x80+0 x40+13); break; case 2: ashi-; if(ashi=-1) ashi=23; write_sfm(10,ashi); write_com(0

21、 x80+0 x40+10); break; void wirte_ds1302_byte(uchar dat) /ds1302字节写 uchar i; for(i=0;i1; sclk=1; void write_ds1302(uchar add,uchar dat) /ds1302写函数 rst=0; _nop_();/ 空操作 sclk=0; _nop_(); rst=1; _nop_(); wirte_ds1302_byte(add); wirte_ds1302_byte(dat); rst=0; io=1; sclk=1; uchar read_ds1302(uchar add) /

22、ds1302读函数 uchar i,value; rst=0; _nop_();/ 空操作 sclk=0; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计 _nop_(); rst=1; _nop_(); wirte_ds1302_byte(add); for(i=0;i1; sclk=0; if(io) value=value|0 x80; sclk=1; rst=0; _nop_();/ 空操作 sclk=

23、0; _nop_(); sclk=1; io=1; return value; void set_rtc() /ds1302时间设置 write_ds1302(0 x8e,0 x00); /关写保护 year1=year/10; /转换为十六进制 year=year%10; year=year+year1*16; write_ds1302(0 x8c,year); week1=week/10; week=week%10; week=week+week1*16; write_ds1302(0 x8a,week); month1=month/10; month=month%10; month=mo

24、nth+month1*16; write_ds1302(0 x88,month); day1=day/10; day=day%10; day=day+day1*16; write_ds1302(0 x86,day); shi1=shi/10; shi=shi%10; shi=shi+shi1*16; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计 write_ds1302(0 x84,shi); fen1=f

25、en/10; fen=fen%10; fen=fen+fen1*16; write_ds1302(0 x82,fen); miao1=miao/10; miao=miao%10; miao=miao+miao1*16; write_ds1302(0 x80,miao); write_ds1302(0 x8e,0 x80); /开写保护 flag1=0; void read_rtc() /从 ds1302 中读时间 year2=read_ds1302(0 x8d); week2=read_ds1302(0 x8b); month2=read_ds1302(0 x89); day2=read_ds

26、1302(0 x87); shi2=read_ds1302(0 x85); fen2=read_ds1302(0 x83); miao2=read_ds1302(0 x81); void time_pros() /从 ds1302 中读出的时间转换为十进制 year5=year2/16; year2=year2%16; year2=year2+year5*10; month5=month2/16; month2=month2%16; month2=month2+month5*10; day5=day2/16; day2=day2%16; day2=day2+day5*10; shi5=shi2

27、/16; shi2=shi2%16; shi2=shi2+shi5*10; fen5=fen2/16; fen2=fen2%16; fen2=fen2+fen5*10; miao5=miao2/16; miao2=miao2%16; miao2=miao2+miao5*10; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计void display() /显示函数 write_sfm(6,miao2); wri

28、te_com(0 x80+0 x40+6); write_sfm(3,fen2); write_com(0 x80+0 x40+3); write_sfm(0,shi2); write_com(0 x80+0 x40+0); write_week(week2); write_com(0 x80+11); write_nyr(8,day2); write_com(0 x80+8); write_nyr(5,month2); write_com(0 x80+5); write_nyr(2,year2); write_com(0 x80+2); if(ashi=shi2)&(afen=fen2) a

29、larm(); void alarm() / 闹钟 beep=0; delay(1000); beep=1; void main() /主函数 init(); /初始化 while(1) keyscan(); /按键函数 if(flag=0) keyscan(); read_rtc(); time_pros(); display(); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 13 页 - - - - - - - - - - 嵌入式电子闹钟() 时钟课程设计精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 13 页 - - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁