硬件设计课程设计Word文档下载推荐.docx
《硬件设计课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《硬件设计课程设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
通过8255并口控制,可以达到更加人性化的效果从而方便各种人群。
给8279的输入相应的数字,使数码管显示倒计时你数字,利用8279编码,实现热键的功能。
关键字:
8255交通灯控制82538279
目录
复杂交通灯的设计与编程实现1
一.需求分析:
1
1.1背景1
1.2需求规定1
二.可行性论证报告2
2.1基本设计内容分析2
2.2分析流程图2
2.3课程设计的设备及环境3
三.系统设计3
3.1基本功能设计3
3.2流程图4
四、硬件实现说明5
五、实验总结与体会7
六、参考资料9
复杂交通灯的设计与编程实现
1.1背景
制作一个十字路口的交通灯,用来实现指挥一个路口车辆行人的顺利安全通行。
编写一个交通灯控制程序,实现东西路口与南北路口状态灯的转换。
使用LED显示单元的两组LED数码管分别模拟十字路口的两组交通灯。
用红黄绿led灯来显示人行道行人的通过与停止情况。
由于行驶中的车辆要停下来要一些时间,要求绿灯亮后黄灯亮几秒,给人员足够的时间反应,然后等变为红灯。
应该有紧急情况处理机制,遇到一些特殊情况特殊需要时启动紧急键可以控制交通灯。
1.2需求规定
模拟十字路口的红绿灯,倒计时数码管显示。
交通灯的控制可分东西向和南北向两组,每组可用红、黄、绿三个灯进行交通管理,配合倒计时显示管构成简单的交通指挥系统。
红绿黄灯的具体设计如下:
A.南北路口红灯亮,东西路口绿灯亮,延时30秒,led数码管倒计时显示;
B.南北路口红灯亮,东西路口绿灯灭、黄灯闪烁,闪烁时会有3秒延时;
C.南北路口绿灯亮,东西路口红灯亮,延时30秒,led倒计时显示;
D.南北路口绿灯灭、黄灯闪烁,东西路口红灯亮,闪烁时会有3秒延时;
E.转到A
热键区设置
设置热键1,第一次按下,南北路口红灯灭、东西路口绿灯亮、并且led数码管倒计时显示停止,再次按下恢复原始状态。
设置热键2,第一次按下,东西路口红灯灭、南北路口绿灯亮、并且led数码管倒计时显示停止,再次按下恢复原始状态。
设置热键3,第一次按下,南北路口红灯亮、东西路口绿灯亮、并且led数码管倒计时显示停止,再次按下恢复原始状态。
设置热键4,第一次按下,南北路口黄灯亮、东西路口黄灯亮、并且led数码管倒计时显示停止,再次按下恢复原始状态。
二.可行性论证报告
2.1基本设计内容分析
选取两组红黄绿led灯作为东西方向和南北方向的交通灯,led灯的亮灭由8255进行控制,延时由8253实现,led数码管倒计时显示和热键设置由8279控制。
将8253的0端口和1端口进行进行级联实现1秒的延时。
将8255A的A口和B口设为输出方式,实现对红绿灯的控制。
8255A的C口为输入方式。
将8253输出信号输入到8255的C0端口,8255通过对C0端口输入信号的高低电平的判断,实现延时控制。
给8279的输入相应的数字,使数码管显示倒计时你数字。
利用8279编码,实现热键的功能。
2.2分析流程图
2.3课程设计的设备及环境
微型计算机原理与接口技术教学实验系统一台,计算机一台,排线若干
经上述的分析,此实验可以实现。
三.系统设计
3.1基本功能设计
如右图所示的交通灯路口
先初始化可编程器件8255和8253,设置初始值为30放在CX中用来计数(定为30秒),开始显示南北路口红灯亮,东西路口绿灯亮,延时30秒,led数码管倒计时显示,判断CX的值是否为0,不为0,则继续上一状态。
为0则转下一个状态南北路口红灯亮,东西路口绿灯灭、黄灯闪烁的状态,再判断计数值CX是不是=0,没有则继续显示这个状态,有的话进入下一个状态,从新设置初始值为30放在CX中用来计数,显示南北路口绿灯亮,东西路口红灯亮,判断计数值CX有没有=0.如果不等于0,则继续上一状态。
如果等于0则进入下一个状态南北路口绿灯灭、黄灯闪烁,东西路口红灯亮的状态,再判断计数值是不是=0,没有则继续显示这个状态,有的话转回到START继续执行,不停的循环来实现交通灯的功能。
3.2流程图
注:
有的流程图比如热键原理都是一样的,所以只画出一个流程图
四、硬件实现说明
整个设计总共需要三个芯片,分别为8253,8255,8279;
设计的主要由8255芯片对系统进行整体控制。
8255芯片分析:
8255芯片图如下:
本设计通过对8255进行编码,实现8255控制红绿黄灯的亮或灭。
六个灯泡对应的端口如下表:
L7
L6
L5
L4
L3
L2
PA0
PA1
PA2
PA3
PA4
PA5
南北红灯
南北黄灯
南北绿灯
东西红灯
东西黄灯
东西绿灯
初始化:
************8255初始化
MOVDX,PORTCON;
写8255控制字,A、B口均为方式0输出,
MOVAL,10000001B;
c口高四输出,低四输入
OUTDX,AL
8279芯片分析:
8279芯片图如下
提供的实验箱中,8279已经与led七段数码管连接好,仅需要给8279片选信号,编码也很简单,只需要对8279进行初始化编程,然后向状态口输入要显示的数据,输入命令让8279显示即可。
而且8279与键盘也是内部连好的,只需要程序控制。
不过由于8279以前没接触过,刚开始还是有点困难。
;
************初始化8279
MOVDX,Z8279
MOVAL,LEDMOD
OUTDX,AL
MOVAL,LEDFEQ
……….
;
************子程序
DISPLAY:
MOVDX,Z8279
MOVAL,90H
OUTDX,AL
七段码设定:
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB77H,7CH,39H,5EH,79H,71H,76H
8253芯片分析:
本设计只用到了8253的两个端口0和1。
0端口的输入信号clk0为1MHz,1端口的输入信号clk1为out0。
将1端口的输出信号out1送到8255的C0端口。
首先要对8253初始化编程,然后对0和1端口分别送入计数初值,实现定时功能。
初始化及计数值:
DELAY:
8253-1秒延时子程序
MOVDX,CONTROL
MOVAL,00110101B;
通道0,工作于方式2
MOVDX,COUNT0;
通道0写入计数初值
MOVAL,00H
MOVAL,10H
MOVDX,CONTROL;
写入控制字
MOVAL,01110001B;
通道1,工作于方式0
MOVDX,COUNT1;
通道1写入计数初值
五、实验总结与体会
本次课程设计实现了用8253、8255和8279芯片完成了复杂的交通灯指挥系统。
经过了几个星期的不懈努力,总算是圆满的完成了任务。
刚开始接触实验的时候,感觉很简单,需求分析很快就能上手,根据老师的要求进行设计,很快就有了大体的思路。
8253与8255以前都学习过,看一下书基本都能回忆起来,第二节课我们就将8253与8255的初始化,以及大体的循环程序搞定。
8255是控制红绿灯的核心芯片,具体的与led灯的连接参见硬件分析。
这一部分可以是说最简单的部分了。
接着,便出现了一个问题。
数码管的显示与热键的设置。
这样一个没有倒计时的显示的交通灯系统是实现了。
但8279却是一个老大难问题,从来没有接触过,而且老师给的资料又太乱。
看着都头痛,于是开始求助XX、Google。
8279是提供显示功能的芯片,在网上搜到的一些资料,自己看的也稀里糊涂,不是很明白。
最后只有再次请教老师了,老师又给了一些资料,让自己看,我自己又到图书馆借了一本有关8279芯片的书。
经过若干天的学习,终于搞懂了一点点,知道怎样初始化芯片。
知道的数码管显示与热键的一些基本内容。
由于关于8279的资料大部分都是讲解键盘的,而我们还需要显示部分的,所以还是不太理解,还有一个原因以前汇编没学习好。
最后还是得请教老师,经过老师的分析,自己也更进一步的掌握了芯片。
最后终于实现了8279的显示功能,只不过只能显示一位。
这已经过去两周了。
第四周我们终于有了重大突破,班里有小组做电子时钟也需要使用8279,同样也要用到数码管的显示问题,他们采取了取余的方法,经过一番努力,最终我们也实现了双位显示。
这样,具有倒计时显示的简单红绿灯交通指挥系统就完成了。
最后就是热键问题,相比较前面而言,热键的设置是这一个系统的大头,但是由于之前搞数码管的显示,因此,在设置热键时就不像之前的那么迷茫,一周的时间就搞定了的基本的框架,中途也遇到了很多的麻烦,但是在许询问老师和同学之后,都一一解决了。
还帮了班级里其他小组的忙,呵呵,挺开心的。
通过此次课程设计,我们又重新温习了汇编语言,并对汇编语言有了更深一层的掌握,为以后应用汇编打下了良好的基础。
此外,还学会了8279芯片的应用,巩固了对芯片的编程能力,提高了自己的动手能力。
最后感谢老师在实验过程中对我们的指导,谢谢。
——余彬
本实验相对来说还是比较困难的。
刚开始设置8255和8253比较简单的,我们用了一节课的时间就已经完成了led灯的正常显示。
交通灯最难懂的是8279的键盘以及数码管显示,两节课在浑浑噩噩中度过,没办法就去图书馆找相关的资料,只要机房有课就来做实验,后来把数码管的显示给做好了,我非常高兴。
虽然8279是困难点,不过我在自己学习8279中获得了很多乐趣,我发现其实很多芯片可以自己去学习了,我们在学习中不仅要获得一些基础知识,更要学会的是学习的方法,如何去掌握、获取更多的芯片。
在学习8279的时候我一直拿着《微机接口与原理技术》这本书,学到了一些汇编语言的技巧,这些是我在课堂上不曾得到的知识。
在编程过程中要时刻注意一些细节,比如刚开始的PUSHcs,POPDS;
虽然这两句话没觉得有什么用途,但是在8279的显示中是至关重要的。
其实有些编程需要技巧的,不如说数码管显示,如果只是0-9的倒计时是比较简单的,但这是两位数的倒计时,就需要实现个位与十位的分离,后来在老师的提示下,我用除法div将十位变成个位,将个位变成余数分别放入显示ram中,我们就成功了。
对于热键,我是参考一些资料,主要思想是如果按下此键如0BH,就设置一个循环,除非按下08H键,否则程序一直在循环。
在学习的过程中,我也会去利用我学到的知识帮助同学,这样可以加强我对芯片的了解,最终,我们的强大的交通灯实现了,很有成就感。
--朱成
六、参考资料
1、《微机原理与接口技术》周荷琴、吴秀清编著。
2、husy88te实验指导书
3、8279的相关资料
源代码见附录
附录1:
流程图
附录2:
源代码
附录一:
附录二:
(源代码清单)
DATASEGMENT
PORTCONEQU20BH;
8255控制寄存器地址
PORTAEQU208H;
8255A口地址
PORTBEQU209H;
8255B口地址
PORTCEQU20AH;
8255C口地址
CONTROLEQU203H;
8253控制寄存器地址
COUNT0EQU200H;
计数器0地址
COUNT1EQU201H;
计数器1地址
COUNT2EQU202H;
计数器2地址
Z8279EQU212H;
8279控制口
D8279EQU210H;
8279数据口
LEDMODEQU00H;
左边输入,八位显示外部译码八位显示
LEDFEQEQU38H;
扫描频率
DATAENDS
------------------------------------------
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
PUSHCS
POPDS
************8255初始化
MOVDX,Z8279
MOVAL,LEDMOD
MOVAL,LEDFEQ
MOVDX,PORTA;
亮南北红灯,东西绿灯
MOVAL,00011110B
CALLDELAY;
延时1秒
BEGIN:
--------------------------------------------------
MOVCX,30;
延时30秒
CYC0:
CALLH;
使南北东西红灯亮
MOVDX,PORTA
MOVAL,00011110B;
重置亮南北红灯,东西绿灯
CALLDELAY
CALLDISPLAY
CALLI;
使南北绿灯,东西红灯
LOOPCYC0
MOVCX,03H;
延时3秒
CYC1:
亮南北红灯,东西黄灯
MOVAL,00101110B
CALLDISPLAY;
LOOPCYC1
CYC2:
亮南北绿灯,东西红灯
MOVAL,00110011B
使南北东西全红
CALLG;
使南北红灯,东西绿灯
重置,使南北绿灯,东西红灯
LOOPCYC2
CYC3:
亮南北黄灯,东西红灯
MOVAL,00110101B
延时一秒
LOOPCYC3
JMPBEGIN;
---------------------------------------------------
TC:
MOVDX,PORTC
INAL,DX
TESTAL,01H
JZTC
RET
-------------------------------------------------------------------------------
MOVAX,00H
PUSHCX
MOVAX,CX
MOVBL,0AH
DIVBL
MOVAL,AH
LEABX,LED
XLAT
MOVDX,D8279
MOVAX,CX
POPCX
RET
H:
MOVAL,40H;
写读FIFORAM命令字
MOVDX,Z8279
MOVDX,D8279;
读入FIFORAM内容
CMPAL,0BH
JNZS2
MOVCX,30
MOVAL,11110110B
S1:
CMPAL,08H
JNZS1
S2:
I:
CMPAL,00H
JNZI2
I1:
JNZI1
I2:
G:
CMPAL,01H
JNZG2
G1:
JNZG1
G2:
----------------------------------------------------------------------------
CODEENDS
ENDSTART