求51单片机控制的交通灯电路图

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-01
基于51单片机控制交通灯的电路图与C语言程序

思路:
红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。四个方向各有一个红、黄、绿显示和两个数码管。
东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。
三、硬件电路设计
此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。
四、软件程序(C语言)
以下是整个设计的软件程序,直接可以编译成*。Hex代码。通过以上电路,下载到单片机,可直接运行。
//*****************************//
//程序名:十字路口交通灯控制
//编写人:黄庭剑
//初写时间:2009年1月2日
//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.
//CPU说明:AT89C51型单片机; 24MHZ晶体振荡器
//完成时间:2009年1月6日
//*****************************//
#include
#include
#include
sfr p0 = 0x80;
sfr p1 = 0x90;
sfr p2 = 0xA0;
sfr p3 = 0xb0; //这部分内容其实在“#include”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。其实两者是一样的。
sbit sw = p0^0;
sbit OE =P0^6;
sbit LE =P0^7; //74LS373锁存器控制端定义
char display[]={ 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99 }; //p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;
//函数声明 begin
void delay1(int count);
void delay_long(int number1,int number2);
void people_car_drive();
//函数声明end
//***********************//延时子程序
void delay1(int count)
{ int i;
for(i=count;i>0;i--)
{ ;}
}
void delay_long(int number1,int number2)
{
int a,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{ _nop_(); }
}

}
//**********************//延时子程序
void people_car_drive()
{
int p_1=2,i,j=9,p_2=6; //****************//行人通行时,延时20秒
p2=0x09; //南北红灯亮
p3=0x24; //东西绿灯亮

while(p_1-->0)
{ LE=1;
OE=0;
if(p_1==0){OE=1;} //当十位数减到0时,只显示个位数
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break; //减到3时退出循环,让其黄灯闪烁显示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}

}

//*******************************************************************************//

p2=0x12; //南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
//*****************以下是车辆通行时延时60秒//

p2=0x24; //南北绿灯亮
p3=0x09; //东西红灯亮

while(p_2-->0)
{ LE=1;
OE=0;
if(p_2==0){OE=1;} //当十位数减到0时,只显示个位数
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break; //减到2时退出循环
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}

p2=0x12; //南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1); //南北黄灯闪烁三秒完毕
}

void main() //主函数入口处
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00; //初始化各端口
{ while(1)
{
if(sw==0)
{ people_car_drive();}
else
{
p2=0x00;
p3=0x00; //关闭所有交通灯
}
}

}
}
详情访问:http://hi.baidu.com/hjiannew/

注::::::::系统晶振是 11.0592 MHz
ORG 0000H
LJMP START
ORG 0003H ;INT 0 中断入口地址
LJMP INT0
ORG 0040H
START:
MOV SP,#60H
SETB EX0 ;INT 0 中断有效
SETB IT0
SETB EA
LCALL STATUS0 ;初始状态(都是红灯)
CIRCLE: LCALL STATUS1 ;南北绿灯,东西红灯
LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯
LCALL STATUS3 ;南北红灯,东西绿灯
LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯
LJMP CIRCLE
INT0:
PUSH PSW ;保护现场
PUSH 2
PUSH ACC
MOV DPTR,#8300H
MOV A,#0FH ;南北,东西都亮红灯
MOVX @DPTR,A
MOV R2,#100 ;延时10秒
LCALL DELAY
POP ACC ;恢复现场
MOVX @DPTR,A
POP 2
POP PSW
RETI
STATUS0: ;南北红灯,东西红灯
MOV DPTR,#8300H
MOV A,#0FH
MOVX @DPTR,A
MOV R2,#10 ;延时1秒
LCALL DELAY
RET
STATUS1: ;南北绿灯,东西红灯
MOV DPTR,#8300H
MOV A,#96H ;南北绿灯,东西红灯
MOVX @DPTR,A
MOV R2,#200 ;延时20秒
LCALL DELAY
RET
STATUS2: ;南北绿灯闪转黄灯,东西红灯
MOV DPTR,#8300H
MOV R3,#03H ;绿灯闪3次
FLASH: MOV A,#9FH
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
MOV A,#96H
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
DJNZ R3,FLASH
MOV A,#06H ;南北黄灯,东西红灯
MOVX @DPTR,A
MOV R2,#10 ;延时1秒
LCALL DELAY
RET
STATUS3: ;南北红灯,东西绿灯
MOV DPTR,#8300H
MOV A,#69H
MOVX @DPTR,A
MOV R2,#200 ;延时20秒
LCALL DELAY
RET
STATUS4: ;南北红灯,东西绿灯闪转黄灯
MOV DPTR,#8300H
MOV R3,#03H ;绿灯闪3次
FLASH1: MOV A,#6FH
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
MOV A,#69H
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
DJNZ R3,FLASH1
MOV A,#09H ;南北红灯,东西黄灯
MOVX @DPTR,A
MOV R2,#10 ;延时1秒
LCALL DELAY
NOP
RET
DELAY: ;延时子程序
PUSH 2
PUSH 1
PUSH 0
DELAY1: MOV 1,#00H
DELAY2: MOV 0,#0B2H
DJNZ 0,$
DJNZ 1,DELAY2 ;延时 100 mS
DJNZ 2,DELAY1
POP 0
POP 1
POP 2
RET
END

