多路流水灯的控制程序设计Word文档下载推荐.docx
《多路流水灯的控制程序设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《多路流水灯的控制程序设计Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
1.4学习程序设计的基本思路和方法。
2、设计要求
2.1以8086CPU为核心、并行接口芯片8255A和3个逻辑电平开关设计——多路流水灯控制程序;
2.2该多路流水灯控制程序能实现模拟水滴下落、左向移动流水灯和右向移动流水灯三种不同的模拟流水形式;
2.3该多路流水灯控制程序在输入有效代码时才能产生所需的流水形式,否则,小灯全灭。
3、设计思路
总体方案设计分析
在本实验中要求用8255A的B口做为输出,接8个发光二极管,从而实现8位流水灯的显示效果,故基本的接线可以如下面图2所示。
在C口的低三位接3个开关,实现3个扩展功能的控制,在PC0-PC7口分别对应的接八个发光二极管。
3.1模拟水滴下落
(1)现象
模拟水滴下落分为两个过程:
其一,水滴形成(渐变效果),即最左位的小灯的亮度逐渐增强;
其二,水滴掉下(加速与拖尾效果),即小灯移动的速度逐渐加快以及渐隐效果。
(2)原理
水滴形成是在一个周期内,我们可以调节亮和灭的时间,达到调节亮度的目的。
因为一次亮灭为一个周期,由于人眼对时间的分辨率有限,变化较快的的闪烁频率无法识别,只要周期够短,人眼就看不出闪烁了。
因此利用此原理,亮的时间长一点,灭的时间短一点,看起来就亮一些,否则就暗一些从而实现渐变的效果及水滴的形成,给人的感觉是D0位小灯的亮度逐渐增大。
水滴掉下过程是首先定义一些时间数组,然后通过数组所定义的时间的逐渐变化来使硬件产生小灯的加速移动的效果。
拖尾效果是首先定义一些时间数组,然后通过数组所定义的时间的逐渐变化来使硬件产生小灯的渐隐的效果。
3.2左向移动流水灯
左向移动流水灯的实验现象是首先最左边的灯亮,然后是最左边的灯灭,此时左起第二个灯亮,依次轮流亮,直到第八个灯亮。
然后循环上述过程。
左向移动流水灯是根据发光二极管的显示原理,首先点亮最右的二极管,然后进位置一,通过带进位的循环左移指令编写程序以实现模拟流水灯的左向移动。
3.3右向移动流水灯
右向移动流水灯的实验现象是首先最右边的灯亮,然后是最右边的灯灭,此时右起第二个灯亮,依次轮流亮,直到第八个灯亮。
右向移动流水灯是根据发光二极管的显示原理,首先点亮最左的二极管,然后进位置一,通过带进位的循环右移指令编写程序以实现模拟流水灯的右向移动。
4、电路及连线设计
图4.1系统逻辑框图
图4.2系统硬件连接图
图4.38255A与8086CPU连接及外部接线图
图4.48255A与LED及开关的连接及外部接线图
5、程序设计
5.1主程序流程
图5.1主程序流程图
5.2子程序流程图
(1)模拟水滴子程序
水滴形成(渐变效果):
图5.2水滴形成过程子程序图
水滴掉下(加速与拖尾效果):
图5.3水滴掉下过程子程序图
(2)左向移动流水灯
图5.4左向移动流水灯子程序图
(3)右向移动流水灯
图5.5左向移动流水灯子程序图
5.3源程序设计(见附录)
5.4仿真实物连接图
图5.6硬件仿真图
6、设计总结
这次微机原理课程设计我学到了很多在书本上所没有学到过的知识。
以前在上课的时候对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以及当寄存器不够用时如何用存储单元代替寄存器、怎么去使用循环嵌套、怎么去正确使用8255芯片等方面都有了很大程度的提高。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,但总的来说还是圆满的
7、参考文献
[1]楼顺天,周佳社.微机原理与接口技术[M].北京:
科学出版社,2006:
25-71,163-164,295-305
[2]周明德.微机原理与接口技术[M].北京:
人民邮电出版社,2007.225-243
附录:
CODESEGMENT
ASSUMECS:
CODE
ORG11e0H
START:
JMPSTART0
IOCONPTEQU0FF2BH
IOAPTEQU0FF28H
IOBPTEQU0FF29H
IOCPTEQU0FF2AH
BUFDB?
?
DATA0:
DB00H,01H,02H,04H,06H,10H,20H,40H;
亮度数组以实现拖尾效果
DATA1:
DB00H,22H,30H,3BH,44H,4CH,54H,5BH,61H,67H,6AH,72H,77H,7BH,7EH;
时间数组以实现加速效果
DATA2:
DB7H,6H,5H,4H,3H,2EH,1H,00H,8H,9H,0AH,0BH,0CH,0DH,0EH,0FH
START0:
MOVAL,81H;
写8255A方式控制字
MOVDX,IOCONPT
OUTDX,AL
MO:
MOVDX,IOCPT;
检测开关信号
INAL,DX
CMPAL,01H;
检测按键1是否被按下
JZK1
CMPAL,02H;
检测按键2是否被按下
JZK2
CMPAL,04H;
检测按键3是否被按下
JZK3
JMPTHEEND;
检测是否按键1,2,3均未被按下
K1:
JMPL1
K2:
JMPL2
K3:
JMPL3
L1:
MOVDX,IOBPT
MOVAL,0FFH
OUTDX,AL
LL1:
XORDX,DX
XORBX,BX
MOVCX,0FDH
L1_0:
;
水滴形成(渐变效果)
PUSHAX;
嵌套循环来控制灯亮灭的时间
PUSHDX;
使实现模拟水滴形成的渐变效果
MOVDL,4;
即感觉D0位小灯的亮度逐渐增大
MOVAX,BX
DIVDL
MOV[SI+6],AH;
判断BX除以4后的余数是否为0,
POPDX;
若不为0则调转到L1_1
POPAX
CMP[SI+6],00H
JNZL1_1
INCDL
L1_1:
PUSHCX
PUSHBX
XORBX,BX
MOVCX,11H
L1_100:
MOVDX,IOBPT;
从B口输出7FH
MOVAL,7FH
MOVCX,41H
L1_2:
CMPBL,DL
JNZL1_22
从B口输出0FFH
L1_22:
INCBL
LOOPL1_2;
第三次循环
POPBX
POPCX
LOOPL1_100;
第二次循环
POPCX
L1_00:
LOOPL1_0;
第一次循环
水滴形成(渐变效果)程序结束,水滴掉下(加速与拖尾效果)
PUSHCX;
保护现场
PUSHBX
MOVCX,0FFH
L1_3:
;
MOVSI,4000H;
使实现模拟水滴的加速掉下及拖尾效果
PUSHAX
MOVAX,00H
MOV[SI],AX
MOV[SI+2],AX;
存储单元清零
MOV[SI+4],AX
POPAX
PUSHCX;
PUSHDX
XORDX,DX
MOVCX,10H
L1_4:
PUSHAX;
保护现场,依次取DATA1的内容
MOVBX,OFFSETDATA1
ADDBX,DX
MOVAL,[BX]
CMPBL,AL
POPAX
JNZL1_40
依次取DATA2的内容
MOVBX,OFFSETDATA2
MOV[SI+2],AL
L1_40:
INCDX
LOOPL1_4
POPBX
XX:
MOVCX,041H
L1_5:
MOVCX,08H
L1_6:
PUSHBX;
依次取DATA0的内容
MOVBX,OFFSETDATA0
MOVAX,[BX]
CMPBX,AX
JNZL1_60
MOVCL,DL
MOVBX,1
SHLBX,CL
OR[SI],BX
MOVAX,[SI]
NOTAX
MOV[SI],AX
MOV[SI+4],AX
PUSHAX
MOVAX,[SI+2]
CMPAX,08H
JNAL1_600
PUSHAX;
MOVAX,[SI+4]
MOVCL,[SI+2]
SUBCL,8H
SHLAX,CL
NOTAX
MOVDX,IOBPT;
从B口输出
POPCX;
恢复现场
L1_600:
保护现场
PUSHCX
MOVCX,[SI+2]
SHRAX,CL
POPCX
NOTAX
MOVDX,IOBPT;
POPAX;
L1_60:
LOOPT2
T2:
JMPL1_6
POPDX;
INCBX
LOOPT1
POPBX;
T1:
JMPL1_5
INCBX
T3:
JMPL1
RET;
水滴掉下(加速与拖尾效果)程序结束
L2:
;
模拟流水灯左移
MOVDX,IOBPT;
设置B口输出
STC;
进位置1
MOVAL,0FEH
L2_0:
OUTDX,AL;
B口输出
RCLAL,1;
AL带进位左移一位
CALLDELAY;
调用延时子程序
JMPL2_0
RET
L3:
MOVAL,07FH;
进位置1
L3_0:
RCRAL,1;
JMPL3_0
DELAY:
;
延时子程序
MOVCX,0030H
DEALY_1:
CALLDELAY_2
LOOPDEALY_1
RET
DELAY_2:
MOVCX,100H
DELAY_3:
LOOPDELAY_3
THEEND:
MOVAL,00H;
无有效按键时输出
MOVDX,IOBPT
OUTDX,AL
JMPMO
CODEENDS
ENDSTART