数字时钟的设计与分析
姓名:
班级:
学号:
基本要求:
1.时间以24小时为一个周期;
2.显示时、分;电子时钟的格式为:XX.XX,由左向右分别为:时,分。完成显示从1一直加至59,再从为1.00至23.59,在恢复为1;
3.有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间。
扩展功能:
丰富其功能(闹钟功能)
模块:
1.校时电路:设P3.3-P3.4
2.功能按键:设P3.5-P3.7
3.显示电路:采用动态显示;
P3口作为数码管数据(段选);
P2口作为数码管控制(位选);
实验室的硬件是共阳极的数码管;
数码表采用:
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x00};
4.晶振电路
5.复位电路
所需硬件:
AT89C51,电容3个,电阻9个,晶振1个,开关5个,共阳数码管4个,蜂鸣器1个
总原理图
校时模块和功能模块
显示模块
晶振模块
复位模块
蜂鸣模块
源程序
24小时可调时程序
#include unsigned char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char con[6]={0x1,0x2,0x4,0x8,0x10,0x20}; unsigned char mm=0; unsigned char ss=0; unsigned char hh=0; unsigned char count=100; sbit S1=P3^3; sbit S2=P3^4; sbit S3=P3^5; sbit S4=P3^6; main() { TMOD=1; TH0=-10000>>8;TL0=-10000; EA=1;ET0=1;TR0=1; while(1); } void isr_time0() interrupt 1 { unsigned int i=0,j; unsigned char time[6]; TH0=-10000>>8;TL0=-10000; count--; if(count==0) { count=100; ss++; if(ss==60) { ss=0;mm++; if(mm==60) { mm=0;hh++; if(hh==24) hh=0; } } if(S1==0) {hh++; if(hh==24) {hh=0;} time[3]=hh/10;time[2]=hh%10; } if(S2==0) {mm++; if(mm==60) { mm=0;} time[1]=mm/10;time[0]=mm%10; }} time[3]=hh/10;time[2]=hh%10; time[1]=mm/10;time[0]=mm%10; time[4]=ss/10;time[5]=ss%10; for(i=0;i<6;i++) { P2=con[i]; if(i==1||i==3) P1=seg[time[i]]&0x7f; else P1=seg[time[i]]; for(j=100;j>0;j--); } } 因篇幅问题不能全部显示,请点此查看更多更全内容