#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小時置零重記 |