交通信号灯模拟控制器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交通信号灯模拟控制器
讲授要点
一、课题内容
编写一程序实现城市“十字”路口正常情况下以及特殊情况和紧急情况下交通信号灯的模拟控制。
1、在十字路口东西南北各设置红、黄、绿三种信号灯,如图1所示。正常情况下,东西、南北方向轮流放行。当东西方向(A线)放行、南北方向(B线)禁行时,东西方向(A线)绿灯亮25秒,然后黄灯亮5秒,南北方向(B线)红灯亮30秒;当南北方向(B线)放行、东西方向(A 线)禁行时,南北方向(B线)绿灯亮25秒,然后黄灯亮5秒,东西方向(A线)红灯亮30秒。如此循环,实现交通灯定时控制。
2、有急救车优先通过功能。当有急救车到达时,路口的信号灯全部变红灯,以便急救车通过,急救车的通行时间为10秒,急救车过后,交通灯恢复先前状态。
3、交通灯在红、绿灯交替点亮中,用两个数码管显示点亮的灯还能持续的时间。
南
图1 交通灯布置示意图
二、编程指导
1、电路图
交通灯控制电路的核心元件采用单片机芯片AT89C51,其内部带有4KB的ROM,无须扩展存储器。
信号灯的控制由单片机的P1.0~P1.5控制,6只信号灯以共阴极方式连接,当P1口输出为高电平时,信号灯点亮,为实现上述控制要求,P1口共输出四种控制码,如表1所示。
表1:交通灯信号控制码
2、控制程序
(1)流程图
软件包括主程序、延时、显示子程序、中断服务程序,各程序流程图如图2所示。
主程序流程图
显示子程序流程图
中断服务程序
紧急情况
图2 程序流程图
三、参考程序
主程序:
ORG 2000H
MAIN : MOV DPTR ,#7F00H
MOV A ,#0BH ;PA 、PC 口均为输出
MOVX @DPTR ,A MAIN : SETB EA ;开中断
SETB EX0
MOV 50H,#1FH ;设置时间显示初值
MOV P1,#0CH ;A道放行,B道禁行
MOV R7,#19H ;延时秒数
MAIN1:LCALL DISP ;调1秒延时、及显示子程序
DJNZ R7,MAIN1
MOV P1,#0AH ;A道警告,B道禁行
MOV R7,#05H ;延时秒数
MAIN2:LCALL DISP
DJNZ R7,MAIN2
MOV 50H,#1FH ;设置时间显示初值
MOV P1,#21H ;A道禁行,B道放行
MOV R7,#19H ;延时秒数
MAIN3:LCALL DISP
DJNZ R7,MAIN3
MOV P1,#11H ;A道禁行,B道警告
MOV R7,#05H ;延时秒数
MAIN4:LCALL DISP
DJNZ R7,MAIN4
AJMP MAIN ;循环
延时、显示子程序:
ORG 2000H
DISP:MOV R6,#01H ;设置显示位寄存器初值(右边一位MOV TMOD,#01H ;定时器T0设置为定时方式的模式1
MOV R5,#0AH ;定时器操作循环10次
DEL1:MOV TH0,#3CH ;定时器100ms计数器的初始值
MOV TL0,#B0H
SETB TR0 ;启动定时器
DEL2:DEC 50H ;显示秒数减1
MOV A,50H
MOV B,#0AH
DIV B ;拆分秒数
ADD A,#2BH
MOVC A,@A+PC ;查表个位数的字形码
MOV R1,A ;个位数字形码送R1
MOV A,B
ADD A,#25H
MOVC A,@A+PC ;查表十位数的字形码
MOV R2,A ;十位数字形码送R2
MOV A,R6 ;位控码
MOV DRTP,#7F03H
MOVX @DPTR,A
MOV A,R1 ;送个位数显示
MOV DPTR,#7F01H
MOVX @DPTR,A
LCALL DELAY ;延时1ms
MOV A,R6
RL A ;位控左移
MOV R6,A
MOV DPTR,#7F03H
MOVX @DPTR,A
MOV A,R2 ;送十位数显示
MOV DPTR,#7F01H
MOVX @DPTR,A
LCALL DELAY ;延时1ms
JNB TF0,$ ;检测100ms定时是否到
CLR TF0
DJNZ R5,DEL1 ;100ms循环控制
RET ;返回
TABLE: DB C0H,F9H,A4H,B0H,
99H
DB 92H,82H,F8H,80H,
90H
DELAY:MOV R7,#02H ;延时1ms子程序
DEL3:MOV R6,#0F9H
DEL4:DJNZ R6,DEL2
DJNZ R7,DEL1
RET
END
中断服务程序:
ORG 0003H ;外部中断0入口地址
LJMP INTER0
ORG 2100H
INTER0:PUSH 50H ;保护现场
PUSH P1
MOV P1,#00H ;两车道禁止
MOV R7,#0AH ;延时10秒
INT0:LCALL DISP ;调显示
DJNZ R7,INT0
POP P1 ;恢复现场
POP 50H
RETI ;中断返回