|
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9
uchar code se[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //0.-9.
char Min,Sec; //定义十位和个位
void delayms(uint z) //延时1秒钟
{
uint x;
for(;z>0;z--)
for(x=110; x>0; x--);
}
void Time_Init() //时间初始化
{
EA = 1;
TMOD |= 0X01;
TH0 = (65536 - 2000)/256;
TL0 = (65536 - 2000)%256;
ET0 = 1;
}
void display() //显示程序
{
P2 = 0xfe;
P0 = du[Sec];
delayms(2);
P0 = 0xff;
P2 = 0xfd;
P0 = se[Min];
delayms(2);
P0 = 0xff;
}
void keyboradscan()
{
uchar key;
static uchar key_on = 0;
key = P3 & 0x0f;
if(key != 0x0f)
{
if(key_on ==0)
{
key_on = 1;
switch (key)
{
case 0x0e:TR0 = 1;break;
case 0x0d:TR0 = 0;break;
case 0x0b:TR0 = 0;Sec = 0;Min = 0;break;
}
}
}
else
{
key_on = 0;
}
}
void main()
{
Time_Init(); //时间初始化
while(1)
{
display(); //显示扫描
keyboradscan(); //键盘扫描
if(Min == 9 && Sec == 9)
{
TR0 = 0;
Min = 9;Sec = 9;
}
}
}
void Timer0() interrupt 1
{
static int count;
TH0 = (65536 - 2000)/256;
TL0 = (65536 - 2000)%256;
count++;
if(count >= 50) //1毫秒加1
{
count = 0;
Sec++;
if(Sec > 9) //加到9后
{
Sec = 0; //毫秒清零
Min++; //秒加1
if(Min > 9)
Min = 0; //秒清零
}
}
}
|
|