交通灯控制
一、课程设计的内容
在实验平台上选择两组指示灯,每组分为红,黄,绿代表交通灯。
要求:
1. 模拟十字交通路口的实际情况,设计十字路口交通灯自动
变换系统。
2. 设计十字路口交通灯手动变换系统,并这两套系统可切换
使用。
3. 在实现以上内容的基础上增加允许急救车优先通过的要
求。
有急救车到达时,两方向交通信号为全红,以便让急救车通
过。
二.设计思路及电路图
在单片机实验箱上P0口和P2口不能做I/O接口。
但是为了实现交通灯的状态变化,我要用到I/O接口来对按键进行查询
和显示发光二极管的状态,P1口控制四段数码管的显示。
所以我
扩展I/O接口,用74LS377的输入端接P0口,其输出线1Q~8Q
接8个发光二极管,WR作为锁存控制接74LS377的时钟端,扩
展片选信号CS1接在74LS377的使能端G。
我用查询方式来查询
按键来转换手动,自动,救护车到来的状态的变化,则把四个按
键K4~K7与P3.2~P3.5相接,当按键置高电平时,程序就会转换
到相应状态执行相应的模块状态。
在自动状态时,开始4个路口的红灯全亮(东西方向为之
路,南北方向为主路)之后,南北路口的绿灯亮,东西口的红灯亮,延时显示并查询开关状态是否发生变化,当两个数码管(一个代表东西方向,一个代表南北方向)从0~3显示,当显示3后交通灯显示下一个状态,一直循环重复过程,直到查询到有按键发生变化。
当P3.3高电平时,自动转换为手动,(同理P3.3低电平时手动转换为自动。
)此时拨动按键使P3.2或P3.5置于高点位,就会转到主路或支路相应状态的交通灯显示,数码管显示0。
P3.4控制救护车来时的状态,当其高电位两个红灯全亮并蜂鸣器响起。
实验电路图:
显示电路:
三、程序:
主程序流程图:
输出口初始化化
送灯的状态到锁存器,灯自动循环亮
调用延时显示 并查询按键状态
手动状态
JB P3.3
JNB P3.3
开始
JB P3.4
P3.4 jnb
之前状态
JBP3.5 JB P3.2
东西绿灯亮 南北红灯亮
南北绿灯亮东西红灯亮
救护车 东西南北红灯亮并警报
显示子程序流程图:DISPL Y子程序流程图:
ORG 4000H
START: MOV DPTR,#0F100H
MOV A,#11011110B ;东西南北红灯亮
MOVX @DPTR,A
LCALL DL1S ; 显示时间,并查询按键状态 LCALL XIANSHI
LOP1: MOV DPTR,#0F100H
MOV A,#11011011B ;南北绿灯亮,东西红灯亮
MOVX @DPTR,A
LCALL DL1S ;显示时间,并查询按键状态
LCALL XIANSHI
MOV R0,#2
LOP2: MOV DPTR,#0F100H
MOV A, #11011001B ; 南北黄灯闪烁2次
MOVX @DPTR,A
LCALL DL1S ;显示时间,并查询按键状态 LCALL XIANSHI
LOPD: MOV DPTR,#0F100H
MOV A,#11011011B
MOVX @DPTR,A
LCALL DL1S
LCALL XIANSHI
DJNZ R0,LOP2
LOP3: MOV DPTR,#0F100H
MOV A,#01111110B ;东西绿灯亮,南北红灯亮
MOVX @DPTR,A
LCALL DL1S ;显示时间,并查询按键状态
LCALL XIANSHI
MOV R0,#2
LOP4: MOV DPTR,#0F100H
MOV A,#00111110B ; 东西黄灯闪烁2次
MOVX @DPTR,A
LCALL DL1S
LCALL XIANSHI
LOPE: MOV DPTR,#0F100H
MOV A,#01111110B ;显示时间,并查询按键态 MOVX @DPTR,A
LCALL DL1S
LCALL XIANSHI
DJNZ R0,LOP4 ;R0不为0,转L0P4
AJMP START
PK:
MOV DPTR,#0F100H ;手动状态两个黄灯亮作为标志
MOV A,#10111101B
MOVX @DPTR,A
JNB P3.3,START ;P3.3低电平转自动
JB P3.2,ZHUL ;P3.2高电平转主路状态
JB P3.5,ZILU ;P3.2高电平转之路状态
JB P3.4,JHC ;P3.4高电平转救护车状态 CLR EA ;关救护车的蜂鸣器
LCALL XIANSHI1 ;不显示时间,显示0
AJMP PK
ZHUL:
MOV DPTR,#0F100H
MOV A,#11011011B ;南北绿灯亮,东西红灯亮
MOVX @DPTR,A
LCALL XIANSHI1 ;显示0
AJMP PK
ZILU: MOV DPTR,#0F100H
MOV A,#01111110B ;东西绿灯亮,南北红灯亮
MOVX @DPTR,A
LCALL XIANSHI1 ;显示0
AJMP PK
JHC: MOV TMOD,#01H
MOV TH0,#0FCH ;蜂鸣器响起
MOV TL0,#05BH
SETB TR0
SETB EA
CPL P1.7
MOV DPTR,#0F100H
MOV A, #11011110B ;东西,南北,红灯亮 MOVX @DPTR,A
LCALL XIANSHI1 ;显示0
;子程序
DL1S: JB P3.3,PK ;查询按键状态
JB P3.4,JHC
RET
;显示子程序
XIANSHI:MOV A,#0 ;显示0
MOV DPTR,#TB ;查表
ANL A,0FH
MOVC A,@A+DPTR
MOV R1,A
MOV P1,#11111111B
CALL DISPLY
LCALL DL1S1 ;调用延时 MOV A,#1 ;显示1 MOV DPTR,#TB
ANL A,0FH
MOVC A,@A+DPTR
MOV R1,A
MOV P1,#11111111B
CALL DISPLY
LCALL DL1S1
MOV A,#2 ;显示2
MOV DPTR,#TB
ANL A,0FH
MOVC A,@A+DPTR
MOV R1,A
MOV P1,#11111111B
CALL DISPLY
LCALL DL1S1
MOV A,#3 ;显示3 MOV DPTR,#TB
ANL A,0FH
MOVC A,@A+DPTR
MOV R1,A
MOV P1,#11111111B
CALL DISPLY
LCALL DL1S1
RET
XIANSHI1: MOV A,#0
MOV DPTR,#TB
ANL A,0FH ;显示0的子程序 MOVC A,@A+DPTR
MOV R1,A
MOV P1,#11111111B
CALL DISPLY
LCALL DL1S1
DISPLY:MOV R7,#8 ;
MOV A,R1
;MOV A,#8EH
T: RLC A ;串形输入
SETB P1.1 ;时钟置高
MOV P1.0,C ;数据送sda
CLR P1.1 ;时钟置低位
DJNZ R7,T
MOV P1,#10110111B ;1
RET
DL1S1: MOV R6,#4
DELAYY: MOV R5,#250
DELAYE: MOV R3,#250 ;延时子程序
DELAYF: DJNZ R3,DELAYF
DJNZ R5,DELAYE
DJNZ R6,DELAYY
RET
TB:DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6 H,0A1H,86H,8EH
END
1 / 1。