版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE5单片机万年历实训仿真图:原理图:程序:/******************************************使用LCD1602与单片机实现的时钟与日期inti,j,day=0;charmweek;for(i=2000;i<time.year;i++){if(leep_year(i))day+=366;elseday+=365;}for(j=1;j<time.month;j++){if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)day+=31;if(j==4||j==6||j==9||j==11)day+=30;if(flag_year_leap&&j==2)day+=29;if((!flag_year_leap)&&j==2)day+=28;}day+=time.mday;mweek=day%7;switch(mweek){case0:time.week=5;break;case1:time.week=6;break;case2:time.week=7;break;case3:time.week=1;break;case4:time.week=2;break;case5:time.week=3;break;case6:time.week=4;break;} time_ch.ch_week[0]=time.week+0x30;}//月份的进位处理voidtime_carry_mon_year(void){flag_year_leap=leep_year(time.year);//判断闰年if(time.mday>=30){if(time.month==1||time.month==3||time.month==5||time.month==7\||time.month==8||time.month==10||time.month==12)//天数为31天的月,1、3、5、7、8、10、12{if(time.mday==32){time.mday=1;time.month++;}}if(time.month==4||time.month==6||time.month==9||time.month==11){if(time.month==31){time.mday=1;time.month++;}}tran_ch();}if(time.month==2&&time.mday>=28){if(flag_year_leap&&(time.mday==30)){time.mday=1;time.month++;}if((!flag_year_leap)&&(time.mday==29)){time.mday=1;time.month++;}tran_ch();}if(time.month==13){time.month=1;time.year++;tran_ch();}//年的进位}//时间的进位voidtime_carry(void){if(time.second==60){time.minute++;time.second=0;}if(time.minute==60){time.hour++;time.minute=0;}if(time.hour==24){time.mday++;time.hour=0;time_carry_mon_year();de_week();}}//屏幕的显示函数voiddsp(void){if(flag_en_key==0)//非设置模式下的显示{tran_ch();wcmd(0x02);//returncursorwstring(time_ch.ch_hour,2);wdata(':');wstring(time_ch.ch_minute,2);wdata(':');wstring(time_ch.ch_second,2);wstring("",3);wcmd(0x80+0x40);wstring("",3);wstring(time_ch.ch_year,4);wdata('-');wstring(time_ch.ch_month,2);wdata('-');wstring(time_ch.ch_mday,2);wstring("W",2);wdata(time_ch.ch_week[0]);}if(flag_en_key==1)//设置模式下的显示{if(flag_set<=2){tran_ch();wcmd(0x02);//returncursorwstring(time_ch.ch_year,4);wdata('-');wstring(time_ch.ch_month,2);wdata('-');wstring(time_ch.ch_mday,2);}if(flag_set>2){tran_ch();wcmd(0x02);//returncursorwstring(time_ch.ch_hour,2);wdata(':');wstring(time_ch.ch_minute,2);wdata(':');wstring(time_ch.ch_second,2);wstring("",3);}}}//显示字符串string_…voiddsp_string(char*pt){chari=0;wcmd(0x80+0x40);//将光标调整至第二行while(pt[i]){wdata(pt[i]);i++;}}//退出按键模式voidexit_key(void){chari;flag_en_key=0;flag_en_ok=0;flag_ok=0;flag_mean=0;flag_set=0;//清除所有标记wcmd(0x80+0x40);for(i=0;i<=16;i++)wdata('\0');}//按键的处理子函数(由外中断调用)intsolve_key(void){//if(key_mean==0);if(key_ok==0)//确定或退出{if(flag_ok) { exit_key(); time_carry_mon_year(); de_week(); return0; } elseflag_ok=1;}if(key_set==0){if(flag_ok==0)//时分秒的选择{flag_set++;if(flag_set==6)flag_set=0;switch(flag_set){case0:dsp_string(string_year);break;case1:dsp_string(string_month);break;case2:dsp_string(string_mday);break;case3:dsp_string(string_hour);break;case4:dsp_string(string_minute);break;case5:dsp_string(string_second);break;}}if(flag_ok==1)//时分秒的设置{switch(flag_set){case0:{time.year++;if(time.year==10000)time.year=2000;break;}case1:{time.month++;time_carry_mon_year();break;}case2:{time.mday++;time_carry_mon_year();break;}case3:{time.hour++;if(time.hour==24)time.hour=0;break;}case4:{time.minute++;if(time.minute==60)time.minute=0;break;}case5:{time.second++;if(time.second==60)time.second=0;break;}}}}if(flag_ok==1)//是否更改数据 是显示OK否显示?{wcmd(0x80+0x4e);wdata('O');wdata('K');}else{wcmd(0x80+0x4e);wdata('\0');wdata('?');}return0;}//MCU的秒中断函数与显示函数的执行voidINT_sec()interrupt1using0{if(flag_sec==20)//flag_sec==20代表1s{flag_sec=0;TH0=0x3c;TL0=0xb0+10;//定时器再次进入0.05s的中断//加10是为了抵消中断与前两个指令消耗的时间(不精确)time.second++;flag_en_ok=0;//去掉key_ok的特殊优先权time_carry();dsp();}else{flag_sec++;TH0=0X3C;TL0=0XB0+10;//定时器再次进入0.05s的中断}}//外中断0,键盘中断INT_X0(void)interrupt0using0{LCD_delay(); //去抖TR0=0;//关闭定时计数器0if(key_mean==0){flag_en_ok=1;flag_ok=0;dsp_string(string_year);}if(flag_en_ok&&key_ok==0){flag_en_key=1;flag_en_ok=0;}if(flag_en_key==1){solve_key();}TR0=1;//启动定时计数器0}//LCD的初始化voidinit(void){E=0;//确定E在初始化时为0wcmd(0x01);wcmd(0x06);wcmd(0x0c);wcmd(0x38);}/************main函数*****************/intmain(){//单片机的初始化EA=1;ET0=1;//定时计数器0的使能EX0=1;//外中断0的使能IT0=1;//下降沿触发中断IP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 康复技能大赛选拔赛理论试题
- 2025高考化学高三化学大二轮专项专题小题各个击破 题型19 有关电化学的综合考查
- 新疆伊犁哈萨克自治州伊宁县2024-2025学年九年级上学期12月物理检测试卷(无答案)
- 2025年贵州省初中学业水平考试英语模拟试卷试题(含答案)
- 福建省福州市连江县黄如论中学贵安学校2024-2025学年上学期九年级数学期末模拟卷(无答案)
- 医学教材 产褥期感染
- 高一 教科版 信息技术 必修一第三单元《数据编码(第2课时)》课件
- 2025届新高考语文全国各省市联考卷10月 卷五
- FOCUS-PDCA改善案例-优护团队提高人工气道患者吸痰护士操作合格率医院品质管理成果汇报
- 青海省西宁市大通县2023-2024学年高三上学期语文期末考试试卷
- FOCUS-PDCA改善案例-提高术前手术部位皮肤准备合格率医院品质管理成果汇报
- 小家电产品供货服务方案
- 皮肤保湿霜化妆品市场发展预测和趋势分析
- 期末(试题)-2024-2025学年人教PEP版英语六年级上册
- 2024安全生产标准化管理体系新旧版本对比版
- 电大本科《西方经济学》期末试题标准题库及答案(试卷号:1026)
- 国开(浙江)2024年秋《中国建筑史(本)》形考作业1-4答案
- 医院检验科实验室生物安全程序文件SOP
- 2024年街道办事处招考编外工作人员考试题库附答案
- 华润电力测评2024题库
- 写字楼保洁服务投标方案
评论
0/150
提交评论