一、设计任务与要求

1.设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次通行时间都设为25秒;
2.要求黄灯先亮5秒,才能变换运行车道;
3.黄灯亮时,要求每秒钟闪亮一次 。

二、实验预习要求
1.复习数字系统设计基础。
2.复习多路数据选择器、二进制同步计数器的工作原理。
3.根据交通灯控制系统框图,画出完整的电路图。

三、设计原理与参考电路

1.分析系统的逻辑功能,画出其框图
交通灯控制系统的原理框图如图12、1所示。它主要由控制器、定时器、译码器和秒脉冲信号发生器等部分组成。秒脉冲发生器是该系统中定时器和控制器的标准时钟信号源,译码器输出两组信号灯的控制信号,经驱动电路后驱动信号灯工作,控制器是系统的主要部分,由它控制定时器和译码器的工作。图中:
TL: 表示甲车道或乙车道绿灯亮的时间间隔为25秒,即车辆正常通行的时间间隔。定时时间到,TL=1,否则,TL=0。
TY:表示黄灯亮的时间间隔为5秒。定时时间到,TY=1,否则,TY=0。
ST:表示定时器到了规定的时间后,由控制器发出状态转换信号。由它控制定时器开始下个工作状态的定时。

图12、1 交通灯控制系统的原理框图 2.画出交通灯控制器的ASM(Algorithmic State Machine,算法状态机)

