当前位置:文档之家› 数字时钟c语言程序

数字时钟c语言程序

#include
#define uchar unsigned char
#define uint unsigned int
sbit S_SET=P1^0;
sbit M_SET=P1^1;
sbit H_SET=P1^2;
sbit RESET=P1^3;
unsigned char SECOND,MINITE,HOUR,TCNT,restar=0;
uchar code scan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code table[13]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x39,0x00};
uchar dispbuf[8];
void delay (unsigned int us)
{while(us--);}
void SCANDISP()
{unsigned char i,value;
for(i=0;i<8;i++)
{P3=0xff;
value=table[dispbuf[i]];
P0=value;
P3=scan[i];
delay(50);
}
}
void Timer0(void)interrupt 1 using 1
{ TH0=(65536-50000)/256;
TL0=(65536-50000)/256;
TCNT++;
if(TCNT==20)
{SECOND++;
TCNT=0;
if(SECOND==60)
{MINITE++;
SECOND=0;
if(MINITE==60)
{HOUR++;
MINITE=0;
if(HOUR==24)
{HOUR=0;
MINITE=0;
SECOND=0;
TCNT=0;
}
}
}
}
}
void DISPLAY()
{
SCANDISP();
dispbuf[6]=SECOND/10;
dispbuf[7]=SECOND%10;
dispbuf[5]=10;
dispbuf[3]=MINITE/10;
dispbuf[4]=MINITE%10;
dispbuf[2]=10;
dispbuf[0]=HOUR/10;
dispbuf[1]=HOUR%10;
}
void KEY_TEST()
{ DISPLAY();
P1=0xff;
restar=0;
if(S_SET==0)
{ delay(100);
if(S_SET==0)
{SECOND++;
if(SECOND==60)
{SECOND=0;
}
while(S_SET==0)DISPLAY();
}
}
if(M_SET==0)
{delay(100);
if(M_SET==0)
{MINITE++;
if(MINITE==60)
{MINITE=0;
}
while(M_SET==0)DISPLAY();
}
}
if(H_SET==0)
{delay(100);
if(H_SET==0)
{HOUR++;
if(HOUR==24)
{HOUR=0;
}
while(H_SET==0) DISPLAY();
}
}
if(RESET==0)
{delay(100);
if(RESET==0)
{restar=1;
}
}
}
void main()
{while(1)
{HOUR=0;
MINITE=0;
SECOND=0;
TCNT=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;
while(1)
{KEY_TEST();
if(restar==1)
break;
}
}
}


相关主题
文本预览
相关文档 最新文档