|
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit smg1 =P1^1;
sbit smg2 =P1^0; //定義共陽極數(shù)碼管引腳
sbit red2=P1^5;
sbit yellow2=P1^6;
sbit green2=P1^7; //東西路紅綠燈
sbit red1=P1^2;
sbit yellow1=P1^3;
sbit green1=P1^4; //南北路紅路燈
sbit k1=P3^2; //南北禁行
sbit k2=P3^3; //東西禁行
sbit k3=P3^4; //全部禁行
sbit k4=P3^5; //紅路燈時(shí)間減
sbit k5=P3^6; //紅路燈時(shí)間加
uchar code s7_table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽極數(shù)碼管鍵選
uint time=0;
uchar i;
void delay_ms(uchar z) // 延時(shí)
{
uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void display_time(uchar num) //顯示倒計(jì)時(shí)
{
smg1=0;
P2=s7_table[num/10];
delay_ms(2);
P2=0;
smg1=1;
smg2=0;
P2=s7_table[num%10];
delay_ms(2);
P2=0;
smg2=1;
}
void keypro()
{
if(k1 == 0) //nan bei ban
{
delay_ms(10);
if(k1 == 0)
{
red1=0;
yellow1=1;
green1=1;
red2=1;
yellow2=1;
green2=0;
}
while(!k1);
}
if(k2 ==0 ) // dong xi ban
{
delay_ms(10);
if(k2 == 0)
{
red1=1;
yellow1=1;
green1=0;
red2=0;
yellow2=1;
green2=1;
}
while(!k2);
}
if(k3==0) // all ban
{
delay_ms(10);
if(k3 == 0)
{
red1=0;
yellow1=1;
green1=1;
red2=0;
yellow2=1;
green2=1;
}
while(!k3);
}
if(k4==0) // --
{
delay_ms(10);
if(k4==0)
{
time=time+1;
}
while(!k4);
}
if(k5==0) // ++
{
delay_ms(10);
if(k5==0)
{
time=time-1;
}
while(!k5);
}
}
void main()
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
keypro();
if(time<60)
{
display_time(61-time);
red2=0;
green2=1;
yellow2=1;
red1=1;
green1=0;
yellow1=1;
}
else if(time>60&&time<64 )
{
display_time(63-time);
red1=1;
yellow1=0;
green1=1;
red2=1;
yellow2=0;
green2=1;
}
else if(time<84&&time>64)
{
display_time(84-time);
red2=1;
green2=0;
red1=0;
green1=1;
yellow2=1;
yellow1=1;
}
if(time==84)
time=0;
}
}
void_int0_isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==20)
{
i=0;
++time;
}
}
|
-
|