资源描述:
《基于单片机的数字电子时钟设计.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、基于单片机的数字电子时钟设计以上是proteus里的原理图。以下是程序:#include sbitksec=P1^1;sbitkmin=P1^2;sbitkhour=P1^3;sbitpkey=P3^2;unsignedcharsecshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;unsignedintnum=0,sec=0,min=0,hour=0;unsignedcharcodetable[10]={
2、 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XD8,0X80,0X90 };voiddelay(unsignedint);voidkeyscan();voiddisplay();voidinit(void){TMOD=0x01;//定时器0工作在方式1 TH0=(65536-50000)/256;//定时50ms,定时器0高8位初值 TL0=(65536-50000)%256;//定时50ms,定时器0低8位初值 EA=1; ET0=
3、1;//开启中断允许寄存器 TR0=1;//使TR0置位,启动定时器,定时器便开始计数,计数溢出时,自动进入中断服务程序//开启外部中断,并使得低电平触发EX0=1; //????INT0???IT0=0; //????INT0(?????)}voidmain(){ init(); IE=; //0X8A=,打开外部中断和定时器中断 while(1) {display();//调用显示函数 keyscan();//
4、键盘扫描程序 }}voiddelay(unsignedintz){unsignedintx,y;for(x=z;x>0;x--) for(y=110;y>0;y--);}//延时函数//时钟设置子程序,定时器中断程序voidtime0()interrupt1{num++;//计数加1TH0=(65536-50000)/256; //重装初值TL0=(65536-50000)%256;}//LED显示程序voiddisplay(){if(num==20) {num=0; sec
5、++;//如果num=20,则一秒时间到,秒加1 if(sec==60) {sec=0; min++;//如果sec=60,则一分钟时间到,分加1 if(min==60) {min=0; hour++;//如果min=60,则一小时时间到,小时加1 if(hour==24) {hour=0; min=0; sec=0;//到了23点59分59秒时候最后归零
6、 } } } }secge=sec%10;//秒求余secshi=sec/10;//秒求模minge=min%10;//分求余minshi=min/10;//分求模hourge=hour%10;//小时求余hourshi=hour/10;//小时求模P0=0x80; //OXFE是什么?位选?选中,最后一位,秒?P2=table[secge];//段选delay(4);P0=0x40; //,选中秒的第十位P2=table[secshi];delay(4);P0=0
7、x20; //,选中分的个位P2=table[minge];delay(4);P0=0x10; //,选中分的十位P2=table[minshi];delay(4);P0=0x08;//,选中小时的个位P2=table[hourge];delay(4);P0=0x04;//,选中小时的十位P2=table[hourshi];delay(4);}//按键控制子程序,将出去暂停键之外的其他键放在键盘扫描程序里,暂停键放在外部中断0里面,为了保证记住上一个状态voidkeyscan(){if(ks
8、ec==0) {delay(5); if(ksec==0) {sec++; if(sec>=60) sec=0; } while(!ksec);}if(kmin==0) {delay(5); if(kmin==0) {min++; if(min>=60) min=0; }while(!kmin); }if(khour==0) {delay(5); if(khour==0)