#include <reg52.h> //添加头文件
#define uint unsigned int
#define uchar unsigned char
uchar H,M,S,count=0; //时分秒uchar DAT[10]={0x3f,0x06;0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管编码0~9
void delay() //短延时主要用于减小数据显示的抖动和重影
{
uchar i,j;
for(i=10;i>0;i--)
for(j=30;j>0;j--)
;
}
void judge() //改变时分秒的值,使分秒都为60进制,时为24进制
{
if(S==60)
{
S=0;
M++;
}
if(M==60)
{
M=0;
H++;
}
if(H==24)
H=0;
}
void show() //显示函数,P2为位选,P0为段选
{
P2=0X7F,P0=DAT[H/10],delay(); //第一位选中时,显示时的高位,延时下
P2=0XBF,P0=DAT[H%10],delay(); //第二位选中时,显示时的低位,延时下
P2=0XDF,P0=0X40,delay(); //第三位选中时,显示“-”,延时下
P2=0XEF,P0=DAT[M/10],delay(); //第四位选中时,显示分的高位,延时下
P2=0XF7,P0=DAT[M%10],delay(); //第五位选中时,显示分的低位,延时下
P2=0XFB,P0=0X40,delay(); //第六位选中时,显示“-”,延时下
P2=0XFD,P0=DAT[S/10],delay(); //第七位选中时,显示秒的高位,延时下
P2=0XFE,P0=DAT[S%10],delay(); //第八位选中时,显示秒的低位,延时下
}
void main() //主函数
{
TMOD=0X01; //定时器0工作在方式1
TH0=0X3C;
TL0=0XB0; //设置定时器的初值,使得定时时间为50ms(晶振为12MHZ时)
EA=1; //开启总中断
ET0=1; //允许定时器0中断
TR0=1; //开启定时器0
while(1)
show(); //一直执行显示函数
}
void timer0()interrupt 1 //定时器0中断服务程序
{
TH0=0X3C;
TL0=0XB0; //重新设置初值
count++; //每中断一次,计数寄存器加1
if(count==20) //当定时20次时,即50MS*20=1000ms=1s
{
count==0; //将计数值重新归零
judge(); //修改时分秒的值
}
}
怎么把它改成到了1小时置零重记 |