交通灯设计82558254附连线图和源代码.docx
- 文档编号:29054786
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:35
- 大小:357.34KB
交通灯设计82558254附连线图和源代码.docx
《交通灯设计82558254附连线图和源代码.docx》由会员分享,可在线阅读,更多相关《交通灯设计82558254附连线图和源代码.docx(35页珍藏版)》请在冰豆网上搜索。
交通灯设计82558254附连线图和源代码
西安郵電學院
硬件课程设计报告
题目:
微机原理与接口课程设计
院系名称:
计算机学院
专业名称:
软件工程
班级:
软件0802
*******
学号(8位):
********
******
设计起止时间:
2011年05月23日~2011年05月27日
一、设计目的
通过可编程并行接口芯片8255A和可编程定时器/计数器芯片8253/8254以及中断控制器8259实现十字路口交通灯的模拟控制,进一步掌握并行接口和定时器/计数器及数码管控制的实际应用。
二、设计内容
1.用试验台提供的发光二极管(红绿黄各两支,共六支)作为南北路口(红绿黄各一支)和东西路口(红绿黄各一支)的模拟交通灯。
2.用可编程并行接口芯片8255A控制模拟交通灯的亮与灭和数码管的倒计时显示。
3.用可编程定时器/计数器芯片8253实现模拟交通灯亮与灭的时间延迟控制。
4.用数码管作为模拟交通灯亮与灭的时间延迟控制的倒计时显示。
5.用汇编语言编程使六个灯按交通灯变化规律“亮/灭”。
交通灯变化规律要求:
①南北路口的绿灯,东西路口的红灯同时亮30秒,且数码管30秒倒计时显示。
②南北路口的黄灯闪烁3秒(三亮三灭),同时东西路口的红灯继续亮,且数码管3秒倒计时显示。
③南北路口的红灯,东西路口的绿灯同时亮20秒,且数码管20秒倒计时显示。
④南北路口的红灯继续亮,同时东西路口的黄灯闪烁3秒(三亮三灭),且数码管3秒倒计时显示。
⑤转①重复
按压“东西紧急键”,则东西方向绿灯,南北方向红灯;再次按压“东西紧急键”,解除东西紧急通行状态。
(“东西紧急键”可是键盘键,亦可是逻辑开关键)
按压“南北紧急键”,则南北方向绿灯,东西方向红灯;再次按压“南北紧急键”,解除南北紧急通行状态。
(“南北紧急键”可是键盘键,亦可是逻辑开关键)
按
备注:
1、按键用8255A芯片的PC口实现或用键盘模拟实现。
2、8253定时到可以通过8259,用中断的方式实现定时器。
3、也可以用软件监测8253计数状态实现定时。
4、也可以用纯软件延时方式实现本题目。
三、概要设计
由于本设计要使用到8254和8255。
因此对其分块实现。
1.流水灯设计:
做该设计是为了熟悉编程环境,并借此熟悉8255的基本工作原理。
功能模块图:
图3-1流水灯功能模块
功能描述:
使SW-LEDUNIT的D0-D7循环被点亮。
2.用8255与LEDKEYBOARDUNIT相连实现八段数码管的静态显示。
功能模块图
图3-2LED静态显示
功能描述:
在程序中给定一位数值,将其显示在LED数码管上。
3.用8255与LEDKEYBOARDUNIT相连实现八段数码管的动态显示
功能模块图:
图3-3LED动态显示
功能描述:
给定一个数值,使其在LED灯上显示,并且是显示两位(视觉效果),然后将该数减一显示,直到减为0。
4.交通灯控制(软延时)
功能模块图:
图3-4交通灯控制
功能描述:
模拟交通灯的实现,是SW-LED上的灯模拟红绿灯,数码管模拟倒计时显示器,先是南北路口绿灯亮,东西路口红灯亮,倒计时30秒,南北路口黄灯亮,东西路口红灯亮,倒计时5秒,南北路口红灯亮,东西路口绿灯亮,倒计时30秒,南北路口红灯亮,东西路口黄灯亮,倒计时5秒,然后不停的循环这四种状态。
可按任意键退出该程序,K0键为东西紧急键,K1为南北紧急键。
按动K0(K0=1)后东西方向一直为绿灯,南北方向一直为红灯,直到再次搬动K0使K0=0时,南北绿灯,东西红灯,恢复上述四种状态的循环。
按动K1使K1=1时,南北一直绿灯,东西一直红灯,知道再次按动K1,使K1=0,使南北红灯,东西绿灯,恢复上述四种状态的循环。
在SW-LEDUNIT中D7、D5、D3分别表示东西方向的红、绿、黄灯,D6、D4、D3分别表示南北方向的红、绿、黄灯。
5.交通灯控制(8254)
这部分的功能模块图与功能描述与上述交通灯控制(软延时)相同,只是实现方式有所不同。
四、详细设计
1、用8255实现流水灯,熟悉8255的使用和工作原理。
在该试验中使8255的A口、B口、C口均工作在输出状态下,让B口与SW-LEDUNIT的D0---D7相连,给B口得初值为FE并输出在LED灯上显示,然后让该值循环右移并显示,在每次输出时,使用软件延时,使灯的每次变换间隔大约为1秒
数据流程图为:
图4-1流水灯数据流程图
2、用8255与LEDKEYBOARDUNIT相连实现八段数码管的静态显示。
实验线路图如下图4-2所示:
图4-2静态显示实验的连线图
共阴极LED数码管字形代码如下表4-2所示:
表4-3共阴极LED数码管字形显示
字形
共阴极字形代码
字形
共阴极字形代码
字形
共阴极字形代码
0
3FH
6
7DH
C
39H
1
06H
7
07H
d
5EH
2
5BH
8
7FH
E
79H
3
4FH
9
6FH
F
71H
4
66H
A
77H
灭
00H
5
6DH
b
7CH
实验步骤:
设计实验线路图如上图4-2所示,完成连接。
编写程序实现将给定数值用LED的前两位显示出来:
8255初始化:
MOVDX,1463H
MOVAL,10000001B;初始化A,B,C口都工作在方式0,都为输出口
OUTDX,AL
LED显示数NUM:
MOVBX,OFFSETTABLE1;取八段数码管表的首地址
MOVAL,NUM
XLAT;查表,找出NUM对应的共阴极字形代码
MOVDX,1461H
OUTDX,AL;将该代码送到B口
打开试验箱电源,进入纯DOS环境运行程序,观察LED数码管显示情况。
实验流程图如下图4-4所示
图4-4静态显示程序数据流程图
3.用8255与LEDKEYBOARDUNIT相连实现八段数码管的动态显示
实验连线图如下图4-5所示:
图4-5动态显示实验的连线图
实验步骤:
设计实验连线图如上图4-5所示,完成连线。
编写程序实现用LED数码管动态显示30—00,先使用软件延时,使其实现30秒得倒计时。
8255初始化:
MOVDX,1463H
MOVAL,10000001B;初始化A,B,C口都工作在方式0,都为输出口
OUTDX,AL
LED动态显示30秒得倒计时:
DISPLYPROC
MOVNUM,25;使十位数与个位数循环交替显示25次
MOVBX,OFFSETTABLE1
SHOW:
MOVAL,NUM1;显示十位数
XLAT;查表
MOVDX,1461H
OUTDX,AL;将该数的LED数码管字形代码送到B口
MOVDX,1460H;接通8段代码管的第一位,在LED上显示十位数
MOVAL,0FEH
OUTDX,AL
CALLDELAY
MOVAL,0FFH
OUTDX,AL
MOVAL,NUM2;显示个位数
XLAT
MOVDX,1461H
OUTDX,AL
MOVDX,1460H;接通8段数码管的第二位
MOVAL,0FDH
OUTDX,AL
DECNUM
JNZSHOW
JMPGWSUB;该数字显示完,对其减一
软延时函数为:
DELAYPROCNEAR;该函数延时次数为500*65535,使用双层循环
MOVCX,500
DELAY0:
MOVNUM3,65535
DELAY1:
DECNUM3
JNZDELAY1
LOOPDELAY0
RET
DELAYENDP
数值减一操作的代码段为:
GWSUB:
;倒计时时各位的递减
CMPNUM2,0
JESWSUB;如果各位减为0,则减十位,再使个位为9
DECNUM2
JMPDISPLY;显示该数
SWSUB:
;倒计时时十位的递减
DECNUM1
CMPNUM1,-1
JELEDCHANGE
MOVNUM2,09H
JMPDISPLY;显示该数
软延时解释:
因为LED灯同一时刻只有一个LED灯可显示,而且显示时间很短以至于用人眼无法察觉其变化,因此显示完十位数和个位数之后延时,同一个数个位十位循环交替显示25次,产生视觉停留效果,使人看起来十位和个位同时显示。
动态显示程序流程图如下图4-6所示:
图4-6动态显示程序流程图
4.交通灯控制(软延时)
实验连线图如下图4-7所示:
图4-7交通灯控制(软延时)连线图
实验步骤:
设计实验连线图如上图4-7所示,完成连线。
编写程序实现交通灯控制,具体实现的功能。
交通灯的四种状态的循环显示:
LEDCHANGE:
;红,绿,黄灯交替显示
DECCONTROL;CONTROL=04H,用来控制灯得状态
CMPCONTROL,03H
JELEDYR;南北黄,东西红
CMPCONTROL,02H
JELEDRG;南北红,东西绿
CMPCONTROL,01H
JELEDRY;南北红,东西黄
CMPCONTROL,00H
JELEDGR;南北绿,东西红
LEDGR:
;初始状态,南北绿,东西红
MOVLEDNUMC,63H
MOVLEDNUMA,0FFH
MOVNUM1,03H
MOVNUM2,00H
MOVCONTROL,04H
JMPLED
LEDYR:
MOVLEDNUMC,73H
MOVLEDNUMA,0BFH
MOVNUM1,00H
MOVNUM2,05H
JMPLED
LEDRG:
MOVLEDNUMC,93H
MOVLEDNUMA,0FFH
MOVNUM1,03H
MOVNUM2,00H
JMPLED
LEDRY:
MOVLEDNUMC,0B3H
MOVLEDNUMA,7FH
MOVNUM1,00H
MOVNUM2,05H
JMPLED
紧急键的控制:
L1:
JMPLEDGR
L2:
JMPLEDRG
EWGPROCNEAR;东西紧急键按下
MOVDX,1462H
MOVLEDNUMC,9FH
MOVAL,LEDNUMC
OUTDX,AL
MOVDX,1460H
MOVLEDNUMA,0FFH
MOVAL,LEDNUMA
OUTDX,AL
MOVDX,1462H;判断东西紧急键是否已结束
INAL,DX
TESTAL,08H
JZL1
JNZEWG
RET
EWGENDP
SNGPROCNEAR;南北紧急键按下
MOVDX,1462H
MOVLEDNUMC,6FH
MOVAL,LEDNUMC
OUTDX,AL
MOVDX,1460H
MOVLEDNUMA,0FFH
MOVAL,LEDNUMA
OUTDX,AL
MOVDX,1462H;判断南北紧急键是否已结束
INAL,DX
TESTAL,04H
JZL2
JNZSNG
RET
SNGENDP
EWG1:
CALLEWG
SNG1:
CALLSNG
EWSNPROC;紧急键的总控函数
MOVDX,1462H
INAL,DX
TESTAL,08H
JNZEWG1
TESTAL,04H
JNZSNG1
RET
EWSNENDP
按任意键退出程序:
DECIDEPROC
MOVAH,0BH;11号功能判断是否有键按下
INT21H
TESTAL,0FFH
JNZEND1
RET
DECIDEENDP
实验流程图,如下图4-8所示:
图4-8交通灯(软延时)流程图
说明:
在上图中为每倒计时一次判断是否有键盘键按下,表示退出,再判断是否有紧急键按下,上图比较简单。
5.交通灯控制(硬件延时--8254)
8255实验连线图如上图4-7所示。
8254实验连线图如下图4-9所示:
图4-9交通灯控制8254连线图
实验步骤:
设计实验连线图如上图4-6和4-8所示,完成连线。
更改交通灯控制实验(软件延时)的软延时为硬件延时,使用8254实现倒计时中的延时。
8254的计数初值为:
输入频率/输出频率,本实验要求实现1秒的延时,即OUT输出频率为1秒一次,因此计数初值n=fclk0/fout0=1khz/1hz=1000。
选择8254的0号端口,工作在方式0。
8254的初始化为:
;8254初始化程序段
MOVDX,1443H
MOVAL,00110001B
OUTDX,AL
MOVDX,1440H
MOVAL,00;写入技术初值1000
OUTDX,AL
MOVAL,10
OUTDX,AL
8254的定时,在交通灯控制程序中的应用(更换上述交通灯控制软延时实现方式中的软延时)程序段为:
MOVDX,1462H
INAL,DX
TESTAL,03H
JZSHOW
MOVDX,1440H
MOVAL,00
OUTDX,AL
MOVAL,10
OUTDX,AL
JMPGWSUB
8254控制倒计时的流程图如下图4-10所示:
图4-108254控制倒计时的流程图
五.测试数据及运行结果
正常测试数据1:
红绿灯显示时间为30秒,黄灯为5秒
运行结果1:
东西方向红灯(D7)亮,南北方向绿灯(D4)亮,倒计时30秒,30秒倒计时结束后,东西方向红灯(D7)亮,南北方向黄灯(D2)亮,倒计时5秒,5秒倒计时结束后,东西方向绿灯(D5)亮,南北方向红灯(D6)亮,倒计时30秒,30秒倒计时结束后,东西方向黄灯(D3)亮,南北方向红灯(D6)亮,倒计时5秒,5秒倒计时结束后,一直重复上述的状况,在这中间如果将K0键推上去,则东西绿灯(D5)亮,南北方向红灯(D6)亮,不进行倒计时,及LED数码管不亮。
将K0键推下来,则恢复上述的循环状态,从东西方向红灯(D7)亮,南北方向绿灯(D4)亮开始。
若将K1推上去,则南北方向绿灯(D4)亮,东西方向红灯(D7)亮,不进行倒计时,将K1键推下来,则恢复上述的循环状态,从则东西绿灯(D5)亮,南北方向红灯(D6)亮开始。
若K0和K1都推上去,则按K0紧急键处理,当K0推下来,K1还未退下来,则处理K1紧急键。
在这过程中,如果键盘有任意键按下,则退出整个程序。
正常测试数据2:
红绿灯显示时间为10秒,黄灯为5秒
运行结果:
类似上述运行结果,只是将30倒计时改为10倒计时。
正常测试数据3:
红绿灯显示时间为5秒,黄灯为3秒
运行结果:
类似上述运行结果,只是将30倒计时改为5倒计时,5秒倒计时改为3秒倒计时。
不正常测试数据1:
红绿灯显示时间为-1秒,黄灯为5秒
运行结果:
程序会出错,因为在LED数码管字形代码表中无对应的负数。
不正常测试数据2:
红绿灯显示时间为J,黄灯为5秒
运行结果:
程序会出错,因为在LED数码管字形代码表中无对应的J字母。
六.调试情况,设计技巧及体会
调试情况:
1.流水灯实验中遇到的问题是灯不闪烁。
原因是:
延时时间太短以至灯得闪烁过快,肉眼无法察觉。
2.八段数码管中遇到的问题是不知该如何实现让两位数同时显示。
解决方法:
使同一个数值的个位数与十位数交替显示产生视觉欺骗效果。
在单步调试时发现个位数会在十位显示一遍,然后十位灭再在个位显示。
原因:
先显示十位数时已将第一位的LED数码显示管接通,因此在显示完十位数后,便立即关闭显示十位数的数码管,个位同样,显示完后立即关闭。
3.使用8254定时时时间间断过短,不足一秒。
原因是在判断是否有输出时出现逻辑错误,已改正。
4.东西,南北紧急键及按任意键结束的反应又是会有点慢,原因:
对这三种情况的判断是现在一个较大的循环外面,因此当按键离巡行到该循环之间要执行的程序段过长时,反应会稍微慢点。
体会:
通过本次微机原理与接口的实验,使我更清楚,更深层的了解了8255和8254的工作原理。
并且更加熟悉汇编语言的编写。
七.参考文献
《微机接口技术试验指导书》
《微机接口技术及其应用》
八.附录:
源代码(电子版)
以下为本实验的完整电路来连线图和程序:
;PORT-BEQU1441H
DATASEGMENT
;0123456789
TABLE1DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
NUMDW?
;循环显示的控制数
NUM1DB?
;十位数的显示
NUM2DB?
;个位数的显示
NUM3DB?
;延时时间控制数
CONTROLDB?
LEDNUMADB?
;用来控制东西,南北方向的红绿灯显示情况
LEDNUMCDB?
;GRDB06FH;南北路口绿灯亮,东西路口红灯亮
;YRDB07BH;
;RGDB09FH
;RYDB0B7H
TIMEDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
;8255初始化程序段0
MOVDX,1463H
MOVAL,10000001B;初始化A口,B口,C口高四位都工作在方式0,都为输出口,C口低四位为输入口
OUTDX,AL
;---------------------------------------------------------------
;8254初始化程序段
MOVDX,1443H
MOVAL,00110001B
OUTDX,AL
MOVDX,1440H
MOVAL,00
OUTDX,AL
MOVAL,10
OUTDX,AL
;---------------------------------------------------------------
MOVNUM1,03H
MOVNUM2,00H
MOVLEDNUMC,63H;东西方向的红灯,南北方向绿
MOVLEDNUMA,0FFH
MOVCONTROL,04H
LED:
MOVDX,1462H;LED灯显示初始化,显示东北方向的红灯
MOVAL,LEDNUMC
OUTDX,AL
MOVDX,1460H
MOVAL,LEDNUMA
OUTDX,AL
CALLDISPLY
GWSUB:
;倒计时时各位的递减
CMPNUM2,0
JESWSUB
DECNUM2
JMPDISPLY
SWSUB:
;倒计时时十位的递减
DECNUM1
CMPNUM1,-1
JELEDCHANGE
MOVNUM2,09H
JMPDISPLY
LEDCHANGE:
;红,绿,黄灯交替显示
DECCONTROL
CMPCONTROL,03H
JELEDYR
CMPCONTROL,02H
JELEDRG
CMPCONTROL,01H
JELEDRY
CMPCONTROL,00H
JELEDGR
JMPEND1
LEDGR:
MOVLEDNUMC,63H
MOVLEDNUMA,0FFH
MOVNUM1,03H
MOVNUM2,00H
MOVCONTROL,04H
JMPLED
LEDYR:
MOVLEDNUMC,73H
MOVLEDNUMA,0BFH
MOVNUM1,00H
MOVNUM2,05H
JMPLED
LEDRG:
MOVLEDNUMC,93H
MOVLEDNUMA,0FFH
MOVNUM1,03H
MOVNUM2,00H
JMPLED
LEDRY:
MOVLEDNUMC,0B3H
MOVLEDNUMA,7FH
MOVNUM1,00H
MOVNUM2,05H
JMPLED
END1:
MOVAH,4CH
INT21H
DECIDEPROC;按任意键退出函数
MOVAH,0BH
INT21H
TESTAL,0FFH
JNZEND1
RET
DECIDEENDP
DELAYPROCNEAR;延时函数
MOVCX,500
DELAY0:
MOVNUM3,65535
DELAY1:
DECNUM3
JNZDELAY1
LOOPDELAY0
RET
DELAYENDP
L1:
JMPLEDGR
L2:
JMPLEDRG
EWGPROCNEAR;东西紧急键(K0)处理函数
MOVDX,1462H
MOVLEDNUMC,9FH
MOVAL,LEDNUMC
OUTDX,AL
MOVDX,1460H
MOVLEDNUMA,0FFH
MOVAL,LEDNUMA
OUTDX,AL
MOVDX,1462H
INAL,DX
TESTAL,08H
JZL1
JNZEWG
RET
EWGENDP
SNGPROCNEAR;南北紧急键(K1)处理函数
MOVDX,1462H
MOVLEDNUMC,6FH
MOVAL,LEDNUMC
OUTDX,AL
MOVDX,1460H
MOVLEDNUMA,0FFH
MOVAL,LEDNUMA
OUTDX,AL
MOVDX,1462H
INAL,DX
TESTAL,04H
JZL2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 设计 82558254 线图 源代码