|
這是一個51單片機的時鐘設計,可以調節
秒,分,時的數。一共有四個鍵一個復位,
其他分別是調節秒分時的鍵。- #include<reg51.h>
- #include<absacc.h>
- #define uchar unsigned char
- #define uint unsigned int
- /*七段共陰管顯示定義*/
- uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
- 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};
- /*定義并初始化變量*/
- uchar seconde=0;
- uchar minite=0;
- uchar hour=0;
- uchar mstcnt=0;
- sbit P1_0=P1^0; // second 調整定義
- sbit P1_1=P1^1; //minite調整定義
- sbit P1_2=P1^2; //hour調整定義
- sbit P1_3=P1^3; //暫停定義
- /*函數聲明*/
- void delay(uchar k ); //延時子程序
- void time_pro( ); //時間處理子程序
- void display( ); //顯示子程序
- void keyscan( ); //鍵盤掃描子程序
- /*延時子程序*/
- void delay (uchar k)
- {
- uchar j;
- while((k--)!=0)
- {
- for(j=0;j<125;j++)
- {;}
- }
- }
- /*時間處理子程序*/
- void time_pro( void)
- {
- if(seconde==60) //秒鐘設為60進制
- { seconde=0;
- minite++;
- if( minite==60) //分鐘設為60進制
- { minite=0;
- hour++;
- if(hour==24) //時鐘設為24進制
- {hour=0; }
- }
- }
- }
- /* 顯示子程序*/
- void display(void)
- {
- P2=0x01;
- P0=dispcode[hour/10]; //顯示小時的十位
- delay(10);
- P2=0x02;
- P0=dispcode[hour%10]; //顯示小時的個位
- delay(10);
- P2=0x04;
- P0=dispcode[minite/10]; //顯示分的十位
- delay(10);
- P2=0x08;
- P0=(dispcode[minite%10]); //顯示分的個位
- delay(10);
- P2=0x10;
- P0=dispcode[seconde/10]; //顯示秒的十位
- delay(10);
- P2=0x20;
- P0=dispcode[seconde%10]; //顯示秒的個位
- delay(10);
- }
- /*鍵盤掃描子程序*/
- void keyscan (void)
- {
- if(P1_0==0) //按鍵1秒的調整
- {
- delay(30);
- if(P1_0==0)
- {
- seconde++;
- if(seconde==60)
- {seconde=0; }
- }
- }
- if(P1_1==0) //按鍵2分的調整
- {
- delay(30);
- if(P1_1==0)
- {
- minite++;
- if(minite==60)
- {minite=0;}
- }
- }
- if(P1_2==0) //按鍵3小時的調整
- {
- delay(30);
- if(P1_2==0)
- {
- hour++;
- if(hour==24)
- {hour=0; }
- }
- }
- if(P1_3==0)
- {
- delay(30);
- if(P1_3==0)
- {
- while(!P1_3);
- {TR0=~TR0;} //啟動或停止定時器0
- }
- }
- }
- void timer0(void) interrupt 1
- {
- TH0=0x3c;
- TL0=0xb0;
- mstcnt++;
- if(mstcnt==20)
- {
- seconde++;
- mstcnt=0; //清零
- } //
- }
- /*主函數*/
- void main(void)
- { P1=0xff; //初始化p1口,全設為1
- TMOD = 0x11; //time0為定時器,方式1
- TH0=0x3c; //預置計數初值
- TL0=0xb0;
- EA=1;
- ET0=1;
- TR0=1;
- while (1)
- {
- keyscan( ); //按鍵掃描
- time_pro( ); //時間處理
- display( ); //顯示時間
- }
- }
復制代碼
|
-
時鐘.jpg.png
(562.03 KB, 下載次數: 70)
下載附件
2018-10-26 20:46 上傳
-
-
時鐘20407.rar
2018-10-26 20:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
70.48 KB, 下載次數: 56, 下載積分: 黑幣 -5
-
-
新時鐘20407.rar
2018-10-26 20:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
34.31 KB, 下載次數: 50, 下載積分: 黑幣 -5
|