|
本帖最后由 xiaos 于 2015-4-2 21:47 编辑
在此给大家分享用单片机实现的数字时钟。在此分享较为关键的部分——程序:如下:
//本数字钟以24时制显示。其中独立按钮S19(P3^2)为调时开始按钮;S1(P1^0)为调秒;S5(P1^1)为调分;
// S9(P1^2)为调时;S12(P1^3)为确定;
//采用晶振为11.0592 //
- #include <reg51.h>
- sbit sb1=P1^0;
- sbit sb2=P1^1;
- sbit sb3=P1^2;
- sbit sb4=P1^3;
- sbit dd=P1^4;
- code w[8]={0,1,2,3,4,5,6,7};
- code LED[11] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
- unsigned int z,k,t,n,b,v,c;
- void m(float i)
- {
- unsigned int x,j;
- for(j=0;j<i;j++)
- for(x=0;x<=100;x++);
- }
- void main()
- {
- TMOD=0X01;
- TH0=(65336-45872)/256;
- TL0=(65336-45872)/256;
- EA=1;
- ET0=1;
- TR0=1;//定时器中断//
- IT0=1;
- EX0=1; //按键中断//
- dd=0;
- while(1)
- {
- EX0=1;
- P0=LED[z];
- P2=w[7];
- m(1);
- P0=LED[t];
- P2=w[6];
- m(1); //秒
-
- P2=w[5];
- P0=LED[10];
- m(1); //间隔线
-
- P0=LED[n];
- P2=w[4];
- m(1);
- P0=LED[b];
- P2=w[3];
- m(1); //分
-
- P2=w[2];
- P0=LED[10];
- m(1); //间隔线
-
- P0=LED[v];
- P2=w[1];
- m(1);
- P0=LED[c];
- P2=w[0];
- m(1); //时
-
- if(z==10)
- {
- z=0;
- t++;
- }
- if(t==6)
- {
- t=0;
- n++;
- } //秒判断
-
- if(n==10)
- {
- n=0;
- b++;
- }
-
- if(b==6)
- {
- b=0;
- v++;
- } //分判断
-
- if(v==10)
- {
- v=0;
- c++;
- }
-
- if(c==2)
- if(v==4)
- {
- c=0;
- v=0;
- n=0;
- b=0;
- n=0;
- t=0;
- z=0;
- } //时判断
- }
- }
- void tt() interrupt 1 //定时器中断服务函数
- {
- TH0=(65336-45872)/256;
- TL0=(65336-45872)/256;
- k++;
- if(k==20)
- {
- k=0;
- z++;
- }
- }
- void KEY() interrupt 0 //按键中断服务函数
- {
- while(1)
- {
- if(sb1==0) //调秒按键
- {
- sb1=1;
- z++;
- m(200);
- if(z==10)
- {
- z=0;
- t++;
- if(t==6) t=0;
- }
- }
- if(sb2==0) //调分按键
- {
- sb2=1;
- n++;
- m(200);
- if(n==10)
- {
- n=0;
- b++;
- if(b==6) b=0;
- }
- }
- if(sb3==0) //调时按键
- {
- sb3=1;
- v++;
- m(200);
- if(v==10)
- {
- v=0;
- c++;
-
- }
- if(c==2)
- if(v==4)
- {
- c=0;
- v=0;
- }
- }
- P0=LED[z]; //数码管显示
- P2=w[7];
- m(1);
- P0=LED[t];
- P2=w[6];
- m(1);
- P2=w[5];
- P0=LED[10];
- m(1);
- P0=LED[n];
- P2=w[4];
- m(1);
- P0=LED[b];
- P2=w[3];
- m(1);
- P2=w[2];
- P0=LED[10];
- m(1);
- P0=LED[v];
- P2=w[1];
- m(1);
- P0=LED[c];
- P2=w[0];
- m(1);
- if(sb4==0) break; //确定按钮
- }
- EX0=0;
- }
复制代码
|
|