实验报告 2009-09-02 18:16:02 阅读1337 评论2 字号:大中小
摘 要:
介绍了基于8255A的交通灯系统设计方案,重点论述了软件系统的编写方法。实际结果表明该系统方案切实可行。
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用8255A芯片实现了A、B口设置红、绿灯点亮时间的功能;红绿灯循环点亮,红绿灯变换之间,黄灯闪烁5秒
关键字:
交通灯、软件系统
设计内容
本次课程设计是交通灯实时控制器,主要是用发光二极管模拟十字路口的红绿灯,如下图所示。交通灯控制器的设计与实现主要是通过编写汇编语言程序利用8255的A口和B口对灯的亮与灭进行控制。由于实验室的仪器上只有16个发光二极管,所以还得弄清楚是每个发光二极管所代表的灯的颜色及方向。16个发光二级管,且从高到低依次为:D15D14D13D12D11D10D9D8 D7D6D5D4D3D2D1D0。在设计的过程中做了如下的规定:R表示红灯,G表示绿灯,Y表示黄灯,E表示方向东,W表示方向西,S表示方向南,N表示方向北,D15D14表示ER,D13D12表示SR,D11D10表示EG,D9D8表示SG,D7D6表示WR,D5D4表示NR,D3D2表示WG,D1D0表示NG,D15D14D11D10表示EY,D7D6D3D2表示WY,D13D12D9D8表示SY,D5D4D1D0表示NY。
交通灯控制示意图
具体时间的分配和控制如下:
东西方向绿灯亮,南北方向红灯亮,时间20秒
东西方向黄灯闪烁,南北方向红灯亮,时间5秒
东西方向红灯亮,南北方向绿灯亮,时间20秒
东西方向红灯亮,南北方向黄灯闪烁,时间5秒
设计器材设备
微机、TD-PIT++实验箱
实验电路图
设计流程图
总体设计过程
1. 根据选择题目的要求,结合所参考的资料,选择8255单元芯片以及LED显示单元电路。
1) 电路元器件的选择
可编程并行通信接口芯片8255
2) 完成8255单元电路的设计及参数计算
8255的A口地址是:IOY0+00H*4
B口地址是:IOY0+01H*4
C口地址是:IOY0+02H*4
控制端口地址是:IOY0+03H*4
2. 软件流程图的设计
3. 电路接线图的设计
4. 软件的设计(程序见附录)
1) 芯片初始化,写8255的方式字
2) 延时,延时是通过设置指令的循环次数实现的
3) 东西方向绿灯亮,南北方向红灯亮,时间20秒
4) 东西方向黄灯闪烁,南北方向红灯亮,时间5秒
5) 东西方向红灯亮,南北方向绿灯亮,时间20秒
6) 东西方向红灯亮,南北方向黄灯闪烁,时间5秒
7) 判断是否有键按下
8) 返回到DOS
5. 进行软硬件调试
因采用了pc机和微机原理实验箱,硬件电路设计相对比较简单,利用微机实验箱上的8255并行口、发光二级管,便构成了交通灯控制系统。
心得体会
通过这次课程设计,加强了我的动手、思考和分析解决问题的能力。在整个设计过程中,我们按照老师给出的总体方案设计了一套电路原理和电路连接图。通过查阅各方面资料我们编写了程序代码,并通过了调试,最终证实了该系统方案确实可行。
在设计过程中,了解了很多元器件的功能,并且对于其在电路中的使用有了更多的认识。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做,难免会遇到过各种各样的问题,同时也在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能够真正掌握理论知识,从而提高自己的实际动手能力和思考的能力。
附录(程序代码)
IOY0 EQU 0E000H
PORTA EQU IOY0+00H*4
PORTB EQU IOY0+01H*4
PORTK EQU IOY0+03H*4
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL, 80H
MOV DX, PORTK ;8255工作在方式0,A、B口均输出
OUT DX, AL
MOV AL, 3CH
MOV DX, PORTA ;A口东方向绿灯亮,南方向红灯亮
OUT DX, AL
MOV AL, 3CH
MOV DX, PORTB ;B口西方向绿灯亮,北方向红灯亮
OUT DX, AL
CALL DELAY ;调用20s延时子程序
MOV CX, 5
START1: MOV AL, 0FCH
MOV DX, PORTA ;A口东方向黄灯亮,南方向红灯亮
OUT DX, AL
MOV AL, 0FCH
MOV DX, PORTB ;B口西方向黄灯亮,北方向红灯亮
OUT DX, AL
CALL DELAY1 ;调用0.5s延时子程序
MOV AL, 30H
MOV DX, PORTA ;A口东方向黄灯灭,南方向红灯亮
OUT DX, AL
MOV AL, 30H
MOV DX, PORTB ;B口西方向黄灯灭,北方向红灯亮
OUT DX, AL
CALL DELAY1 ;调用延时0.5s子程序
LOOP START1 ;CX≠0则循环
MOV AL, 0C3H
MOV DX, PORTA ;A口东方向红灯亮,南方向绿灯亮
OUT DX, AL
MOV AL, 0C3H
MOV DX, PORTB ;B口西方向红灯亮,北方向绿灯亮
OUT DX, AL
CALL DELAY ;调用20s延时子程序
MOV CX, 5
START2: MOV AL, 0F3H
MOV DX, PORTA ;A口东方向红灯亮,南方向黄灯亮
OUT DX, AL
MOV AL, 0F3H
MOV DX, PORTB ;B口西方向红灯亮,北方向黄灯亮
OUT DX, AL
CALL DELAY1 ;调用0.5s延时子程序
MOV AL, 0C0H
MOV DX, PORTA ;A口东方向红灯亮,南方向黄灯灭
OUT DX, AL
MOV AL, 0C0H
MOV DX, PORTB ;B口西方向红灯亮,北方向黄灯灭
OUT DX, AL
CALL DELAY1 ;调用0.5s延时子程序
LOOP START2
MOV AH, 1
INT 16H
JZ START ;判断是否有键按下,无按键则
QUIT: MOV AX, 4C00H 调回继续循环,有则退出
INT 21H
DELAY PROC NEAR ;20s延时子程序
PUSH CX
PUSH DX
PUSH BX
MOV BX, 3
MOV DX, 27880
LAB: MOV CX, 0FFFFH
LOOP $
DEC DX
JNZ LAB
DEC BX
JNZ LAB
POP BX
POP DX
POP CX
RET
DELAY ENDP
DELAY1 PROC NEAR ;0.5s延时子程序
PUSH CX
PUSH DX
MOV DX, 6970
LAB1: MOV CX, 0FFFFH
LOOP $
DEC DX
JNZ LAB1
POP DX
POP CX
RET
DELAY1 ENDP
CODE ENDS
END START下载本文