(1)图甲车道绿灯亮,乙车道红灯亮。表示甲车道上的车辆允许通行,乙车道禁止通行。绿灯亮足规定的时间隔TL时,控制器发出状态信号ST,转到下一工作状态。
(2)甲车道黄灯亮,乙车道红灯亮。表示甲车道上未过停车线的车辆停止通行,已过停车线的车辆继续通行,乙车道禁止通行。黄灯亮足规定时间间隔TY时,控制器发出状态转换信号ST,转到下一工作状态。
(3)甲车道红灯亮,乙车道黄灯亮。表示甲车道禁止通行,乙车道上的车辆允许通行绿灯亮足规定的时间间隔TL时,控制器发出状态转换信号ST,转到下一工作状态。
(4)甲车道红灯亮,乙车道黄灯亮。表示甲车道禁止通行,乙车道上位过县停车线的车辆停止通行,已过停车线的车辆停止通行,已过停车线的车辆继续通行。黄灯亮足规定的时间间隔TY时,控制器发出状态转换信号ST,系统又转换到第(1)种工作状态。
交通灯以上4种工作状态的转换是由控制器器进行控制的。设控制器的四种状态编码为00、01、11、10,并分别用S0、S1、S3、S2表示,则控制器的工作状态及功能如表12、1所示,控制器应送出甲、乙车道红、黄、绿灯的控制信号。为简便起见,把灯的代号和灯的驱动信号合二为一,并作如下规定:
表12、1 控制器工作状态及功能
控制状态 信号灯状态 车道运行状态
S0(00) 甲绿,乙红 甲车道通行,乙车道禁止通行
S1(01) 甲黄,乙红 甲车道缓行,乙车道禁止通行
S3(11) 甲红,乙绿 甲车道禁止通行,甲车道通行
S2(10) 甲红,乙黄 甲车道禁止通行,甲车道缓行
AG=1:甲车道绿灯亮;
BG=1:乙车道绿灯亮;
AY=1:甲车道黄灯亮;
BY=1:乙车道黄灯亮;
AR=1:甲车道红灯亮;
BY=1:乙车道红灯亮;
由此得到交通灯的ASM图,如 图12、2所示。设控制器的初始状态为S0(用状态框表示S0),当S0的持续时间小于25秒时,TL=0(用判断框表示TL),控制器保持S0不变。只有当S0的持续时间等于25秒时,TL=1,控制器发出状态转换信号ST(用条件输出框表示ST),并转换到下一个工作状态。依此类推可以弄懂ASM图所表达的含义。

3.单元电路的设计
(1)定时器
定时器由与系统秒脉冲(由时钟脉冲产生器提供)同步的计数器构成,要求计数器在状态信号ST作用下,首先清零,然后在时钟脉冲上升沿作用下,计数器从零开始进行增1计数,向控制器提供模5的定时信号TY和模25的定时信号TL。
计数器选用集成电路74LS163进行设计较简便。74LS163是4位二进制同步计数器,它具有同步清零、同步置数的功能。74LS163的外引线排列图和时序波形图如图12、3所示,其功能表如表12、2所示。图中, 是低电平有效的同步清零输入端, 是低电平有效才同步并行置数控制端,CTp、CTT是计 图12、2 交通灯的ASM图数控制端,CO是进位输出端,D0~D3是并行数据输入端,Q0~Q 3是数据输出端。由两片74LS163级联组成的定时器电路如图12、4所示。电路的工作原理请自行分析。

(a)

图12、3 74LS163的外引线排列图和时序波形图

(2)控制器
控制器是交通管理的核心,它应该能够按照交通管理规则控制信号灯工作状态的转换。从ASM图可以列出控制器的状态转换表,如表12、3所示。选用两个D触发器FF1、FFO做为时序寄存器产生 4种状态,控制器状态转换的条件为TL和TY,当控制器处于Q1n+1Q0n+1= 00状态时,如果TL= 0,则控制器保持在00状态;如果,则控制器转换到Q1n+1Q0n+1= 01状态。这两种情况与条件TY无关,所以用无关项"X"表示。其余情况依次类推,同时表中还列出了状态转换信号ST。

图12、4 定时器电路图

表12、2 74LS163功能表
|

表12、3 控制器状态转换表

根据表12、3、可以推出状态方程和转换信号方程,其方法是:将Q1n+1、Q0n+1和 ST为1的项所对应的输人或状态转换条件变量相与,其中"1"用原变量表示,"0"用反变量表示,然后将各与项相或,即可得到下面的方程:

根据以上方程,选用数据选择器 74LS153来实现每个D触发器的输入函数,将触发器的现态值( )加到74LS153的数据选择输入端作为控制信号.即可实现控制器的功能。控制器的逻辑图如图12、5所示。图中R、C构成上电复位电路 。

图 12、5控制器逻辑图

(3)译码器
译码器的主要任务是将控制器的输出 Q1、 Q0的4种工作状态,翻译成甲、乙车道上6个信号灯的工作状态。控制器的状态编码与信号灯控制信号之间的关系如表 12、4所示。实现上述关系的译码电路请读者自行设计。

