if(flag==3) //闹钟对时 { if(KEY2==0) { delay(10); if(KEY2==0) { hour1++;if(hour1==24)hour1=0; } //闹钟时间 小时 加1 while(!KEY2){ alarm(); } } if(KEY3==0) { delay(10); if(KEY3==0) { hour1--;if(hour1==0)hour1=23; } //闹钟时间 小时 减 while(!KEY3) { alarm();} } } if(flag==4) { if(KEY2==0) //按键去抖以及动作 { delay(10); if(KEY2==0) { minute1++;if(minute1==60)minute1=0; //闹钟分加1 }while(!KEY2){ alarm(); } }
if(KEY3==0) //按键去抖以及动作 {
delay(10); if(KEY3==0) { minute1--;if(minute1==0)minute1=59; } //闹钟分减1 }while(!KEY3) {alarm();} } }
/*******************蜂鸣器子程序****************************/ void beng() {
bear=1; P3=0xfd; delay(100); bear=0; P3=0XFf; delay(100); }
/*****************整点报警子程序***************************/ void zhengdian (void) { uchar i=0; if((second==0)&(minute==0))//整点报时 { for(i=0;i<10;i++) { TR0=1; beng();dispaly(ms); } } }
/********************************定时闹钟****************/ void alarm() { uint i; if((hour==hour1&&second1==minute1&&(second>=second1&&second /**************************中断子程序*********************************/ void time_() interrupt 1 //中断程序 { count++; TH0=(65536-50000)/256; //0.5ms重新送初值 TL0=(65536-50000)%6; if(count==20) //定时器计数,定时50ms,count满20,秒加1 { second++; count=0; if(second==60) //秒值等于60,秒清零,分加1 { second=0;minute++; } /***********************主函数***************************/ void main() { P1=0XFF; TMOD = 0x11; //time0为定时器,方式1 TH0=(65536-50000)/256; //预置计数初值,50ms TL0=(65536-50000)%6; EA=1; //总中断开 ET0=1; //允许定时器0中断 TR0=1; //开启定时器0 while(1) //主循环 { if(flag==0) { TR0=0; dispaly(ms);} if(P1!=0XFF) { keycan(); } if(flag>0) { if(flag==1||flag==2){ TR0=1; dispaly(StrTab); zhengdian ();} if(flag==3||flag==4) { TR0=0;alarm(); } if(flag==5) { dispaly(StrTab); } if(flag==6) { TR0=0; flag=0; dispaly(ms); }} } } if(minute==60) { minute=0; hour++; if(hour==24) {hour=0;} } } } xianshishuzu(); //分值等于60,分清零,时加1 //时值等于24,时清零,返回,全部归零 4 设计结论、仿真结果、误差分析、教学建议 4.1 设计课题的设计结论及使用说明 本设计为基于单片机的电子钟的设计。刚开始,我们很多地方理不清头绪,无从下手,但通过认真研究设计课题,找书上网查资料买元件,确定基本设计方案,对所用芯片功能进行查找、调试,然后画电路图制PCB板、打孔、溶铜、焊接等,真的经历了许多困难,却积累了很多宝贵的经验,本设计用2个四位一体的共阳数码管做为显示器,它显示时间值;设计中有三个按键,其中KEY1为启动键,KEY2为加控制键 KEY3为减控制键 。 4.2 设计课题的仿真结果 在Proteus ISIS的Debug菜单中选择Execute,运行程序,系统仿真结果如图 所示。 仿真结果图见附录D 实现功能: 可调整运行的电子钟具有三种工作状态:“d.1004-22”状态、运行状态、调整状态。 (1)、“d.1004-22”状态,依靠上电或按复位键进入,在此状态下,按KEY2、KEY3 键均无效, 按KEY1键有效,进入运行状态; (2)、运行状态,在此状态下,按KET2、KEY3键均无效,只有按KEY1键有效, 按下KEY1键后,退出运行状态,进入调整状态; (3)、调整状态,按KEY1键进入时、分、秒的闪烁,在此状态下,按KEY2(+1 键)、 KEY3(-1键)键均有效;调整结束后必须按KEY1键,即可退出调整状态,进入 运行状态。在调整状态时长按KRY2、KEY3时可以连加及连减。 时间显示格式为:时-分-秒; 图4-2 “d.1004-22”上电初始化运行状态仿真结果 图4-3 时钟正常运行状态仿真结果 图4-4 闹钟定时调整状态仿真结果