- /*程序名稱:at89s52實現時鐘
- 程序功能:用at89s52和七段數碼管實現計時時鐘
- 作者 :hankjulianth
- */
- #include"reg52.h"
- #define uchar unsigned char
- #define uint unsigned int
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uint sec,min,hour;//秒,分,時計數
- uint t1;//定義計數器
- sbit sc=P3^7;//鎖存信號
- void _init_();//初始化函數
- void timer0();//定時器T0中斷函數
- void showtime();//時間顯示函數
- void settime(uint,uint,uint)
- void main()
- {
- t1=0;
- settime(0,0,0);
- _init_();
- while(1)
- {
- if(t1==20)
- {
- sec++;
- t1=0;
- }
- if(sec==60)
- {
- min+=1;
- sec=0;
- }
- if(min==60)
- {
- hour+=1;
- min=0;
- }
- if(hour==24)
- {
- hour=0;
- }
-
- showtime();
- }
- }
- void _init_()
- {
-
- //啟用且設置T0,定時50ms
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TMOD=0x01;
- TR0=1;
- }
- void timer0() interrupt 1
- {
- _init_();
- t1++;
- }
- void settime(uint i,uint j,uint k)//設置初始時間函數: k : j : i
- {
- sec=i;
- min=j;
- hour=k;
- }
- void showtime()
- {
- //秒鐘顯示
- sc=1;
- P0=table[sec/10];
- P2=0x06;
- sc=0;
-
- sc=1;
- P0=table[sec%10];
- P2=0x07;
- sc=0;
-
- //分鐘顯示
- sc=1;
- P0=table[min/10];
- P2=0x03;
- sc=0;
- sc=1;
- P0=table[min%10];
- P2=0x04;
- sc=0;
-
- //時鐘顯示
- sc=1;
- P0=table[hour/10];
- P2=0x01;
- sc=0;
- sc=1;
- P0=table[hour%10];
- P2=0x0;
- sc=0;
- }
復制代碼
|