交通灯控制系统
一、设计要求
1.东西方向车辆放行 60 秒钟。即东西方向的绿灯和南北方向的红灯同时点亮 1
分钟;
2.1 分钟后,东西方向的黄灯闪烁 5 秒钟,以警示车辆将切换红绿灯。此时南
北方向仍维持红灯点亮。在南北方向亮红灯期间,在 2 位数码管上显示计数值(每
秒减 1),从 60 减为 0。
3.东西方向的黄灯闪烁 5 秒钟后,转为南北方向放行 20 秒钟。即东西方向的红
灯和南北方向的绿灯同时点亮 20 秒钟;
4.南北方向放行 20 秒钟后,转为南北方向的黄灯闪烁 5 秒钟,以警示将切换红
绿灯。此时东西方向仍维持红灯点亮。
5.南北方向的黄灯闪烁 5 秒钟后,再转为东西方向车辆放行 1 分钟。如此循环
重复。
二、设计目的
⒈ 了解交通灯管理的基本工作原理
⒉ 熟悉 8259A 中断控制器的工作原理和应用编程
⒊ 熟悉 8255A 并行接口的各种工作方式和应用
⒋ 熟悉 8254 计数器/定时器的工作方式及应用编程,掌握利用软硬件相结合定
时的方法
⒌ 掌握多位 LED 显示问题的解决
三、程序设计流程图
主程序流程图,如下图所示。
装入计数初值
页码:1
四、总体设计和电路图
Ⅰ.芯片选择及端口选择
1.用实验系统 8255A 实现对信号灯的控制(所用端口自定);2 位数码显示用
8255A 实现控制。
2. 用实验系统 8254 的计数器 2 定时向实验系统主片 8259A 的 IRQ7 请求中断,
以实现要求的 1 分钟、5 秒钟和 20 秒的定时。实验系统 8254 的计数器 2 的 CLK2
接 OPCLK,频率为 1.19318MHZ;GATE2 已接 +5V;定时采用软硬件相结合的方式
实现。
⒊ 用实验系统的发光二极管模拟红绿灯。
注:8259A 的端口地址为:218H、219H
8255A 的端口地址为:端口 A-200H、端口 B-201H、端口 C-202H、控制端
口-203H
页码:2
8254 的端口地址为:计数器 0-208H、计数器 1-209H、计数器 2-20aH、控
制寄存器 0-20bH。
Ⅱ.设计电路图
图 2-1 交通灯实时控制系统 8255 原理图
图 2-2 中断服务原理图
页码:3
图 2-3 中断服务电路接线图
图 2-4 电路连线图
Ⅲ..交通灯程序
本次设计中,选用 8254 的计数器 0 定时向实验系统主片 8259A 的 IRQ0 请求
中断。设置 8254 的计数器 0 每 10ms 请求一次中断,工作于模式 3;8255 的 A
端口控制交通灯;
初始化程序:
DATA SEGMENT
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;存放七段代码表
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
D1 EQU 10H
D2 EQU 200H ;8255A 端口 A
EA EQU 200H ;8259 端口地址
EE EQU 203H
CONTROL EQU 20bH ;8254 端口地址
COUNT0 EQU 208H
COUNT1 EQU 209H
COUNT2 EQU 20aH
Z8259 EQU 222H
D8259 EQU 220H
页码:4
LEDMOD EQU 00 ;左边输入,八位显示外部译码八位显示
LEDFEQ EQU 38H ;扫描频率
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
CODE SEGMENT
ASSUME CS:CODE
CONT DB 0
CONT1 DB 0
CONT2 DB 0
BKSD DB 0
BKAD DB 0
BKDA DB 0
TEMP DB 0
;*******************************************
START:
MOV AX,0
MOV DS,AX
MOV AX,OFFSET IRQ0
ADD AX,2000H
MOV SI,0FH*4
MOV [SI],AX
MOV AX,0
MOV [SI+2],AX
IN AL,218H
AND AL,7FH
OUT 219H,AL
CLI
MOV AL,80H ;初始化 8255
OUT EE,AL
MOV AL,00
OUT EA,AL
MOV AL,0f0H
OUT EA,AL
MOV DX,218H ;8259 初始化
MOV AL,00010010b
OUT DX,AL
MOV AL,08H
MOV DX,219H
OUT DX,AL
MOV DX,203H ;设置为全输出
MOV AL,80H
页码:5
OUT DX,AL
MOV DX,200H
MOV AL,0ffh
OUT DX,AL ;清 LED
MOV DX,200H ;全红
MOV AL,0F0H
OUT DX,AL
MOV AL,00110110b ;初始化 8254
OUT CONTROL,AL
MOV AX,2500
MOV DX,COUNT0
OUT DX,AL
MOV AL,AH
OUT COUNT0 ,AL
MOV AX,DATA
MOV DS,AX
中断服务程序:
A1: STI
HLT
JMP A1
IRQ0: ;写数码管程序,暂缺
JMP COMPARE
COMPARE:CMP DL,0
JZ STATE0
CMP DL,1
JZ STATE1
CMP DL,2
JZ STATE2
CMP DL,3
JZ STATE3
STATE0: ;状态 0:东西红南北绿
mov al,01011010b
out D2,al
DEC SI
JNZ CHANGE1
DEC DH
MOV SI,100
CHANGE1:DEC CX
CMP CX,0
JNZ M0
MOV CX,500
STATE1: DEC DI ;状态 1:东西方向黄灯闪烁,南北绿灯
页码:6
CMP DI,0
JNZ SHINE1
MOV AL, 00001010b ;东西灭,南北绿
OUT D2,AL
MOV DI,50
JMP CHANGE
SHINE1: MOV AL,11111010B ;东西黄,南北绿
OUT D2,AL
CHANGE: DEC SI
JNZ CHANGE2
DEC DI
MOV SI,100
CHANGE2:DEC CX
CMP CX,0
JNZ M1
MOV CX,2000
MOV DH,25
STATE2: MOV AL,10100101b ;状态 2:东西绿灯,南北红灯
OUT D2,AL
DEC SI
JNZ CHANGE3
DEC DH
MOV SI,100
CHANGE3:DEC CX
CMP CX,0
JNZ M2
MOV CX,500
STATE3: DEC DI ;状态 3:东西绿灯,南北黄灯闪烁
CMP DI,0
JNZ SHINE2
MOV AL,10100000B ;东西绿灯,南北灭
OUT D2,AL
MOV DI,50
JMP SOURCE
SHINE2: MOV AL,10101111B ;东西绿,南北黄
OUT D2,AL
SOURCE: DEC SI
JNZ CHANGE4
DEC DH
MOV SI,100
CHANGE4:DEC CX
CMP CX,0
JNZ M3
MOV CX,6000
页码:7
MOV DH,65
M0: MOV DL,0 ;下次进入状态 0
JMP EXIT
M1: MOV DL,1 ;下次进入状态 1
JMP EXIT
M2: MOV DL,2 ;下次进入状态 2
JMP EXIT
M3: MOV DL,3 ;下次进入状态 3
EXIT: MOV AL,20H
OUT 218H,AL
IRET
CODE ENDS
END START
程序运行结果
1.即东西方向的绿灯和南北方向的红灯同时点亮 1 分钟;
2.1 分钟后,东西方向的黄灯闪烁 5 秒钟,。此时南北方向仍维持红灯点亮。
3.东西方向的黄灯闪烁 5 秒钟后,转为东西方向的红灯和南北方向的绿灯同时
点亮 20 秒钟;
4. 20 秒钟后,转为南北方向的黄灯闪烁 5 秒钟,此时东西方向仍维持红灯点
亮。
5.南北方向的黄灯闪烁 5 秒钟后,东西方向的绿灯和南北方向的红灯同时点亮
1 分钟。如此循环重复。。
五、结果测试分析
1.状态灯显示测试
当电路连接完毕后,将写好的测试程序刷写到芯片内,K1 和 K2 分别给端口送高
电平和低电平,通电即可检测。
2.数码管的测试
将串口的和电路板上的接口连接,将写好的测试程序刷写到芯片内,开电源即可
测试。
六、总结
1、软件延时与定时器计时
软件延时,设计简单,使用方便,但是无法进行精确计时,无法在实际应用中进
行使用,本次设计采用了,定时器 0 进行计时,每 10ms 产生一个脉冲信号,可
以准确的计时并方便 8 段数码管进行显示
2、中断使用的作用
页码:8