|
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code zixingma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2; //黃燈
sbit P23=P2^3; //紅燈
sbit P26=P2^6;
sbit P27=P2^7;
sbit key1=P3^2; //倒計(jì)時(shí)開關(guān)
sbit key2=P3^0; //1
sbit key3=P3^1; //2
sbit key4=P3^5; //復(fù)位開關(guān)
void daojishi(void);
void yihao(void);
void erhao(void);
void fuwei(void);
void key_scan(void);
uchar n,k,flag;
void delay5ms()
{
uchar i,j;
for(i=10;i>0;i--)
for(j=248;j>0;j--);
}
void delay10ms()
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main()
{
n=60;
k=20;
P22=0;
P23=0;
P1=0xff;
TMOD=0x01; //T0用中斷定時(shí)1s,方式一
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x8f;
IT0=1;
IT1=1;
flag=0;
while(1)
{
if(key1==0)
delay10ms();
if(key1==0)
flag=1; //開始標(biāo)志
if(flag!=0)
{
key_scan();
switch(flag)
{
case 1:daojishi();break;
case 2:yihao();break;
case 3:erhao();break;
case 4:fuwei();break;
}
}
else
if(key4==0)
delay10ms();
if(key4==0)
flag=4; //復(fù)位標(biāo)志
}
}
void t_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
k--;
if(k==0)
{
k=20;
if(n>0) //增加一個(gè)判斷
{n--;}
else
/* n--;
if(n==0) */
{
TR0=0;
P23=1;
P0=0xff;
flag=0; //禁止除復(fù)位按鈕外其它按鈕 標(biāo)志
}
}
}
void key_scan()
{
if(key1==0)
{
delay10ms();
if(key1==0)
{ flag=1;
while(key1==1)
{
delay10ms();
flag=0;
}
}
}
if(key2==0)
{
delay10ms();
if(key2==0)
{
flag=2;
while(key2==1)
{
delay10ms();
flag=0;
}
}
}
if(key3==0)
{
delay10ms();
if(key3==0)
{
flag=3;
while(key3==1)
{
delay10ms();
flag=0;
}
}
}
if(key4==0)
{
delay10ms();
if(key4==0)
{
flag=4;
while(key4==1)
{
delay10ms();
flag=0;
}
}
}
}
void daojishi()
{
TR0=1;
P0=0xff;
P20=1;
P21=0;
if(n>=10)
P0=zixingma[n/10];
delay5ms();
P0=0xff;
P20=0;
P21=1;
P0=zixingma[n%10];
delay5ms();
}
void yihao()
{
P0=0xff;
P1=0xf9;
P22=1;
flag=0;//禁止除復(fù)位按鈕外其它按鈕 標(biāo)志
}
void erhao()
{
P0=0xff;
P1=0xa4;
P22=1;
flag=0 ;//禁止除復(fù)位按鈕外其它按鈕標(biāo)志
}
void fuwei()
{
TR0=0;
P2=0;
P0=0xff;
P1=0xff;
n=60;
} |
|