单片机 数码管LED 显示电子钟(C语言)转载
2010-10-22 01:32
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
void delay_ms(uchar ms);
void key_scan();
void key_to();
uchar code dis_code[11] = {0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0xbf};
uchar data dis[8];
uchar data sec = 0;
uchar data min = 0;
uchar data hou = 0;
uchar data cou = 0;
uchar data dis_b;
uchar data dis_r;
uchar data key_v = 0;
uchar data key_t = 0;
void main()
{
P2 = 0xff;
P1 = 0xff;
dis[2] = 10;
dis[5] = 10;
dis_b = 0x7f;
dis_r = 0;
TMOD = 0x11;
TH0 = 0xd8;
TL0 = 0xf0;
TH1 = 0xfc;
TH1 = 0x18;
EA = 1;
ET0 = 1;
ET1 = 1;
TR0 = 1;
TR1 = 1;
while(1)
{
key_t = P1;
if(key_t != key_v)
{
delay_ms(10);
key_t = P1;
if(key_t != key_v)
{
key_v = key_t;
key_to();
}
}
}
}
void key_to()
{
if(key_v == 0xef)
{
if(min == 59)
min = 0;
else
min++;
}
else
{
if(key_v == 0xdf)
{
if(hou == 23)
hou = 0;
else
hou++;
}
}
}
void tiem0(void) interrupt 1
{
cou++;
if(cou == 100)
{
cou = 0;
sec++;
if(sec == 60)
{
sec = 0;
min++;
if(min == 60)
{
min = 0;
hou++;
if(hou == 23)
hou = 0;
}
}
}
TH0 = 0xd8;
TL0 = 0xf0;
}
void time1(void) interrupt 3
{
dis[0] = sec % 10;
dis[1] = sec / 10;
dis[3] = min % 10;
dis[4] = min / 10;
dis[6] = hou % 10;
dis[7] = hou / 10;
P0 = dis_code[dis[dis_r]];
P2 = dis_b;
dis_r++;
dis_r &= 0x07;
dis_b = _cror_(dis_b,1);
TH1 = 0xfc;
TL1 = 0x18;
}
void delay_ms(uchar ms)
{
uchar i;
while(ms--)
for(i = 0; i < 124; i++);
}
|
|