T0方式2實現簡單電子時鐘仿真試驗,keil+protues實現
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
捕獲.JPG (198.33 KB, 下載次數: 54)
下載附件
2019-3-23 11:34 上傳
0.png (11.21 KB, 下載次數: 20)
下載附件
2019-3-24 03:58 上傳
單片機源程序如下:
- //按4X4鍵盤的F鍵 進入設定狀態
- //E D 鍵是前后移動鍵
- //C按鍵是調整數值按鍵
- #include "reg52.h"
- #define uchar unsigned char
- sbit key_h=P1^0;
- sbit key_m=P1^1;
- sbit key_s=P1^2;
- unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段碼表
- unsigned int h,m,s,counter;
- void delay1ms(unsigned int i)
- {
- unsigned char j;
- while(i--)
- {
- for(j=0;j<125;j++) //1ms基準延時程序
- {
- ;
- }
- }
- }
- void Display_h(unsigned char x)
- {
- P2=0xfb; //P2.6引腳輸出低電平,DS6點亮
- P0=Tab[x/10]; //顯示十位
- delay1ms(5);
- P2=0xff;
- P2=0xf7; //P2.7引腳輸出低電平,DS7點亮
- P0=Tab[x%10]; //顯示個位
- delay1ms(5);
- P2=0xff;
- }
- void Display_m(unsigned char x)
- {
- P2=0xef; //P2.6引腳輸出低電平,DS6點亮
- P0=Tab[x/10]; //顯示十位
- delay1ms(5);
- P2=0xff;
- P2=0xdf; //P2.7引腳輸出低電平,DS7點亮
- P0=Tab[x%10]; //顯示個位
- delay1ms(5);
- P2=0xff;
- }
- void Display_s(unsigned char x)
- {
- P2=0xbf; //P2.6引腳輸出低電平,DS6點亮
- P0=Tab[x/10]; //顯示十位
- delay1ms(5);
- P2=0xff;
- P2=0x7f; //P2.7引腳輸出低電平,DS7點亮
- P0=Tab[x%10]; //顯示個位
- delay1ms(5);
- P2=0xff;
- }
- /*********************初始化子程序**********************/
- void init()
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- counter=0;
- h=12;m=0;s=0;
- }
- /***************************按鍵調時間************************/
- void TZ_h()
- {
- h++;
- if(h>24)
- {
- h=0;
- }
- while(key_h!=1);
- TR0=1;
- }
- void TZ_m()
- {
- m++;
- if(m>60)
- {
- m=0;
- }
- while(key_m!=1);
- TR0=1;
- }
- void TZ_s()
- {
- s++;
- if(s>60)
- {
- s=0;
- }
- while(key_s!=1);
- TR0=1;
- }
- /***************************主程序************************/
- void main(void)
- {
- init();
- while(1)
- {
- Display_h(h);
- Display_m(m);
- Display_s(s);
- if(key_h==0)
- delay1ms(20);
- if(key_h==0)
- {
- TR0=0;
- TZ_h();
- }
- if(key_m==0)
- delay1ms(20);
- if(key_m==0)
- {
- TR0=0;
- TZ_m();
- }
- if(key_s==0)
- delay1ms(20);
- if(key_s==0)
- {
- TR0=0;
- TZ_s();
- }
- }
- }
- /*************************定時器0的中斷**********************/
- void Time0() interrupt 1 using 2 //再次強調中斷子程序執行時間越短越好
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- counter++;
- if(counter==20)
- {
- s++;
- counter=0;
- if(s==60)
- {
- m++;
- s=0;
- if(m==60)
- {
- h++;
- m=0;
- if(h==24)
- h=0;
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
簡單時鐘顯示實驗.rar
(51.09 KB, 下載次數: 40)
2019-3-23 11:31 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|