51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能) | 您所在的位置:网站首页 › 北京时间校准显示器倒计时 › 51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能) |
51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能) 首先展示硬件设计部分,此处采用proteus仿真演示。其中液晶屏上面一行显示的是实际时间,下面一行显示的是设定闹钟时间。通过调节单刀双掷开关来改变正在调整的时间是实际时间还是闹钟时间。下面的三个按键依次用来调节模式(模式即正在调节的量是时、分或秒,通过最上面的三个LED灯来表达出来),下面的两个按键分别用来进行加减一的操作。 2、与液晶显示有关的各种函数 void LCDdelay(uint x) //该延时大约100us(不精确,液晶操作的延时不要求很精确) { uchar j; while(x--) for(j=0;j lcdrs=1; lcdrw=0; P1=lcddate; LCDdelay(5); lcden=1; LCDdelay(5); lcden=0; } //1602初始化 void Init1602() { lcden=0; write_com(0x38);//屏幕初始化 write_com(0x0c);//打开显示 无光标 无光标闪烁 write_com(0x06);//当读或写一个字符是指针后一一位 write_com(0x01);//清屏 write_com(0x80+2); for(j=0;j write_data(Set[j]); LCDdelay(5); } write_com(0x80+6); for(j=0;j write_data(set_time[j]); LCDdelay(5); } }3、其他各定时、调节等函数(电子钟功能实现) /*定时1s*/ void timer0()interrupt 1 { TH0=15536/256; TL0=15536%256; i--; if(i==0){ i=20; rel_sec++; if(rel_sec==60){ rel_sec=0; rel_min++; if(rel_min==60) { rel_min=0; rel_hour++; if(rel_hour==24){ rel_hour=0; } } } Key(); comp(); baoshi(); dis(); } } void dis(){ rel_time[0]=rel_hour/10; rel_time[1]=rel_hour%10; rel_time[2]='-'-0x30; rel_time[3]=rel_min/10; rel_time[4]=rel_min%10; rel_time[5]='-'-0x30; rel_time[6]=rel_sec/10; rel_time[7]=rel_sec%10; set_time[0]=set_hour/10; set_time[1]=set_hour%10; set_time[2]='-'-0x30; set_time[3]=set_min/10; set_time[4]=set_min%10; set_time[5]='-'-0x30; set_time[6]=set_sec/10; set_time[7]=set_sec%10; write_com(0x80+6); for(j=0;j write_data(set_time[j]+0x30); LCDdelay(5); } } void Key(){ if(keymode==0){ mode++; if(mode==4) mode=1; } if(mode==1){ ledsec=1; ledmin=0; ledhour=0; } if(mode==2){ ledsec=0; ledmin=1; ledhour=0; } if(mode==3){ ledsec=0; ledmin=0; ledhour=1; } if(cho==0){ choose=0; } else{ choose=1; } if(keyadd==0){ if(mode==1){ if(choose==0){ rel_sec++; if(rel_sec==60){ rel_sec=0; } } else{ set_sec++; if(set_sec==60){ set_sec=0; } } } else if(mode==2){ if(choose==0){ rel_min++; if(rel_min==60){ rel_min=0; } } else{ set_min++; if(set_min==60){ set_min=0; } } } if(mode==3){ if(choose==0){ rel_hour++; if(rel_hour==24){ rel_hour=0; } } else{ set_hour++; if(set_hour==24){ set_hour=0; } } } } if(keysub==0){ if(mode==1){ if(choose==0){ if(rel_sec==0){ rel_sec=59; } else rel_sec--; } else{ if(set_sec==0){ set_sec=59; } else set_sec--; } } else if(mode==2){ if(choose==0){ if(rel_min==0){ rel_min=59; } else rel_min--; } else{ if(set_min==0){ set_min=59; } else set_min--; } } if(mode==3){ if(choose==0){ if(rel_hour==0){ rel_hour=23; } else rel_hour--; } else{ if(set_hour==0){ set_hour=23; } else set_hour--; } } } } void delay(uint x) //该延时大约100us { uchar j; while(x--) for(j=0;j bee=1; delay(500); bee=0; } } void comp(){ if(rel_hour==set_hour&&rel_min==set_min&&rel_sec==set_sec+1) {bee=1; delay(1000); bee=0;} }4、主函数 void main() { cho=0; bee=0; ledsec=0; ledmin=0; ledhour=0; mode=1; keymode=1; keyadd=1; Init1602(); TMOD=0X01; TH0=15536/256; TL0=15536%256; EA=1; ET0=1; TR0=1; while(1); }基于以上,即可实现51单片机数字电子钟的设计,全部代码及仿真文件下载链接:https://download.csdn.net/download/creampang/85674151?spm=1001.2014.3001.5503 |
CopyRight 2018-2019 实验室设备网 版权所有 |