|
本帖最后由 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;
- }
復制代碼
|
|