1、功能描述
观察十字路口红绿灯工作流程,设计交通灯。
1、初始时:南北向、东西向直行左转均为红灯
2、南北向直行:
①南北向直行绿灯亮,延时若干秒
②启动南北向左转数码管显示:倒计时6秒;同时南北向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后南北向直行绿灯灭,南北向直行黄灯亮,延时3秒
③南北向左转数码管倒计时显示结束,关闭;同时南北向直行黄灯灭,南北向直行红灯亮
3、南北向左转:
①南北向左转绿灯亮,延时若干秒
②启动东西向直行数码管显示:倒计时6秒;同时南北向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后南北向左转绿灯灭,南北向左转黄灯亮,延时3秒
③东西向直行数码管倒计时显示结束,关闭;同时南北向左转黄灯灭,南北向左转红灯亮
4、东西向直行:
①东西向直行绿灯亮,延时若干秒
②启动东西向左转数码管显示:倒计时6秒;同时东西向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后东西向直行绿灯灭,东西向直行黄灯亮,延时3秒
③东西向左转数码管倒计时显示结束,关闭;同时东西向直行黄灯灭,东西向直行红灯亮
5、东西向左转:
①东西向左转绿灯亮,延时若干秒
②启动南北向直行数码管显示:倒计时6秒;同时东西向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后东西向左转绿灯灭,东西向左转黄灯亮,延时3秒
③南北向直行数码管倒计时显示结束,关闭;同时东西向左转黄灯灭,东西向左转红灯亮
2、PROTEUS中设计的电路图
3、源代码
#include <reg51.h>
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delay(int t)
{int i,j;
for(i=0;i<=t;i++)
for(j=0;j<=110;j++);
}
sbit NB=P2^0;//南北
sbit DX=P2^1;//东西
int i;
/*南北向、东西向直行左转均为红灯*/
void state1()
{
NB=1;P1=0X99;NB=0;//南北直、左红灯亮
DX=1;P1=0X99;DX=0;//东西直、左红灯亮
delay(3000);
//NB=1;P1=0X88;NB=0;//南北直、左红灯灭
// DX=1;P1=0X88;DX=0;//东西直、左红灯灭
}
/*南北向直行(NB)*/
void state2(){
P0=0X00;
NB=1;P1=0X9C;NB=0;//南北直绿灯亮
delay(3000);
//南北向左转数码管显示:倒计时6秒
for(i=6;i>=4;i--) //南北向直行绿灯闪烁3下
{
NB=1;P1=0X1C;NB=0;//南北直绿灯亮
P0=table[i];
delay(500);
NB=1;P1=0X18;NB=0;//南北直绿灯灭
delay(500);
}
// NB=1;P1=0X0C;NB=0;//南北直绿灯亮
for(i=3;i>=1;i--)
{
NB=1;P1=0X1A;NB=0;//南北直黄灯亮
P0=table[i];
delay(1000);
}
//NB=1;P1=0X8A;NB=0;//南北直黄灯亮
//delay(3000);
NB=1;P1=0Xc9;NB=0;//南北直黄灯灭,左转数码管倒计时显示结束
}
/*南北向左转(NB)*/
void state3(){
NB=1;P1=0Xc9;NB=0;//南北左绿灯亮
delay(3000);
//南北向直行数码管显示:倒计时6秒
for(i=6;i>=4;i--) //南北向左转绿灯闪烁3下
{
DX=1;P1=0X91;DX=0;//东西直行数码管打开
NB=1;P1=0XC9;NB=0;//南北左转绿灯亮,直行红灯亮
P0=table[i];
delay(500);
NB=1;P1=0X89;NB=0;//南北左转绿灯灭
delay(500);
}
for(i=3;i>=1;i--)
{
NB=1;P1=0XA9;NB=0;//南北左转黄灯亮
P0=table[i];
delay(1000);
}
NB=1;P1=0X99;NB=0;
DX=1;P1=0X9c;DX=0;//东西直行数码管打开
}
/*东西向直行(NB)*/
void state4()
{
DX=1;P1=0X9c;DX=0;//东西北直绿灯亮,数码管关闭
delay(3000);
//东西向左转数码管显示:倒计时6秒
for(i=6;i>=4;i--) //东西向直行绿灯闪烁3下
{
DX=1;P1=0X1C;DX=0;//东西直绿灯亮
P0=table[i];
delay(500);
DX=1;P1=0X18;DX=0;//东西直绿灯灭
delay(500);
}
//DX=1;P1=0X0C;DX=0;//东西直绿灯亮
for(i=3;i>=1;i--)
{
DX=1;P1=0X1A;DX=0;//东西直黄灯亮
P0=table[i];
delay(1000);
}
DX=1;P1=0Xc9;DX=0;//东西直黄灯灭,左转数码管倒计时显示结束
}
/*东西向左转(NB)*/
void state5()
{
DX=1;P1=0Xc9;DX=0;//南北左绿灯亮
delay(3000);
//东西向直行数码管显示:倒计时6秒
for(i=6;i>=4;i--) //东西向左转绿灯闪烁3下
{
NB=1;P1=0X91;NB=0;//南北红灯,直行数码管打开
DX=1;P1=0XC9;DX=0;//东西左转绿灯亮
P0=table[i];
delay(500);
DX=1;P1=0X89;DX=0;//东西左转绿灯灭
delay(500);
}
for(i=3;i>=1;i--)
{
DX=1;P1=0XA9;DX=0;//东西左转黄灯亮
P0=table[i];
delay(1000);
}
NB=1;P1=0X1C;NB=0;
DX=1;P1=0X99;DX=0;
}
void main()
{
NB=1;P1=0X88;NB=0;
DX=1;P1=0X88;DX=0;
P0=0X00;
state1();
while(1){
state2();
state3();
state4();
state5();
}
}
4、实验效果
效果视频展示![](https://i-blog.csdnimg.cn/blog_migrate/fe5555a24cb4bc128d8d86dd28cb01ad.png)
问题咨询及项目源码请加群:
QQ群
名称:IT项目交流群
群号:245022761