汽车信号灯控制模拟--微机应用系统综合设计(8086,8255和5253)

一、设计题目及要求

1.1设计题目

本课程设计题目的主要内容是模拟汽车信号灯控制系统。

设计要求为:(闪烁频率为30HZ)

1.汽车转弯时左(右)头灯(尾灯)和仪表盘上的两个灯闪烁。

2.合上紧急开关或者停靠时,所有灯闪烁。

3.刹车时两个尾灯亮并且刹车不影响转弯。

4. 合上紧急开关并刹车:尾灯亮,头灯和仪表盘灯闪烁。

5. 转弯刹车并合上紧急开关:左(右)尾灯亮,其余灯闪烁。

1.2设计要求

 1. 汽车转弯时,要求左/右尾灯、左/右头灯和仪表板上的2个指标灯相应地发出闪烁信号,闪烁频率为1Hz。

2. 当紧急开关或停靠开关合上时,所有6个信号灯都闪烁,闪烁频率为30HZ。

3. 汽车刹车时,2个尾灯发出不闪烁的信号;汽车刹车时正在转弯,则相应的转弯闪烁信号不受影响。

4. 合上紧急开关并刹车:尾灯亮、仪表板灯、头灯闪烁,闪烁频率为30HZ。

扫描二维码关注公众号,回复: 17343724 查看本文章

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软件不太熟悉,在调试过程中遇到了很多问题,有些问题在同学和老师的帮助下得以解决,有些问题通过查找资料解决。通过两周的微机原理与接口技术的课程设计,我们对这半年来学习的该课程有了一个良好的、整体的认识。同时对微机原理相关知识进行了一次梳理。通过课程设计锻炼了动手能力,运用理论来指导实践的能力。同时也感到知识的不足,要学的东西还有很多,我们学的只是冰山一角而已。在整个课程设计的过程中,查阅了不少资料,通过检索搜寻所需的资料,了解了一些硬件设计的常识对自己的课程设计有很大帮助。课程设计是培养学生综合运用所学知识发现、提出、分析和解决实际问题,是锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。自己通过辛苦的努力,在老师的指导和同学的帮助下最终实现了该汽车信号控制模拟。设计汽车信号灯控制系统过程中,我们感到特别的欣慰,期间获益颇多。在课程设计过程中,我们将微机接口技术中的理论与实践相结合起来,对芯片的功能也有了进一步认识理解,重温了汇编语言的编程。在实验调试过程中发现问题,分析问题,如何解决问题的能力都有所提高,这对我们不久将来离开学校,投入实际工作都是很有借鉴意义的。同时,这个课程设计让我明白了要想独具一格,必须多动脑、多动手,并且厚积才能薄发,自己前段对单片机的学习就成为了这次课程设计的不小助力,最后非常感谢老师这么多天陪伴我们,并耐心的指导,让我们少走了许多弯路,总之这次课程设计的经历是非常值得我记住和思考的。

猜你喜欢

转载自blog.csdn.net/qq_51660769/article/details/129511012