“霓虹灯”的模拟显示程序_第1页
“霓虹灯”的模拟显示程序_第2页
“霓虹灯”的模拟显示程序_第3页
“霓虹灯”的模拟显示程序_第4页
“霓虹灯”的模拟显示程序_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 题 目: “霓虹灯”的模拟显示程序 初始条件:在屏幕中央以字符显示一矩型,并以*将矩型内部由下到上,从中央到两边填满;然后再按相反的次序消失。按Q退出程序。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 设计任务及要求分析(2) 方案比较及认证说明(3) 系统原理阐述(4) 硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6) 调试记录及结果分析(7) 总结(8) 参考资料(9) 附录:芯片资料或程序清单,软件演示屏

2、幕拷贝图或硬件实物图目 录1.引言12.设计任务及要求分析12.1设计内容:12.2设计要求与分析:23.方案比较及认证说明23.1清屏函数方案23.1.1方案说明23.1.2方案比较及论证43.2字符的显示方案43.2.1方案说明43.2.2方案比较及论证43.3方案选择54.系统原理阐述54.1设计思路54.2程序中的BIOS和DOS功能调用54.2.1 BIOS功能调用54.2.2 DOS功能调用64.3程序模块65. 硬件设计课题说明86.软件设计课题说明106.1程序功能描述106.2 流程图107.调试记录及结果分析137.1调试过程137.2调试结果147.3调试中出现的问题及解

3、决方法168. 总结169.参考资料1610.附录 源程序清单17“霓虹灯”的模拟显示程序1.引言霓虹灯的千变万化是装点人们生活的不二之选,我们可以通过汇编语言对霓虹灯的闪烁进行控制,实现霓虹灯闪烁的任意控制。通过本学期对微机原理与接口技术的学期,我掌握了汇编语言的基本应用。汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言,汇编语言对于硬件的控制具有独特的优势。本次课程设计通过汇编语言,实现霓虹灯的控制与操作,实现其显示与闪烁,或者是其他的动态变化,从而可以很方便的达到理想效果。INT 10H 是 BIOS 中断调用的第10H功能的简写在基于,对屏幕及显示

4、器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内。汇编语言的INT 10号中断提供了设置显示模式、设置颜色模式、设置光标位置、按指定属性显示字符等功能,可以显示汉字或图像,同时也提供了初始化屏幕或滚屏等功能号,通过擦除子程序以及清屏子程序的配合运用,可以达到让汉字或图像闪烁或运动的功能。而文字的显示我们又可以通过取模软件轻松获得,这使得整个编译过程轻松了很多,同时可以让文字或图标的显示更加规范和多样化,达到霓虹灯多样变化的目的。本次微机原理与接口技术课程设计是要设计一个“霓虹灯”的模拟显示程序。本次课程设计用的是8086最小系统,在MF2