四、实验仪器设备
1. 数字电路实验箱
2. 集成电路74LS74 1片,74LS10 1片,74LS00 2片,74LS153 2片,74LS163 2片,NE555 1片
3. 电阻 51KΩ 1只,200Ω 6只
4. 电容 10Uf 1只
5. 其它 发光二极管 6只

五、实验内容及方法

表12、4控制器状态编码与信号灯关系表

状态 AG AY AR BG BY BR
00 1 0 0 0 0 1
01 0 1 0 0 0 1
10 0 0 1 1 0 0
11 0 0 1 0 1 0

1.设计、组装译码器电路,其输出接甲、乙车道上的6只信号灯(实验时用发光二极管代替),验证电路的逻辑功能。
2.设计、组装秒脉冲产生电路。
3.组装、调试定时电路。当 CP信号为 1Hz正方波时,画出CP、 Q0、 Q1、 Q2、Q3、Q4、TL.、TY的波形,并注意它们之间一的时序关系。

4.组装、调试控制器电路。
5.完成交通灯控制电路的联调,并测试其功能。

这个很常见了,我有很多呢。

GEWEI
EQU
21H
SHIWEI
EQU
23H
SCANLED
EQU
25H
SCANMODE
EQU
26H
RED
EQU
28H
GREEN
EQU
29H
YELLOW
EQU
32H
NUMTIM
EQU
33H
LED
EQU
34H
ORG
000H
JMP
START
ORG
0BH
JMP
TIMER0
ORG
100H
START:MOV
SP,#50H
MOV
R0,#20H
MOV
R5,#20
CLR0:MOV
@R0,#00H
INC
R0
DJNZ
R5,CLR0
MOV
TMOD,#01H
MOV
TH0,#HIGH(65536-5000)
MOV
TL0,#LOW(65536-5000)
SETB
TR0
MOV
IE,#10000010B
MOV
P0,#0FFH
MOV
P1,#0FFH
MOV
P2,#0FFH
MOV
P3,#0FFH
MOV
R3,#10
MOV
R2,#3
MOV
R1,#10
MOV
R7,#200
MOV
RED,#10
MOV
YELLOW,#3
MOV
GREEN,#10
MOV
NUMTIM,#10
MOV
LED,#0FFH
AJMP
$
;=======================
TIMER0:PUSH
ACC
PUSH
PSW
MOV
TH0,#HIGH(65536-5000)
MOV
TL0,#LOW(65536-5000)
DJNZ
R7,RET0
MOV
R7,#200
MOV
A,SCANMODE
MOV
B,#4
DIV
AB
MOV
A,B
RL
A
MOV
DPTR,#TAB_SCAN
JMP
@A+DPTR
TAB_SCAN:
AJMP
RED_LIGHT
AJMP
YEL_LIGHT
AJMP
GRE_LIGHT
AJMP
YEL_LIGHT
RET0:
MOV
A,NUMTIM
LCALL
BIN_BCD
MOV
SHIWEI,A
MOV
GEWEI,B
INC
SCANLED
MOV
A,SCANLED
MOV
B,#4
DIV
AB
MOV
A,B
RL
A
MOV
DPTR,#TAB_SCAN0
JMP
@A+DPTR
TAB_SCAN0:AJMP
SCAN_L1
AJMP
SCAN_L2
SCAN_L1:
MOV
P2,#11110111B
MOV
A,SHIWEI
JMP
END_SCAN
SCAN_L2:
MOV
P2,#11111011B
MOV
A,GEWEI
JMP
END_SCAN
END_SCAN:MOV
DPTR,#TABLE
MOVC
A,@A+DPTR
MOV
P0,A
MOV
A,LED
MOV
P1,A
POP
PSW

  • 求51单片机控制的交通灯电路图
    答:(4)甲车道红灯亮,乙车道黄灯亮。表示甲车道禁止通行,乙车道上位过县停车线的车辆停止通行,已过停车线的车辆停止通行,已过停车线的车辆继续通行。黄灯亮足规定的时间间隔TY时,控制器发出状态转换信号ST,系统又转换到第(1)种工作状态。交通灯以上4种工作状态的转换是由控制器器进行控制的。设...
  • 基于51单片机控制交通灯的电路图与C语言程序
    答:红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。四个方向各有一个红、黄、绿显示和两个数码管。东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。三、硬件电路设计 此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管...
  • 用51单片机制作红绿灯,要求按键能控制整个电路的启动和停止,用汇编语言...
    答:交通路口红绿灯自动控制器电路图 如图所示为交通路口红绿灯自动控制电路。该控制器主要由四块555(IC2~IC5)和一些阻容元件组成的四级单稳态延时电路首尾相连而成。输入的8V电压经78M05稳压后为555提供VDD=+5V的电源电压。 当刚接通电源时,触发脉冲经IC1(CD4011)门电路和R1、C1延时,再经C2、R22微...
  • 求救单片机控制交通灯的原理图
    答:define uchar unsigned char define ON 0 //0的时候灯亮 define OFF 1 //1的时候灯亮 //管脚定义 //南北道 黄灯亮3秒 红灯亮 30秒 黄灯3秒 绿灯38秒 //东西道 黄灯亮3秒 绿灯亮 28秒 黄灯3秒 红灯40秒 sbit PortDX_Yellow = P1^0; //东西方向黄灯 sbit PortDX_Red = P1^1; ...
  • c51单片机c语言交通灯的程序
    答:程序如下:include <reg51.h> define uchar unsigned char define uint unsigned int uchar data buf[4];uchar data sec_dx=20;//东西数默认 uchar data sec_nb=30;//南北默认值 uchar data set_timedx=20;uchar data set_timenb=30;int n;uchar data b;//定时器中断次数 sbit k1=P1^...
  • 跪求51单片机交通灯编程 请帮下谢谢
    答://南北红灯sbit dx_red=P2^3;//东西红灯sbit dx_lv=P2^4;//东西绿灯sbit nb_lv=P2^5;//南北绿灯sbit dx_h=P2^6;//东西黄灯sbit nb_h=P2^7; //南北黄灯/*sbit nb_red=P0^0;sbit dx_red=P0^7;sbit dx_lv=P0^6;sbit nb_lv=P0^1;sbit dx_h=P0^5;sbit nb_...
  • 基于51单片机的交通灯控制设计
    答:《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例 5 上海师范大学信息与机电工程学院—倪继锋 //延时 void DelayMS(uint x){ uchar i;while(x--) for(i=0;i<120;i++);} //交通灯切换 void Traffic_Light(){ switch(Operation_Type){ case 1: //东西向绿灯与南北向红灯亮 ...
  • 求大神解答,用51单片机汇编语言实现一个红绿灯的程序,不是一个路口的...
    答:;某一方向道路拥挤时,可以人工控制调节东西南北方向通行时间。;紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。;工作寄存器及存储单元分配 ;1.工作寄存器 ;R2设置为定时器定时中断次数,R6、R7用于延时程序中的寄存器 ;2.片内存储单元 ;30H、31H作为两组数码管显示数据存储单元;32H、33H作为...
  • 用单片机模拟控制控制交通信号灯。 题目如下; 只要做出来,分不是问题...
    答:参考《51单片机C语言创新教程》温子祺等著。源码转自:《51单片机C语言创新教程》。/*实验名称:交通灯实验 描 述:交通灯实验要求红灯亮15秒,绿灯亮10秒,黄灯亮5秒,当红灯切换为绿灯或者绿灯切换为红灯,要实现灯闪烁。红灯、绿灯、黄灯的点亮持续时间可以通过串口来修改,并在下一个循环中更新...
  • 51单片机交通灯设计,求程序和Proteus仿真图,急需请大神们帮帮忙啊_百...
    答:已按要求完成,两个中断按钮。望采纳。