一、设计题目及要求
1.1设计题目
本课程设计题目的主要内容是模拟汽车信号灯控制系统。
设计要求为:(闪烁频率为30HZ)
1.汽车转弯时左(右)头灯(尾灯)和仪表盘上的两个灯闪烁。
2.合上紧急开关或者停靠时,所有灯闪烁。
3.刹车时两个尾灯亮并且刹车不影响转弯。
4. 合上紧急开关并刹车:尾灯亮,头灯和仪表盘灯闪烁。
5. 转弯刹车并合上紧急开关:左(右)尾灯亮,其余灯闪烁。
1.2设计要求
1. 汽车转弯时,要求左/右尾灯、左/右头灯和仪表板上的2个指标灯相应地发出闪烁信号,闪烁频率为1Hz。
2. 当紧急开关或停靠开关合上时,所有6个信号灯都闪烁,闪烁频率为30HZ。
3. 汽车刹车时,2个尾灯发出不闪烁的信号;汽车刹车时正在转弯,则相应的转弯闪烁信号不受影响。
4. 合上紧急开关并刹车:尾灯亮、仪表板灯、头灯闪烁,闪烁频率为30HZ。
5. 转弯刹车并合上紧急开关:左/右尾灯亮、其余灯闪烁,闪烁频率为30HZ。
二、方案分析与设计
在对任务需求进行概括分析以后,我决定主要控制芯片采用8086CPU,接口电路部分采用8255A,闪烁频率的产生由8253定时器产生,在加以辅助电路构成汽车信号灯系统的硬件电路。通过6个发光二级管模拟两个头灯、两个尾灯和仪表盘上的两个指示灯。选择5个开关产生主要的五种状态,其他种状态用着五个开关的不同组合来分别控制左转、右转、紧急,刹车,停靠的状态,使发光二极管信号灯相应亮、灭或闪。通过8253定时器和软件编程控制灯的闪烁频率。
对设计系统过的详细分析:
(1) 当用户置开关状态为01H时,也即左转,表左转开关闭合,则左头灯、左尾灯、仪表左灯以1Hz闪烁。
(2) 当用户置开关状态为02H时,也即右转,表右转开关闭合,则右头灯、右尾灯、仪表右灯以1Hz闪烁。
(3) 当用户置开关状态为04H时,表紧急开关闭合,也即出现紧急状态时,则左右头灯、左右尾灯、仪表左右灯均同时以30Hz闪烁。
(4) 当用户置开关状态为08H时, 表踩刹车(合上刹车开关),则左右尾灯亮。
(5) 当用户置开关状态为10H时,表示汽车此时在停靠,则左右头灯、左右尾灯以30Hz闪烁。
(6) 当用户置开关状态为09H时,表示汽车左转刹车,则左头灯、左尾灯、仪表左灯闪烁,右尾灯亮。
(7) 当用户置开关状态为0AH时,表示汽车右转刹车,则右头灯、右尾灯、仪表右灯以30Hz闪烁,左尾灯亮。
(8) 当用户置开关状态为0CH时,表示汽车此时处于紧急刹车状态,则左右头灯、仪表左右灯以30Hz闪烁,左右尾灯亮。
(9) 当用户置开关状态为0DH时,表示汽车此时处于左转紧急刹车状态,则左右头灯、仪表左右灯、左尾灯以30Hz闪烁,右尾灯亮,。
(10) 当用户置开关状态为0EH时,表示汽车此时处于右转紧急刹车状态,则 左右头灯、仪表左右灯、左尾灯以30Hz闪烁,左尾灯亮。
设置实验系统的6个发光二极管的对应情况为:
L0:右尾灯 L1:左尾灯 L2:右头灯 L3:左头灯 L4:仪表右灯 L5:仪表左灯
通过5个开关(K0、K1、K2、K3、K4的组合)产生的32种情况中的10种来作为输入选择影响6个指示灯的输出,对应关系如下表:
表1 开关状态与灯状态对应表
灯状态 开关状态 |
右尾 灯 (L5) |
左尾 灯 (L4) |
右头 灯 (L3) |
左头 灯 (L2) |
右仪 表灯 (L1) |
左仪 表灯 (L0) |
|
1左转(01h) |
00001 |
灭 |
闪 |
灭 |
闪 |
灭 |
闪 |
2右转(02h) |
00010 |
闪 |
灭 |
闪 |
灭 |
闪 |
灭 |
3紧急(04h) |
00100 |
闪 |
闪 |
闪 |
闪 |
闪 |
闪 |
4刹车(08h) |
01000 |
亮 |
亮 |
灭 |
灭 |
灭 |
灭 |
5左转+刹车(09h) |
01001 |
亮 |
闪 |
灭 |
闪 |
灭 |
闪 |
6右转+刹车(0Ah) |
01010 |
闪 |
亮 |
闪 |
灭 |
闪 |
灭 |
7刹车+紧急(0Ch) |
01100 |
亮 |
亮 |
闪 |
闪 |
闪 |
闪 |
8左转+刹车+紧急(0Dh) |
01101 |
亮 |
闪 |
闪 |
闪 |
闪 |
闪 |
9右转+刹车+紧急(0Eh) |
01110 |
闪 |
亮 |
闪 |
闪 |
闪 |
闪 |
10停靠(10h) |
10000 |
闪 |
闪 |
闪 |
闪 |
闪 |
闪 |
2.1 硬件连线图
图2-2 硬件连线图
说明:
利用8086驱动8255A和8253来连接外部电路。通过时钟发生器和8086最小系统产生一定时频率,把时钟频率传送到8253的T1计数器,产生30HZ时钟脉冲,通过软件控制产生一定频率的时钟脉冲来驱动8255PA口使汽车灯左转灯,右转灯和暂停灯闪烁,使PB口保持高电平,通过开关使前远灯和近灯接通。
1.8255的CS端接74LS138地址译码电路地址为0F0H的接口,8253的CS端接74LS138地址译码电路地址为0E8H的接口从而达到选通控制。
2.DATA与8086/8088数据总线的低八位相连接,RD与IOR相连接,WR与IOW相连接,将8086/8088的地址线A1,A2与8255的A0,A1连接起来。同时将8086的地址线A2,A3与8253的A0,A1连接起来。
3.8255的PA端口用于输出,与发光二极管相连接,用于控制灯的闪烁效果,PB端口用于输入,用其低五位做为输入控制,用8255的PC的一个端口作为8253输出的入口,接受8253输出的一定频率的方波。
4.C51的PB.0---PB.4端口用来检测输入信号——开关状态。
5. L0(右尾灯)、L1(左尾灯)、L2(右头灯) L3(左头灯) L4(仪表右灯)、 L5(仪表左灯)
2.2软件流程图
说明:首先初始化8253的通道0和通道1,初始化8255A的A口为输出,B、C口为输入;并且通过对AL赋值,通过读取的命令来对比,来判断当前的工作状态。用五个开关来模拟这几个操作,当检测到相关操作后,然后判断属于哪一类操作,再通过软件来驱动控制相应的信号灯闪烁或长亮。以此来实现对汽车信号灯的控制。
三、源代码(部分省略,需要的看评论区)
DATA SEGMENT
IO8255A EQU 0F0H ;8255的A口地址
IO8255B EQU 0F2H ;8255的B口地址
IO8255C EQU 0F4H ;8255的C口地址
IO8255CON EQU 0F6H ;8255的控制寄存器地址
IO8253_0 EQU 0E8H ;8253的0通道
IO8253_1 EQU 0EAH ;8253的1通道
IO8253_2 EQU 0ECH ;8253的2通道
IO8253CON EQU 0EEH ;8253的控制寄存器
DATA ENDS
STACK1 SEGMENT
STA DW 50 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK1
MAIN PROC FAR
START: PUSH DS
(中间部分代码略)
DELAY PROC NEAR ;延时程序
PUSH CX
MOV CX,000FH
S12: LOOP S12
POP CX
RET
DELAY ENDP
DELAY0 PROC NEAR
PUSH CX
PUSH AX
MOV CX,0400H
S13: CALL DELAY
LOOP S13
POP AX
POP CX
RET
DELAY0 ENDP
CODE ENDS
END
四、调试过程说明
本次课程设计,花费了很长时间才将程序调试到完全正确。在调试过程中,出现了大大小小的各种错误。一方面是由于前期分析问题比较概括性,不够仔细与透彻。另一方面由于汇编程序编写能力欠佳,再加上偶尔的粗心大意,导致出现了一些难以攻克的小错误,如一个标号位置放置的错误,调试时就花费了大量时间去查错。
在硬件连线方面
8255和8086是核心的板块,利用8086驱动8255A和8253来连接外部电路。通过时钟发生器和8086最小系统产生一定时频率,把时钟频率传送到8253的T1计数器,产生30HZ时钟脉冲,通过软件控制产生一定频率的时钟脉冲来驱动8255PA口使汽车灯左转灯,右转灯和暂停灯闪烁,使PB口保持高电平,通过开关使前远灯和近灯接通。
软件调试方面
8255的CS端接74LS138地址译码电路地址为0F0H的接口,8253的CS端接74LS138地址译码电路地址为0E8H的接口从而达到选通控制。
DATA与8086/8088数据总线的低八位相连接,RD与IOR相连接,WR与IOW相连接,将8086/8088的地址线A1,A2与8255的A0,A1连接起来。同时将8086的地址线A2,A3与8253的A0,A1连接起来。
8255的PA端口用于输出,与发光二极管相连接,用于控制灯的闪烁效果,PB端口用于输入,用其低五位做为输入控制,用8255的PC的一个端口作为8253输出的入口,接受8253输出的一定频率的方波。
五、设计结果说明
本次课程设计,为了在设计方案上达成共识,分析、硬件连线、编写程序、测试各阶段我们组两个成员都参与其中,这使我们组每个人对整个设计思想及具体实现都有了清楚的掌握。特别在编程时,我们考虑到寄存器使用可能冲突、变量使用不一致给后期工作造成不便,我们一起参与了代码的编写工作。这次设计我们完成了任务书中的所有要求,通过8255A的A口和B口模拟汽车信号灯的亮灭闪烁情况,先画出了流程图,然后对代码进行编写,主要采用汇编语言和C语言。最后在proteus下进行调试,由于对proteus软件不太熟悉,在调试过程中遇到了很多问题,有些问题在同学和老师的帮助下得以解决,有些问题通过查找资料解决。我们使用了六个灯来模仿汽车的六个灯,使用了8086、8253和8253,74LS00,74LS38,因为要满足一些同时执行两个操作的任务,比如同时踩刹车和转弯,所以使用了五个单刀开关来模拟汽车信号灯这次设计。本次设计存在的不足有:对现实的汽车灯模拟只能做出部分功能,还有很多功能没能完成。设计还能再简洁。
六、总结
本次课程设计是要设计一个汽车信号灯控制系统,主要通过8255A的A口和B口模拟汽车信号灯的亮灭闪烁情况。通过本次的设计以此来加深对微机接口技术的理解,提高了自己的动手能力。首先是着手对硬件电路的设计,本次课程设计主要采用了8255A接口电路。通过课本了解到了各个芯片的引脚及功能、工作方式、内部结构和控制字。对各个功能的熟悉便于了硬件电路的设计。然后就是对程序的设计,想要设计出一个实用的控制系统需要了解程序流程,先画出了流程图,然后对代码进行编写,主要采用汇编语言和C语言。最后在proteus下进行调试,由于对proteus软件不太熟悉,在调试过程中遇到了很多问题,有些问题在同学和老师的帮助下得以解决,有些问题通过查找资料解决。通过两周的微机原理与接口技术的课程设计,我们对这半年来学习的该课程有了一个良好的、整体的认识。同时对微机原理相关知识进行了一次梳理。通过课程设计锻炼了动手能力,运用理论来指导实践的能力。同时也感到知识的不足,要学的东西还有很多,我们学的只是冰山一角而已。在整个课程设计的过程中,查阅了不少资料,通过检索搜寻所需的资料,了解了一些硬件设计的常识对自己的课程设计有很大帮助。课程设计是培养学生综合运用所学知识发现、提出、分析和解决实际问题,是锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。自己通过辛苦的努力,在老师的指导和同学的帮助下最终实现了该汽车信号控制模拟。设计汽车信号灯控制系统过程中,我们感到特别的欣慰,期间获益颇多。在课程设计过程中,我们将微机接口技术中的理论与实践相结合起来,对芯片的功能也有了进一步认识理解,重温了汇编语言的编程。在实验调试过程中发现问题,分析问题,如何解决问题的能力都有所提高,这对我们不久将来离开学校,投入实际工作都是很有借鉴意义的。同时,这个课程设计让我明白了要想独具一格,必须多动脑、多动手,并且厚积才能薄发,自己前段对单片机的学习就成为了这次课程设计的不小助力,最后非常感谢老师这么多天陪伴我们,并耐心的指导,让我们少走了许多弯路,总之这次课程设计的经历是非常值得我记住和思考的。