1、设计需求及目标
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统采用单片机AT80C51为中心器件来模拟十字路口交通灯的各种状态显示以及倒计时时间,系统实用性强、操作简单、扩展性强。
采用AT80C51芯片,具体设计要求:
①显示要求与实际十字路一致
②有倒计时
③用6位数码管显示:左2位表示左转弯,中间2位表示直行,右2位表示右转弯;2个数码管中其中1个表示灯(用H L U分别表示红、绿、黄),另一个数码管用于倒计时。
2、设计思路及方案
实现单方向交通控制,不会出现交通事故情况。具体要求:单方向,有左转,直行,右转。每个方向用两个数码管表示,一个用作红绿灯表示,另一个作为时间倒计时。硬件电路:
3、程序主函数
#include<reg52.h>
#define uInt unsigned int
#define uChar unsigned char
uChar a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uChar t1=15,t2=12,count1=0;
sbit WEIXUAN1 = P3^0;
sbit WEIXUAN2 = P3^1;
sbit WEIXUAN3 = P3^2;
sbit WEIXUAN4 = P3^3;
sbit UpRed = P3^4;
sbit UpYellow =P3^5;
sbit UpGreen =P3^6;
sbit DownRed = P3^7;
sbit DownYellow = P1^0;
sbit DownGreen = P1^1;
sbit LeftRed = P1^2;
sbit LeftYellow = P1^3;
sbit LeftGreen = P1^4;
sbit RightRed = P1^5;
sbit RightYellow = P1^6;
sbit RightGreen = P1^7;
void SMGDisplay()
{
P0=0x00;
P2=0x00;
WEIXUAN1=0;
WEIXUAN2=1;
WEIXUAN3=0;
WEIXUAN4=1;
P2=a[t1/10];
P0=a[t2/10];
WEIXUAN1=1;
WEIXUAN2=1;
WEIXUAN3=1;
WEIXUAN4=1;
P0=0x00;
P2=0x00;
WEIXUAN1=1;
WEIXUAN2=0;
WEIXUAN3=1;
WEIXUAN4=0;
P2=a[t1%10];
P0=a[t2%10];
WEIXUAN1=1;
WEIXUAN2=1;
WEIXUAN3=1;
WEIXUAN4=1;
}
void Time0_Init()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void LEDDisplay1()
{
UpGreen=1;
DownGreen=1;
LeftRed=1;
RightRed=1;
UpRed=0;
DownRed=0;
LeftGreen=0;
RightGreen=0;
}
void LEDDisplay2()
{
LeftGreen=1;
RightGreen=1;
LeftYellow=0;
RightYellow=0;
}
void LEDDisplay3()
{
UpRed=1;
DownRed=1;
LeftYellow=1;
RightYellow=1;
UpGreen=0;
DownGreen=0;
LeftRed=0;
RightRed=0;
}
void LEDDisplay4()
{
UpGreen=1;
DownGreen=1;
UpYellow=0;
DownYellow=0;
}
void main()
{
Time0_Init();
while(1)
{
SMGDisplay();
}
}
void Time0(void) interrupt 1
{
static uChar i=0;
static uChar j=0;
uChar k=0;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
count1++;
if(count1==100)
{
count1=0;
t1--;
t2--;
if((i%3==0)&&(j%3==0))
LEDDisplay1();
if(t1==-1)
{
i++;
if(i%3==1)
{
t1=12;
LEDDisplay3();
}
else if(i%3==2)
{
t1=2;
LEDDisplay4();
}
else
t1=15;
}
if(t2==-1)
{
j++;
if(j%3==1)
{
t2=2;
LEDDisplay2();
}
else if(j%3==2)
{
t2=15;
LEDDisplay3();
}
else
t2=12;
}
}
}
完整资料:
https://market.m.taobao.com/app/idleFish-F2e/widle-taobao-rax/page-detail?wh_weex=true&wx_navbar_transparent=true&id=614763379500&ut_sk=1.WUpxx7gpwUoDAMmnnrBIzAno_12431167_1585213694840.Copy.detail.614763379500.1828622527&forceFlush=1