1、信号灯受一个起动开关控制,当起动开关接通时,信号系统开始工作,且先南北红灯亮,东西绿灯亮。当起动开关断开时,所有信号灯都熄灭。
2、南北红灯亮维持25S。在南北红灯亮的同时东西绿灯也亮,并维持20S。到20S时,东西绿灯闪烁,闪烁3S后熄灭。在东西绿灯熄灭时,东西黄灯亮,并维持2S。到2S时,东西黄灯熄,东西红灯亮。同时,南北红灯熄灭,南北绿灯亮。东西红灯亮维持30S。南北绿灯亮维持25S。然后闪烁3S,熄灭。同时南北黄灯亮,维持2S后熄灭,这时南北红灯亮,东西绿灯亮
3、要有倒计时数码显示。
我的邮箱 707379119@qq.com
我写这个没有倒计时显示,那个显示的部分就交给你自己完成吧。。。要学习的,不能老是靠别人啊!!
#include<reg52.h>
#define uchar unsigned char
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
sbit choice=P0^0;
sbit sel1=P3^6;
sbit sel2=P3^7;
sbit key1=P3^2;
sbit key2=P3^3;
sbit m_green=P2^0;
sbit s_green=P2^1;
sbit m_red=P2^2;
sbit s_red=P2^3;
sbit m_yellow=P2^4;
sbit s_yellow=P2^5;
unsigned char state,i,flag,num=20 ;
unsigned int j;
void display();
void main()
{
EA=1;
ET0=1;
EX0=1; //外部中断允许位
EX1=1;
IT0=0; //外部中断方式为电平
IT1=0;
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
while(1)
{
if(j==10)
{
j=0;
flag++;
if(flag==2) state=1;
if(flag==3) state=2;
if(flag==5) state=3;
if(flag==6) {flag=0; state=0;}
}
switch(state)
{
case 0:
P2=0xf6;
break;
case 1:
if(i%2==0){m_green=1; s_red=1;}
else { m_green=0; s_red=0 ;}
m_yellow=0;
s_yellow=0; break;
case 2:
P2=0xf9;
break;
case 3:
if(i%2==0){s_green=1; m_red=1;}
else { s_green=0; m_red=0 ;}
m_yellow=0;
s_yellow=0;
break;
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==20)
{
i=0;
j++;
}
}
void int0() interrupt 0
{
P2=0xf3;
}
void int1() interrupt 2
{
unsigned char i;
if(choice==0) i=0;
else i=1;
switch(i)
{
case 0 :
P2=0xf6;
break;
case 1:
P2=0xf3;
break;
default :
P2=0xf3;
break;
}
}