- #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); //两个都打开允许输出信号 等待中断
- }
复制代码
|