5、KI汇编集成环境下完成。该课程的总体任务是一个接一个的执行的,属于单任务顺序结构,所以该任务主要用汇编语言进行顺序和循环的逻辑结构编写。 2.设计任务及要求分析2.1设计内容:在屏幕中央以字符显示一矩型,并以*将矩型内部由下到上,从中央到两边填满;然后再按相反的次序消失。按Q退出程序。2.2设计要求与分析:(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或

6、硬件实物图首先根据课设题目的要求找出需要调用的各个DOS和BIOS调用,然后对程序中最重要的DOS调用和BIOS调用进行的方案比较。之后根据课设题目要求设计整个顺序结构的程序框架,然后运用模块化的设计思想,将题设要求分成几个小的模块,一段一段的设计程序。然后分段对程序进行编写和调试,当各个模块调试好后,再整体调试。最后观察整体程序结构的现象,进行总结并对某些部分进行完善。在本课设里,我在完成任务之外,在程序的开始加了一个欢迎界面,这样在程序结果的演示中给人一种美感。3.方案比较及认证说明3.1清屏函数方案3.1.1方案说明方案一:运用BIOS功能的7号调用,程序设计如下CLEAR PROC N

7、EARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV AH,07 ;屏幕初始化或下卷MOV AL,25 ;下卷行数MOV BH,0F0H ;卷入行属性MOV CH,0 ;左上角行号MOV CL,0 ;左上角列号MOV DH,24 ;右下角行号MOV DL,79 ;右下角列号 INT 10HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETCLEAR ENDP方案二:运用BIOS功能的6号调用,程序设计如下CLEAR PROC NEAR MOV AH,06H MOV AL,0MOV CH,0 MOV CL,0MOV DH,2

8、4MOV DL,79MOV BH,07HINT 10HRETCLEAR ENDP3.1.2方案比较及论证在第一个程序中,使用的寄存器较多,操作较为复杂。但是清屏时可以将DOS窗口背景改为白色,这便于截图与报告的撰写。第二个程序操作起来相对简单,但是只能让屏幕背景为黑色。3.2字符的显示方案3.2.1方案说明方案一:运用DOS功能的2号调用,程序的设计如下MA ROW,COLUME ;MA是个宏定义光标位置MOV AH,02HMOV DL,INT 21H方案二:运用BIOS功能的9号调用,程序设计如下CALL CURSOR ;调用光标设置子程序MOV AL,23HMOV BL,0BHPUSH C

9、X ;CX进栈MOV CX,1MOV AH,09HINT 10HPOP CX;CX出栈3.2.2方案比较及论证方案一无法设置字符的属性,同时还会在下个坐标位置显示光标,影响光看者的视觉享受。但是显示方式很简洁很直观很容易记忆理解,若要配合背景为白色,选择该方案为好。方案二功能更加完备,更能实现霓虹灯的颜色变化显示效果,但是设计起来占用寄存器较多,略微复杂点,其设置的背景只能为黑色。3.3方案选择从上面的分析比较,清屏函数方案一和显示字符方案一搭配起来的可行性和实际达到的效果更好。所以选择清屏函数方案一和显示字符方案一来实现霓虹灯的功能。4.系统原理阐述4.1设计思路(1)执行程序时显示一个欢迎

10、界面,提示按大写S键进入显示界面(2)执行程序这部分程序运用的主要原理是先在屏幕上显示个字符()号,再执行循环,语句显示一行(列)()字符。利用像这样的原理实现矩形框的完成和内部的填充。至于反向消失部分,用空格代替想要显示的字符,反向执行循环,就可以实现字符的消失了。(3)霓虹灯显示完毕,提示输入Q退出界面。4.2程序中的BIOS和DOS功能调用4.2.1 BIOS功能调用(1)设置光标位置(2号功能)入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。出口参数:无。根据DX确定了光标位置。(2)初始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上

11、角的行、列号。DX=上滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,底部为空白输入行(3)初始窗口或向下滚动(7号功能)入口参数:AH=7,AL=下滚行数,CX=下滚窗口左上角的行、列号。DX=下滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,顶部为空白输入行。(4)在当前光标位置写字符和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符数。出口参数:无。4.2.2 DOS功能调用(1)键盘输入一个字符并回显(1号功能) 输入参数无,返回结果AL字符(2)显示字符串,光标跟谁字符串移动(9号功能)D

12、S:DX待显字符串的首地址字符串以$结尾。(3)显示一个字符,光标跟随字符移动(2号功能) DL=待显字符的ASCII码,无返回结果。4.3程序模块(1)宏定义光标位置 MA MACRO OP1,OP2 ;宏定义光标位置 PUSH AX ;现场保护 PUSH BX MOV AH,02H MOV BH,0 ;页号 MOV DH,OP1 ;行号 MOV DL,OP2 ;列号 INT 10H POP BX POP AX ENDM 这个子程序的重点是设计光标所在页、行、列及其现场保护。使用了BIOS功能调用设置光标的位置。(2)清屏子程序 CLEAR PROC NEAR ;清屏 PUSH AX PUS

13、H BX PUSH CX PUSH DX PUSH SI PUSH DI MOV AH,07 ;屏幕初始化或下卷 MOV AL,25 ;下卷行数 MOV BH,0F0H ;卷入行属性 MOV CH,0 ;左上角行号 MOV CL,0 ;左上角列号 MOV DH,24 ;右下角行号 MOV DL,79 ;右下角列号 INT 10H POP DI POP SI POP DX POP CX POP BX POP AX RETCLEAR ENDP初始化窗口,AL=0表示全屏滚动,CH=滚动窗口左上角行号,CL=滚动窗口左上角列号,DH=滚动窗口右下角行号,DL=滚动窗口右下角列号,BH=滚入行的属性。

14、(3)光标的设置CURSOR PROC NEAR ;光标的设置 MOV AH,02H MOV BH,0 MOV DH,ROW ;设置行 MOV DL,COLUME ;设置列 INT 10H RET CURSOR ENDP 光标位置的设置,这个子程序与宏定义光标位置类似只是运用有些不同。(4)延时子程序DELAY1 PROC NEAR PUSH CX PUSH DX MOV DX,100 D3: MOV CX,65530 D4: LOOP D4 DEC DX JNZ D3 POP DX POP CX RET DELAY1 ENDP这个子程序写法的关键是现场保护(即进栈出栈),内外两个循环的设计。

15、延时程序的主要目的是可以让我们清楚的看到字符在屏幕上的显示过程。5. 硬件设计课题说明本设计采用8086最小系统,8086CPU引脚介绍如下:AD15 AD0(address data bus):地址/数据总线,双向,三态。A19/S6A16/S3(address/status):地址/状态信号,输出,三态。BHE(低)/S7(bus high enable/status):允许总线高8位数据传送/状态信号,输出,三态。RD/(read):读信号,输出,三态,低电平有效。READY(ready):准备就绪信号,输入,高电平有效。INTR(interrupt request):可屏蔽中断请求信号

16、,输入,高电平有效。TEST/(test):等待测试控制信号,输入,低电平有效。NMI(non-maskable interrupt):非屏蔽中断请求信号,输入,高电平有效。RESET(reset):复位信号,输入,高电平有效。CLK(clock):时钟信号,输入。VCC电源输入引脚。GND:接地引脚。MN/MX/(minimum/maximum):最小/最大模式输入控制信号。当引脚接高电平时,CPU工作于最小模式。此时,引脚信号2431的含义及其功能如下。IO/M/(memory I/O select):存储器、I/O端口选择控制信号。WR/(write):写信号,输出,低电平有效。INTA

17、/(interrupt acknowledge):可屏蔽中断响应信号,输出,低电平有效。ALE(address lock enable):地址锁存允许信号,输出,高电平有效。DT/(data transmit or receive):数据发送/接收信号,输出,三态。DEN/(data enable):数据允许控制信号,输出,三态,低电平有效。HOLD(bus hold request):总线保持请求信号,输入,高电平有效。HLDA(hold acknowledge):总线保持响应信号,输出,高电平有效。 图1 8086引脚图 6.软件设计课题说明6.1程序功能描述 程序开始,进行清屏,显示欢迎

18、界面。按键输入,如果输入S就执行霓虹灯模拟显示在屏幕中央以字符显示一矩形,并以和将矩型内部从左到右,由上到下填满;然后再按相反的次序消失的程序,否则就继续等待输入。霓虹灯模拟显示程序执行完后,显示退出提示,等待Q的输入,如果输入为Q就退出程序,否则就继续等待输入。6.2 流程图程序开始先定义各个端,做好准备工作。进入主程序后,先调用CLEAR清屏子函数进行清屏,然后运用DOS的2号调用显示处预先定义好的输出提示界面,等待字符的输入。若输入字符则检测是否为S,若是则进入下一界面,否则继续等待。程序主流程图开始部分如图1所示。图2 程序开始部分流程图然后用符号布矩形框的左竖行,先确定起始位置,填充

19、一个后,行数自减1,检测行变量是否为0,不为零继续填充,否则换其它行。如程序AB段所示。同理可设计出布矩形框的其它行。程序中布矩形边框的程序流程图如图2所示。图3 布矩形边框程序流程图边框布好后,用*填满矩形框内部。在这里根据题目要求内部填充程序流程图如图3所示。内部填充满后,自动反向消失内部填充的内容。这里使用空格代替*填充再矩形框内部以实现内部反向消失。内部反向消失程序流程图如图4所示。图4 内部反向消失程序流程图内部反向消失后,开始消失矩形边框,首先设定起始位置,将该位置的字符替换为空格后移动光标一个单位,判断一行是否结束,结束后反向消失下一行,否则继续。边框的反向消失程序流程图如图5所

20、示。图5 边框反向消失程序流程图最后显示退出提示界面。若有字符输入,检测是否为Q,不为Q则清屏,然后继续显示该提示界面;否则退出程序。该段程序流程图如图6所示。图6 程序退出界面流程图7.调试记录及结果分析7.1调试过程调试过程主要由编辑、汇编、链接和执行等几个步骤组成。(1) 源程序的编辑:编辑好汇编语言源程序后,保存为.asm文件。(2) 源程序的汇编:调用汇编程序对源程序进行翻译,生成.OBJ的目标文件。在汇编过程中,源程序有错误生不成目标文件,经过多次修改最终生成目标文件。(3) 目标程序的连接:调用链接程序(LINK)将用户目标程序和库文件进行链接、定位,生成.EXE可执行文件。(4

21、) 调试可执行程序:刚开始可执行程序运行之后没有得到预想的结果,又重新检查源程序的算法错误,重新编辑、汇编、链接和执行,得到了预想的结果。7.2调试结果(1) 执行程序时,提示进入界面如下:图7 开始页面(2)输S后,程序执行过程中,在屏幕上显示矩形框、填充及消失如下:图8 布矩形阵图9 填充过程图10 反向消失过程(4) 提示输Q退出界面如下:7.3调试中出现的问题及解决方法问题1:寄存器不够用怎么办?解决方法:这是由于程序结构复杂,使用了太多寄存器,可以定义外部变量来解决。问题2:寄存器值变化多端怎么办?解决方法:使用堆栈进行现场保护。使用时应注意push,pop的成对使用,不要遗忘pop

22、同时还要注意堆栈的先入后出的规律。8. 总结 通过这次的课程设计,让我对一学期所学的知识进行了回顾,同时通过查阅书籍和网上的资料获得了很多新的知识。在学期初开始学微机原理与接口技术这一门课时,我就觉得比较吃力,这是是一门很抽象的学科,学起来也比较乏味。不仅需要我们对知识理解,更重要的是要将芯片已经编程指令集熟练记忆和应用。在这次课程设计中,让我巩固了以前学过的一些基本的指令;更加学习掌握了汇编语言的一些基本的中断调用功能。在开始设计时,我毫无头绪,所以我选择在网上搜集相关资料进行学习,通过对往届学长学姐所做的设计的学习,我确定了运用中断调用进行设计的方向,认真研究学习了汇编语言一些基本的中断调

23、用。读懂原有程序并在其基础上进行修改。在调试过程中,我不断对程序进行修改、改进,增强了自己分析问题、解决问题的能力;也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器、存储器等工作原理以及一些指令执行后对它们的改变,例如INT指令会改变AL的值,在编程时应注意这方面的问题。总之,这次课程设计我锻炼了动手能力,熟悉了汇编的编程环境,并巩固了课程相关知识,收益很多。实践出真知,在课程设计中不忘在小处创新,希望在下一次课程设计中能有更大的突破!9.参考资料1 汤书森.微机原理接口技术实验于实践教程.北京:清华大学出版社,20082 余朝琨.IBM-PC汇编语言程序设

24、计.北京:机械工业出版社. 20083 宋江.微机原理与接口技术.北京:机械工业出版社. 20054 金泉涌.微型计算机应用经验汇编.北京:清华大学出版社,20075 沈美玲.IBM-PC汇编语言程序设计.北京:清华大学出版社,19936 吴耿峰.十六位微型计算机原理接口及应用.北京:高等教育出版.20047 戴梅萼.微型计算机技术与应用.北京:清华大学出版社. 19928 罗省贤汇编语言程序设计教程北京:电子工业出版社,20049 吴向军汇编语言程序设计北京:高等教育出版社,200810.附录 源程序清单MA MACRO OP1,OP2 ;宏定义光标位置PUSH AX PUSH BX MOV

25、 AH,02H MOV BH,0 ;页号 MOV DH,OP1 ;行 MOV DL,OP2 ;列INT 10H POP BX POP AX ENDM STACK SEGMENT PARA STACK Stack ;定义数据段 STACK ENDS DATASEG SEGMENT PARA Data ;定义堆栈段ROW DB ?COLUME DB ?COUNT DB ?COUNT1 DB ? CT DB ?MENU DB *,0dh,0ah DB * *,0dh,0ah DB * welcome you ! *,0dh,0ah DB * *,0dh,0ah DB * programme of d

26、isplalying neon lamp *,0dh,0ah DB * *,0dh,0ah DB * please press S to enter *,0dh,0ah DB * and then press Q to exit ! *,0dh,0ah DB * MADE BY Bao Gang *,0dh,0ah DB *$ BUF DB press Q to exit ! $ DATASEG ENDS CODESEG SEGMENT PARA Code ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MAIN PROC FAR MOV AX,DATASEG MO

27、V DS,AX CALL CLEAR ;调用清屏子程序 MA 8,0 ;欢迎界面的出现位置WAT0: LEA DX,MENU ;输入A进入霓虹灯显示 MOV AH,9 INT 21H MOV AH,1 INT 21H CMP AL,S CALL CLEAR ;如果输入的不是S就清屏 MA 8,0 JNZ WAT0 PUSH AX ;入栈 PUSH BX PUSH CX PUSH DX MOV ROW,23 ;完成矩形框的左竖行 MOV COLUME,0 LOP3: CALL CURSOR ;调用设置光标位置 MOV AL,40H ;把#的ASCII 码传递给AL MOV BL,0BH ;设置字

28、符属性 PUSH CX ;入栈 MOV CX,1 ;字符显示1次 MOV AH,09H INT 10H POP CX ;出栈 CALL DELAY1 ;调用延时 DEC ROW ;行坐标减1 CMP ROW,0 ;若行坐标大于0就跳转到lop3否则执行下个程序 JNZ LOP3 MOV ROW,0 MOV COLUME,0 ;完成矩形框的上行LOP1: CALL CURSOR MOV AL,40H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC COLUME CMP COLUME,79 JNZ LOP1

29、 MOV ROW,0 MOV COLUME,79 ;完成矩形框的右竖行LOP2: CALL CURSOR MOV AL,40H ;完成的输出 MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC ROW CMP ROW,23 JNZ LOP2 MOV ROW,23 MOV COLUME,79 ;完成矩形框的下横行 LOP4: CALL CURSOR MOV AL,40H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC

30、COLUME CMP COLUME,0 JNZ LOP4 ;到此矩形框已完成 MOV COUNT1,22 ;矩形框内部填充LOP6: MOV COUNT,39 MOV CH,39 MOV CL,40 LOP5: MA COUNT1,CH ;填充左半段 MOV DL,* MOV AH,02H INT 21H MA COUNT1,CL ;填充右半段 MOV AL,* MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC CH INC CL DEC COUNT CMP COUNT,0 JA LOP5 DEC COU

31、NT1 CMP COUNT1,0 JNZ LOP6 MOV CT,1 ;设置行的初值为1反向消失内部 LOP8: MOV COUNT,39 ;内循环次数 MOV CH,1 MOV CL,78 LOP7: MA CT,CH MOV AL, ;显示空格 MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX MA CT,CL ;设置光标位置 MOV DL, MOV AH,02H INT 21H CALL DELAY1 INC CH DEC CL DEC COUNT CMP COUNT,0 JNZ LOP7 INC CT CMP CT,23 JNZ

32、 LOP8 MOV CL,1 ;消失矩形框左竖行LOP10: MA CL,0 MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC CL CMP CL,23 JNZ LOP10 MOV CL,0 ;消失矩形框下行LOP9: MA 23,CL MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC CL CMP CL,79 JNZ LOP9 MOV CL,23 ;消失矩形框右竖行LOP11: MA CL,79 MOV AL, MOV BL,0BH PUSH CX M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论