求单片机交通灯控制系统设计的程序(最后有中文解析)
发布网友
发布时间:2022-09-25 02:32
我来回答
共5个回答
热心网友
时间:2023-09-15 03:48
要求:
1、一路延时60S,
一路延时40S
(演示时为节省时间,一路延时15S,一路延时10S>>
两路时间分别用不同的数码管显示;
--相同的,即可。
--比如:
--东西绿灯、南北红灯,两个方向的数字显示,都是60s倒计时。
--东西红灯、南北绿灯,两个方向的数字显示,都是40s倒计时。
--两路时间虽然不同,数码管显示应该是相同的,完全可以用一组数码管显示。
2.紧急通行控制,如某一方向现为红灯,通过按键强行切换为绿灯,而另一路改为红灯,延时若干秒(10S)后,恢复原状态(红灯)继续倒数
--不应恢复原状态。
--比如:
--东西绿灯、南北红灯,两个方向的数字显示,都是60s倒计时。
--在 59s 时,即仅仅剩下 1s 时,被强制转换了红绿灯。
--那么 10s 后,再恢复原状态 ?
--原状态,仅仅有 1s,还恢复它干什么 ?
--这时间,可能,都不够汽车起步用的。
--恢复原来的半截状态,显然不合理。
热心网友
时间:2023-09-15 03:48
要求:
1、一路延时60S,
一路延时40S
(演示时为节省时间,一路延时15S,一路延时10S>>
两路时间分别用不同的数码管显示;
--相同的,即可。
--比如:
--东西绿灯、南北红灯,两个方向的数字显示,都是60s倒计时。
--东西红灯、南北绿灯,两个方向的数字显示,都是40s倒计时。
--两路时间虽然不同,数码管显示应该是相同的,完全可以用一组数码管显示。
2.紧急通行控制,如某一方向现为红灯,通过按键强行切换为绿灯,而另一路改为红灯,延时若干秒(10S)后,恢复原状态(红灯)继续倒数
--不应恢复原状态。
--比如:
--东西绿灯、南北红灯,两个方向的数字显示,都是60s倒计时。
--在 59s 时,即仅仅剩下 1s 时,被强制转换了红绿灯。
--那么 10s 后,再恢复原状态 ?
--原状态,仅仅有 1s,还恢复它干什么 ?
--这时间,可能,都不够汽车起步用的。
--恢复原来的半截状态,显然不合理。
热心网友
时间:2023-09-15 03:49
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit EW_led_green =P1^0;
sbit EW_led_yellow =P1^1;
sbit EW_led_red =P1^2;
sbit NS_led_green =P1^3;
sbit NS_led_yellow =P1^4;
sbit NS_led_red =P1^5;
sbit wela1 =P0^7;
sbit wela2 =P0^6;
sbit wela3 =P0^5;
sbit wela4 =P0^4;
uchar count=0;
uchar count1=0;
uchar Y;
uchar num;
uchar num2=0;
uchar r=15;
uchar l=10;
uchar a=4;
uchar flag=0;
uchar temp=0;
uchar times;
uchar timet;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delayms(uint z)//毫秒延时
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TMOD =0x11;//定时器0,1方式1
TH0 =(65536-45872)/256; //初值50ms
TL0 =(65536-45872)%256;
TH1 =(65536-45872)/256; //初值50ms
TL1 =(65536-45872)%256;
EA =1;
ET0 =1;
ET1 =1;
EX0 =1;//外部中断0
IT0 =1;//外部中断0下降沿触发
TR0 =0;
TR1 =0;
}
void EW_display(uchar x)//东西数码管显示函数
{
uchar s,g;
s=x/10;
g=x%10;
wela3=0;
wela4=1;
wela1=1;
wela2=1;
P2=table[s];
delayms(5);
wela4=0;
wela3=1;
wela1=1;
wela2=1;
P2=table[g];
delayms(5);
}
void NS_display(uchar x)//南北数码管显示函数
{
uchar s,g;
s=x/10;
g=x%10;
wela1=0;
wela2=1;
wela3=1;
wela4=1;
P2=table[s];
delayms(5);
wela2=0;
wela1=1;
wela3=1;
wela4=1;
P2=table[g];
delayms(5);
}
void led_off()
{
NS_led_red =1;
NS_led_yellow =1;
NS_led_green =1;
EW_led_red =1;
EW_led_yellow =1;
EW_led_green =1;
}
void led_on()
{
NS_led_red =0;
NS_led_yellow =0;
NS_led_green =0;
EW_led_red =0;
EW_led_yellow =0;
EW_led_green =0;
}
void led_sw()
{
//while(num2)
//{
num=r;
delayms(10);
while(num)
{
//东西方外部中断处理函数
while(temp)
{
if(temp==1)
{
TR0 =0;
TR1 =0;
times =num;
delayms(5);
timet =Y;
num =10;
temp =2;
}
led_off();
NS_led_green =0;
EW_led_red =0;
TR0=1;
NS_display(num);
EW_display(num);
if(num==0)
{
TR0=0;
num=times;
delayms(5);
temp=0;
}
}
//东西方交通灯处理函数
Y=a;
flag=0;
TR0=1;
NS_led_yellow =1;
NS_led_green =1;
EW_led_red =1;
EW_led_yellow =1;
EW_led_green=0;
NS_led_red=0;
EW_display(num-Y);
NS_display(num);
if((num-Y)==0)
{
TR1=1;
while(Y)
{
//东西方外部中断处理函数
while(temp)
{
if(temp==1)
{
TR0 =0;
TR1 =0;
times =num;
delayms(5);
timet =Y;
num =10;
temp =2;
}
led_off();
NS_led_green =0;
EW_led_red =0;
TR0=1;
NS_display(num);
EW_display(num);
if(num==0)
{
TR0=0;
led_off();
NS_led_red=0;
Y=timet;
TR1=1;
temp=0;
}
}
//东西方交通灯处理函数
EW_led_green=1;
EW_display(Y);
NS_display(Y);
}
}
}
if(num==0)
num=l;
delayms(10);
while(num)
{
//南北方外部中断处理函数
while(temp)
{
if(temp==1)
{
TR0 =0;
TR1 =0;
times =num;
delayms(5);
timet =Y;
num =10;
temp =2;
}
led_off();
NS_led_red =0;
EW_led_green =0;
TR0=1;
NS_display(num);
EW_display(num);
if(num==0)
{
TR0=0;
num=times;
delayms(5);
temp=0;
}
}
//南北方交通灯处理函数
Y=a;
flag=1;
TR0=1;
NS_led_yellow =1;
NS_led_red =1;
EW_led_yellow =1;
EW_led_green =1;
EW_led_red=0;
NS_led_green=0;
EW_display(num);
NS_display(num-Y);
if((num-Y)==0)
{
TR1=1;
while(Y)
{
//南北方外部中断处理函数
while(temp)
{
if(temp==1)
{
TR0 =0;
TR1 =0;
times =num;
delayms(5);
timet =Y;
num =10;
temp =2;
}
led_off();
NS_led_red =0;
EW_led_green =0;
TR0=1;
NS_display(num);
EW_display(num);
if(num==0)
{
TR0=0;
led_off();
EW_led_red=0;
Y=timet;
TR1=1;
temp=0;
}
}
//南北方交通灯处理函数
NS_led_green=1;
EW_display(Y);
NS_display(Y);
}
}
}
//}
}
热心网友
时间:2023-09-15 03:49
我这个是用FPGA做的,里面有注解你可以参考一下
热心网友
时间:2023-09-15 03:49
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit EW_led_green =P1^0;
sbit EW_led_yellow =P1^1;
sbit EW_led_red =P1^2;
sbit NS_led_green =P1^3;
sbit NS_led_yellow =P1^4;
sbit NS_led_red =P1^5;
sbit wela1 =P0^7;
sbit wela2 =P0^6;
sbit wela3 =P0^5;
sbit wela4 =P0^4;
uchar count=0;
uchar count1=0;
uchar Y;
uchar num;
uchar num2=0;
uchar r=15;
uchar l=10;
uchar a=4;
uchar flag=0;
uchar temp=0;
uchar times;
uchar timet;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delayms(uint z)//毫秒延时
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TMOD =0x11;//定时器0,1方式1
TH0 =(65536-45872)/256; //初值50ms
TL0 =(65536-45872)%256;
TH1 =(65536-45872)/256; //初值50ms
TL1 =(65536-45872)%256;
EA =1;
ET0 =1;
ET1 =1;
EX0 =1;//外部中断0
IT0 =1;//外部中断0下降沿触发
TR0 =0;
TR1 =0;
}
void EW_display(uchar x)//东西数码管显示函数
{
uchar s,g;
s=x/10;
g=x%10;
wela3=0;
wela4=1;
wela1=1;
wela2=1;
P2=table[s];
delayms(5);
wela4=0;
wela3=1;
wela1=1;
wela2=1;
P2=table[g];
delayms(5);
}
void NS_display(uchar x)//南北数码管显示函数
{
uchar s,g;
s=x/10;
g=x%10;
wela1=0;
wela2=1;
wela3=1;
wela4=1;
P2=table[s];
delayms(5);
wela2=0;
wela1=1;
wela3=1;
wela4=1;
P2=table[g];
delayms(5);
}
void led_off()
{
NS_led_red =1;
NS_led_yellow =1;
NS_led_green =1;
EW_led_red =1;
EW_led_yellow =1;
EW_led_green =1;
}
void led_on()
{
NS_led_red =0;
NS_led_yellow =0;
NS_led_green =0;
EW_led_red =0;
EW_led_yellow =0;
EW_led_green =0;
}
void led_sw()
{
//while(num2)
//{
num=r;
delayms(10);
while(num)
{
//东西方外部中断处理函数
while(temp)
{
if(temp==1)
{
TR0 =0;
TR1 =0;
times =num;
delayms(5);
timet =Y;
num =10;
temp =2;
}
led_off();
NS_led_green =0;
EW_led_red =0;
TR0=1;
NS_display(num);
EW_display(num);
if(num==0)
{
TR0=0;
num=times;
delayms(5);
temp=0;
}
}
//东西方交通灯处理函数
Y=a;
flag=0;
TR0=1;
NS_led_yellow =1;
NS_led_green =1;
EW_led_red =1;
EW_led_yellow =1;
EW_led_green=0;
NS_led_red=0;
EW_display(num-Y);
NS_display(num);
if((num-Y)==0)
{
TR1=1;
while(Y)
{
//东西方外部中断处理函数
while(temp)
{
if(temp==1)
{
TR0 =0;
TR1 =0;
times =num;
delayms(5);
timet =Y;
num =10;
temp =2;
}
led_off();
NS_led_green =0;
EW_led_red =0;
TR0=1;
NS_display(num);
EW_display(num);
if(num==0)
{
TR0=0;
led_off();
NS_led_red=0;
Y=timet;
TR1=1;
temp=0;
}
}
//东西方交通灯处理函数
EW_led_green=1;
EW_display(Y);
NS_display(Y);
}
}
}
if(num==0)
num=l;
delayms(10);
while(num)
{
//南北方外部中断处理函数
while(temp)
{
if(temp==1)
{
TR0 =0;
TR1 =0;
times =num;
delayms(5);
timet =Y;
num =10;
temp =2;
}
led_off();
NS_led_red =0;
EW_led_green =0;
TR0=1;
NS_display(num);
EW_display(num);
if(num==0)
{
TR0=0;
num=times;
delayms(5);
temp=0;
}
}
//南北方交通灯处理函数
Y=a;
flag=1;
TR0=1;
NS_led_yellow =1;
NS_led_red =1;
EW_led_yellow =1;
EW_led_green =1;
EW_led_red=0;
NS_led_green=0;
EW_display(num);
NS_display(num-Y);
if((num-Y)==0)
{
TR1=1;
while(Y)
{
//南北方外部中断处理函数
while(temp)
{
if(temp==1)
{
TR0 =0;
TR1 =0;
times =num;
delayms(5);
timet =Y;
num =10;
temp =2;
}
led_off();
NS_led_red =0;
EW_led_green =0;
TR0=1;
NS_display(num);
EW_display(num);
if(num==0)
{
TR0=0;
led_off();
EW_led_red=0;
Y=timet;
TR1=1;
temp=0;
}
}
//南北方交通灯处理函数
NS_led_green=1;
EW_display(Y);
NS_display(Y);
}
}
}
//}
}
热心网友
时间:2023-09-15 03:50
可以看看仿真实例,试试。
热心网友
时间:2023-09-15 03:49
我这个是用FPGA做的,里面有注解你可以参考一下
热心网友
时间:2023-09-15 03:51
http://wenku.baidu.com/view/a8e3e18e8762caaedd33d471.html
看看这个,给分吧
热心网友
时间:2023-09-15 03:50
可以看看仿真实例,试试。
热心网友
时间:2023-09-15 03:51
http://wenku.baidu.com/view/a8e3e18e8762caaedd33d471.html
看看这个,给分吧