- #include<reg51.h>
- unsigned charnum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- //定義一個數組,來表示數碼管對應的數字
- unsigned charhour=12,minute=0,second=0;a=0;
- int time=8000; //定義定時時間
- void clockl()interrupt 1 //中斷處理程序
- {
- static unsigned char i=0;
- TH0=(65536-time)/256; //重新載入T0的初值
- TL0=(65536-time)%256; //重新載入T0的初值
- a++;
- if(a==125) //如果進行了125次中斷
- {
- a=0;
- second++;
- if(second==60)
- {
- second=0;
- minute++;
- if(minute==60)
- {
- minute=0;
- hour++;
- if(hour==24)
- hour=0;
- }
- }
- }
- switch(i)
- {
- case 0:P2=0x08;P0=num[hour/10];i++;break;
- case 1:P2=0x09;P0=num[hour%10];i++;break;
- case 2:P2=0x0a;P0=num[minute/10];i++;break;
- case 3:P2=0x0b;P0=num[minute%10];i++;break;
- case 4:P2=0x0c;P0=num[second/10];i++;break;
- case 5:P2=0x0d;P0=num[second%10];i=0;break;
- }
- }
- void main()
- {
- TMOD=0X01; //工作方式寄存器T1不工作處于模式0的狀態下T0工作處于模式1的狀態下
- TH0=(65536-time)/256; //高八位的值 載入初值
- TL0=(65536-time)%256; //低八位的值
- TR0=1; //打開定時器的管腳
- EA=1; // 把總開關閉合
- ET0=1; //允許中斷發生 打開中斷T0
- while(1); //兩個都打開允許輸出信號 等待中斷
- }
復制代碼
|