#include<reg52.h>
sbit ADDR0 = P2^2;
sbit ADDR1 = P2^3;
sbit ADDR2 = P2^4;
sbit KEY1 = P1^0;
sbit KEY2 = P1^1;
sbit KEY3 = P1^2;
sbit KEY4 = P1^3;
unsigned char code LedChar[] = {0xc0, 0xf9, 0xa4, 0xB0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,0x88, 0x83,0xc6,0xa1, 0x86, 0x8e};
unsigned char LedBuff[] = {0xff,0xff};
unsigned char i = 0;
unsigned char cnt = 0;
unsigned char left = 0;
unsigned char right = 0;
unsigned long sec = 0; /*算流水灯的*/
unsigned char cd = 0;/*倒计时*/
unsigned int mov = 0;
unsigned char flag1s = 0;
bit KeySta = 1;
void cutdown()
{
}
void main()
{
bit backup = 1;
unsigned int time = 99;
EA = 1;
TMOD = 0X01;
TH0 = 0XF8; /*2ms*/
TL0 = 0XCD;
ET0 = 1;
TR0 = 1;
P1 = 0X7f;
while(1)
{
if(KeySta != backup)
{
if(backup ==
cnt++;
}0)
{
backup = KeySta;
}
if(cnt == 1) /*流水灯左移*/
{
left = 1; /*左移标志位*/
}
if(cnt == 2)/*流水灯右移*/
{
right = 1;/*右移标志位*/
}
if(cnt == 3)/*99秒倒计时*/
{
cd = 1;
if(flag1s == 1)
{
flag1s = 0;
time--;
LedBuff[0] = LedChar[time%10];/*数码管显示*/
LedBuff[1] = LedChar[time/10];
}
}
if(cnt == 4)/*全灭*/
{
P0 = 0X00;
P2 = 0Xff;
left = 0;
right = 0;
cd = 0;
cnt = 0;
}
}
}
void interruptTimer() interrupt 1
{ static unsigned char mov1 = 0;
static unsigned char keybuf = 0xFF;
TH0 = 0XF8;
TL0 = 0XCD;
keybuf = (keybuf<<1) | KEY4;
if(keybuf == 0x00)
{
KeySta = 0;
}
else if(keybuf == 0xff)
{
KeySta = 1;
}
sec++;
if(sec >= 500)
{
sec = 0;
flag1s = 1;
if(left)
{ P2 = 0XFF;
P2 = ~(0x01<<mov);
mov++;
left = 0;
}
if(right)
{
P2 = 0XFF;
P2 = ~(0x80>>mov1);
mov1++;
right = 0;
}
}
P0 = 0X00;
if(cd)
{ P0 = 0x00;/*刷新*/
P2 = 0XFF;
switch(i)
{
case 0 : ADDR2 = 0 ; ADDR1 = 0 ; ADDR0 = 0; i++; P0 = ~LedBuff[0]; break;
case 1 : ADDR2 = 0 ; ADDR1 = 0 ; ADDR0 = 1; i=0; P0 = ~LedBuff[1]; break;
}
}
else P0 = 0X00;
}
|