霓虹灯的模拟显示程序DOC.docx
- 文档编号:23564442
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:33
- 大小:304.49KB
霓虹灯的模拟显示程序DOC.docx
《霓虹灯的模拟显示程序DOC.docx》由会员分享,可在线阅读,更多相关《霓虹灯的模拟显示程序DOC.docx(33页珍藏版)》请在冰豆网上搜索。
霓虹灯的模拟显示程序DOC
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
“霓虹灯”的模拟显示程序
初始条件:
在屏幕中央以@字符显示一矩型,并以*将矩型内部由下到上,从中央到两边填满;然后再按相反的次序消失。
按Q退出程序。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)设计任务及要求分析
(2)方案比较及认证说明
(3)系统原理阐述
(4)硬件设计课题需要说明:
硬件原理,电路图,采用器件的功能说明
(5)软件设计课题需要说明:
软件思想,流程图,源程序及程序注释
(6)调试记录及结果分析
(7)总结
(8)参考资料
(9)附录:
芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图
目录
1.引言1
2.设计任务及要求分析1
2.1设计内容:
1
2.2设计要求与分析:
2
3.方案比较及认证说明2
3.1清屏函数方案2
3.1.1方案说明2
3.1.2方案比较及论证4
3.2字符的显示方案4
3.2.1方案说明4
3.2.2方案比较及论证4
3.3方案选择5
4.系统原理阐述5
4.1设计思路5
4.2程序中的BIOS和DOS功能调用5
4.2.1BIOS功能调用5
4.2.2DOS功能调用6
4.3程序模块6
5.硬件设计课题说明8
6.软件设计课题说明10
6.1程序功能描述10
6.2流程图10
7.调试记录及结果分析13
7.1调试过程13
7.2调试结果14
7.3调试中出现的问题及解决方法16
8.总结16
9.参考资料16
10.附录源程序清单17
“霓虹灯”的模拟显示程序
1.引言
霓虹灯的千变万化是装点人们生活的不二之选,我们可以通过汇编语言对霓虹灯的闪烁进行控制,实现霓虹灯闪烁的任意控制。
通过本学期对《微机原理与接口技术》的学期,我掌握了汇编语言的基本应用。
汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言,汇编语言对于硬件的控制具有独特的优势。
本次课程设计通过汇编语言,实现霓虹灯的控制与操作,实现其显示与闪烁,或者是其他的动态变化,从而可以很方便的达到理想效果。
INT10H是BIOS中断调用的第10H功能的简写在基于,对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在INT10H内。
汇编语言的INT10号中断提供了设置显示模式、设置颜色模式、设置光标位置、按指定属性显示字符等功能,可以显示汉字或图像,同时也提供了初始化屏幕或滚屏等功能号,通过擦除子程序以及清屏子程序的配合运用,可以达到让汉字或图像闪烁或运动的功能。
而文字的显示我们又可以通过取模软件轻松获得,这使得整个编译过程轻松了很多,同时可以让文字或图标的显示更加规范和多样化,达到霓虹灯多样变化的目的。
本次微机原理与接口技术课程设计是要设计一个“霓虹灯”的模拟显示程序。
本次课程设计用的是8086最小系统,在MF2KI汇编集成环境下完成。
该课程的总体任务是一个接一个的执行的,属于单任务顺序结构,所以该任务主要用汇编语言进行顺序和循环的逻辑结构编写。
2.设计任务及要求分析
2.1设计内容:
在屏幕中央以@字符显示一矩型,并以*将矩型内部由下到上,从中央到两边填满;然后再按相反的次序消失。
按Q退出程序。
2.2设计要求与分析:
(1)设计任务及要求分析
(2)方案比较及认证说明
(3)系统原理阐述
(4)硬件设计课题需要说明:
硬件原理,电路图,采用器件的功能说明
(5)软件设计课题需要说明:
软件思想,流程图,源程序及程序注释
(6)调试记录及结果分析
(7)总结
(8)参考资料
(9)附录:
芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图
首先根据课设题目的要求找出需要调用的各个DOS和BIOS调用,然后对程序中最重要的DOS调用和BIOS调用进行的方案比较。
之后根据课设题目要求设计整个顺序结构的程序框架,然后运用模块化的设计思想,将题设要求分成几个小的模块,一段一段的设计程序。
然后分段对程序进行编写和调试,当各个模块调试好后,再整体调试。
最后观察整体程序结构的现象,进行总结并对某些部分进行完善。
在本课设里,我在完成任务之外,在程序的开始加了一个欢迎界面,这样在程序结果的演示中给人一种美感。
3.方案比较及认证说明
3.1清屏函数方案
3.1.1方案说明
方案一:
运用BIOS功能的7号调用,程序设计如下
CLEARPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
MOVAH,07;屏幕初始化或下卷
MOVAL,25;下卷行数
MOVBH,0F0H;卷入行属性
MOVCH,0;左上角行号
MOVCL,0;左上角列号
MOVDH,24;右下角行号
MOVDL,79;右下角列号
INT10H
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
RET
CLEARENDP
方案二:
运用BIOS功能的6号调用,程序设计如下
CLEARPROCNEAR
MOVAH,06H
MOVAL,0
MOVCH,0
MOVCL,0
MOVDH,24
MOVDL,79
MOVBH,07H
INT10H
RET
CLEARENDP
3.1.2方案比较及论证
在第一个程序中,使用的寄存器较多,操作较为复杂。
但是清屏时可以将DOS窗口背景改为白色,这便于截图与报告的撰写。
第二个程序操作起来相对简单,但是只能让屏幕背景为黑色。
3.2字符的显示方案
3.2.1方案说明
方案一:
运用DOS功能的2号调用,程序的设计如下
MAROW,COLUME;MA是个宏定义光标位置
MOVAH,02H
MOVDL,’@’
INT21H
方案二:
运用BIOS功能的9号调用,程序设计如下
CALLCURSOR;调用光标设置子程序
MOVAL,23H
MOVBL,0BH
PUSHCX;CX进栈
MOVCX,1
MOVAH,09H
INT10H
POPCX;CX出栈
3.2.2方案比较及论证
方案一无法设置字符的属性,同时还会在下个坐标位置显示光标,影响光看者的视觉享受。
但是显示方式很简洁很直观很容易记忆理解,若要配合背景为白色,选择该方案为好。
方案二功能更加完备,更能实现霓虹灯的颜色变化显示效果,但是设计起来占用寄存器较多,略微复杂点,其设置的背景只能为黑色。
3.3方案选择
从上面的分析比较,清屏函数方案一和显示字符方案一搭配起来的可行性和实际达到的效果更好。
所以选择清屏函数方案一和显示字符方案一来实现霓虹灯的功能。
4.系统原理阐述
4.1设计思路
(1)执行程序时显示一个欢迎界面,提示按大写S键进入显示界面
(2)执行程序这部分程序运用的主要原理是先在屏幕上显示个字符@(*)号,再执行循环,语句显示一行(列)@(*)字符。
利用像这样的原理实现矩形框的完成和内部的填充。
至于反向消失部分,用空格代替想要显示的字符,反向执行循环,就可以实现字符的消失了。
(3)霓虹灯显示完毕,提示输入Q退出界面。
4.2程序中的BIOS和DOS功能调用
4.2.1BIOS功能调用
(1)设置光标位置(2号功能)
入口参数:
AH=2(功能号),BH=页号,DH=行号,DL=列号。
出口参数:
无。
根据DX确定了光标位置。
(2)初始窗口或向上滚动(6号功能)
入口参数:
AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号。
DX=上滚窗口右下角的行、列号。
BH=空白行的属性。
出口参数:
无。
当滚动后,底部为空白输入行
(3)初始窗口或向下滚动(7号功能)
入口参数:
AH=7,AL=下滚行数,CX=下滚窗口左上角的行、列号。
DX=下滚窗口右下角的行、列号。
BH=空白行的属性。
出口参数:
无。
当滚动后,顶部为空白输入行。
(4)在当前光标位置写字符和属性(9号功能)
入口参数:
AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符数。
出口参数:
无。
4.2.2DOS功能调用
(1)键盘输入一个字符并回显(1号功能)
输入参数无,返回结果AL=字符
(2)显示字符串,光标跟谁字符串移动(9号功能)
DS:
DX=待显字符串的首地址字符串以‘$’结尾。
(3)显示一个字符,光标跟随字符移动(2号功能)
DL=待显字符的ASCII码,无返回结果。
4.3程序模块
(1)宏定义光标位置
MAMACROOP1,OP2;宏定义光标位置
PUSHAX;现场保护
PUSHBX
MOVAH,02H
MOVBH,0;页号
MOVDH,OP1;行号
MOVDL,OP2;列号
INT10H
POPBX
POPAX
ENDM
这个子程序的重点是设计光标所在页、行、列及其现场保护。
使用了BIOS功能调用设置光标的位置。
(2)清屏子程序
CLEARPROCNEAR;清屏
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
MOVAH,07;屏幕初始化或下卷
MOVAL,25;下卷行数
MOVBH,0F0H;卷入行属性
MOVCH,0;左上角行号
MOVCL,0;左上角列号
MOVDH,24;右下角行号
MOVDL,79;右下角列号
INT10H
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
RET
CLEARENDP
初始化窗口,AL=0表示全屏滚动,CH=滚动窗口左上角行号,CL=滚动窗口左上角列号,DH=滚动窗口右下角行号,DL=滚动窗口右下角列号,BH=滚入行的属性。
(3)光标的设置
CURSORPROCNEAR;光标的设置
MOVAH,02H
MOVBH,0
MOVDH,ROW;设置行
MOVDL,COLUME;设置列
INT10H
RET
CURSORENDP
光标位置的设置,这个子程序与宏定义光标位置类似只是运用有些不同。
(4)延时子程序
DELAY1PROCNEAR
PUSHCX
PUSHDX
MOVDX,100
D3:
MOVCX,65530
D4:
LOOPD4
DECDX
JNZD3
POPDX
POPCX
RET
DELAY1ENDP
这个子程序写法的关键是现场保护(即进栈出栈),内外两个循环的设计。
延时程序的主要目的是可以让我们清楚的看到字符在屏幕上的显示过程。
5.硬件设计课题说明
本设计采用8086最小系统,8086CPU引脚介绍如下:
⑴AD15~AD0(addressdatabus):
地址/数据总线,双向,三态。
⑵A19/S6~A16/S3(address/status):
地址/状态信号,输出,三态。
⑶BHE(低)/S7(bushighenable/status):
允许总线高8位数据传送/状态信号,输出,三态。
⑷RD/(read):
读信号,输出,三态,低电平有效。
⑸READY(ready):
准备就绪信号,输入,高电平有效。
⑹INTR(interruptrequest):
可屏蔽中断请求信号,输入,高电平有效。
⑺TEST/(test):
等待测试控制信号,输入,低电平有效。
⑻NMI(non-maskableinterrupt):
非屏蔽中断请求信号,输入,高电平有效。
⑼RESET(reset):
复位信号,输入,高电平有效。
⑽CLK(clock):
时钟信号,输入。
⑾VCC电源输入引脚。
⑿GND:
接地引脚。
⒀MN/MX/(minimum/maximum):
最小/最大模式输入控制信号。
当引脚接高电平时,CPU工作于最小模式。
此时,引脚信号24~31的含义及其功能如下。
⑴IO/M/(memoryI/Oselect):
存储器、I/O端口选择控制信号。
⑵WR/(write):
写信号,输出,低电平有效。
⑶INTA/(interruptacknowledge):
可屏蔽中断响应信号,输出,低电平有效。
⑷ALE(addresslockenable):
地址锁存允许信号,输出,高电平有效。
⑸DT/(datatransmitorreceive):
数据发送/接收信号,输出,三态。
⑹DEN/(dataenable):
数据允许控制信号,输出,三态,低电平有效。
⑺HOLD(busholdrequest):
总线保持请求信号,输入,高电平有效。
⑻HLDA(holdacknowledge):
总线保持响应信号,输出,高电平有效。
图18086引脚图
6.软件设计课题说明
6.1程序功能描述
程序开始,进行清屏,显示欢迎界面。
按键输入,如果输入S就执行霓虹灯模拟显示在屏幕中央以@字符显示一矩形,并以@和*将矩型内部从左到右,由上到下填满;然后再按相反的次序消失的程序,否则就继续等待输入。
霓虹灯模拟显示程序执行完后,显示退出提示,等待Q的输入,如果输入为Q就退出程序,否则就继续等待输入。
6.2流程图
程序开始先定义各个端,做好准备工作。
进入主程序后,先调用CLEAR清屏子函数进行清屏,然后运用DOS的2号调用显示处预先定义好的输出提示界面,等待字符的输入。
若输入字符则检测是否为‘S’,若是则进入下一界面,否则继续等待。
程序主流程图开始部分如图1所示。
图2程序开始部分流程图
然后用@符号布矩形框的左竖行,先确定起始位置,填充一个后,行数自减1,检测行变量是否为0,不为零继续填充,否则换其它行。
如程序A——B段所示。
同理可设计出布矩形框的其它行。
程序中布矩形边框的程序流程图如图2所示。
图3布矩形边框程序流程图
边框布好后,用*填满矩形框内部。
在这里根据题目要求内部填充程序流程图如图3所示。
内部填充满后,自动反向消失内部填充的内容。
这里使用空格代替*填充再矩形框内部以实现内部反向消失。
内部反向消失程序流程图如图4所示。
图4内部反向消失程序流程图
内部反向消失后,开始消失矩形边框,首先设定起始位置,将该位置的字符替换为空格后移动光标一个单位,判断一行是否结束,结束后反向消失下一行,否则继续。
边框的反向消失程序流程图如图5所示。
图5边框反向消失程序流程图
最后显示退出提示界面。
若有字符输入,检测是否为Q,不为Q则清屏,然后继续显示该提示界面;否则退出程序。
该段程序流程图如图6所示。
图6程序退出界面流程图
7.调试记录及结果分析
7.1调试过程
调试过程主要由编辑、汇编、链接和执行等几个步骤组成。
(1)源程序的编辑:
编辑好汇编语言源程序后,保存为.asm文件。
(2)源程序的汇编:
调用汇编程序对源程序进行翻译,生成.OBJ的目标文件。
在汇编过程中,源程序有错误生不成目标文件,经过多次修改最终生成目标文件。
(3)目标程序的连接:
调用链接程序(LINK)将用户目标程序和库文件进行链接、定位,生成.EXE可执行文件。
(4)调试可执行程序:
刚开始可执行程序运行之后没有得到预想的结果,又重新检查源程序的算法错误,重新编辑、汇编、链接和执行,得到了预想的结果。
7.2调试结果
(1)执行程序时,提示进入界面如下:
图7开始页面
(2)输S后,程序执行过程中,在屏幕上显示矩形框、填充及消失如下:
图8布矩形阵
图9填充过程
图10反向消失过程
(4)提示输Q退出界面如下:
7.3调试中出现的问题及解决方法
问题1:
寄存器不够用怎么办?
解决方法:
这是由于程序结构复杂,使用了太多寄存器,可以定义外部变量来解决。
问题2:
寄存器值变化多端怎么办?
解决方法:
使用堆栈进行现场保护。
使用时应注意push,pop的成对使用,不要遗忘pop同时还要注意堆栈的先入后出的规律。
8.总结
通过这次的课程设计,让我对一学期所学的知识进行了回顾,同时通过查阅书籍和网上的资料获得了很多新的知识。
在学期初开始学《微机原理与接口技术》这一门课时,我就觉得比较吃力,这是是一门很抽象的学科,学起来也比较乏味。
不仅需要我们对知识理解,更重要的是要将芯片已经编程指令集熟练记忆和应用。
在这次课程设计中,让我巩固了以前学过的一些基本的指令;更加学习掌握了汇编语言的一些基本的中断调用功能。
在开始设计时,我毫无头绪,所以我选择在网上搜集相关资料进行学习,通过对往届学长学姐所做的设计的学习,我确定了运用中断调用进行设计的方向,认真研究学习了汇编语言一些基本的中断调用。
读懂原有程序并在其基础上进行修改。
在调试过程中,我不断对程序进行修改、改进,增强了自己分析问题、解决问题的能力;也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器、存储器等工作原理以及一些指令执行后对它们的改变,例如INT指令会改变AL的值,在编程时应注意这方面的问题。
总之,这次课程设计我锻炼了动手能力,熟悉了汇编的编程环境,并巩固了课程相关知识,收益很多。
实践出真知,在课程设计中不忘在小处创新,希望在下一次课程设计中能有更大的突破!
9.参考资料
[1]汤书森.《微机原理接口技术实验于实践教程》.北京:
清华大学出版社,2008
[2]余朝琨.《IBM-PC汇编语言程序设计》.北京:
机械工业出版社.2008
[3]宋江.《微机原理与接口技术》.北京:
机械工业出版社.2005
[4]金泉涌.《微型计算机应用经验汇编》.北京:
清华大学出版社,2007
[5]沈美玲.《IBM-PC汇编语言程序设计》.北京:
清华大学出版社,1993
[6]吴耿峰.《十六位微型计算机原理接口及应用》.北京:
高等教育出版.2004
[7]戴梅萼.《微型计算机技术与应用》.北京:
清华大学出版社.1992
[8]罗省贤.《汇编语言程序设计教程》.北京:
电子工业出版社,2004
[9]吴向军.《汇编语言程序设计》.北京:
高等教育出版社,2008
10.附录源程序清单
MAMACROOP1,OP2;宏定义光标位置
PUSHAX
PUSHBX
MOVAH,02H
MOVBH,0;页号
MOVDH,OP1;行
MOVDL,OP2;列
INT10H
POPBX
POPAX
ENDM
STACKSEGMENTPARASTACK'Stack';定义数据段
STACKENDS
DATASEGSEGMENTPARA‘Data’;定义堆栈段
ROWDB‘?
’
COLUMEDB‘?
’
COUNTDB‘?
’
COUNT1DB‘?
’
CTDB‘?
’
MENUDB'******************************************',0dh,0ah
DB'****',0dh,0ah
DB'**welcomeyou!
**',0dh,0ah
DB'****',0dh,0ah
DB'**programmeofdisplalyingneonlamp**',0dh,0ah
DB'****',0dh,0ah
DB'**pleasepressStoenter**',0dh,0ah
DB'**andthenpressQtoexit!
**',0dh,0ah
DB'**MADEBYBaoGang**',0dh,0ah
DB'******************************************$'
BUFDB'pressQtoexit!
$'
DATASEGENDS
CODESEGSEGMENTPARA'Code'
ASSUMESS:
STACK,DS:
DATASEG,CS:
CODESEG
MAINPROCFAR
MOVAX,DATASEG
MOVDS,AX
CALLCLEAR;调用清屏子程序
MA8,0;欢迎界面的出现位置
WAT0:
LEADX,MENU;输入A进入霓虹灯显示
MOVAH,9
INT21H
MOVAH,1
INT21H
CMPAL,'S'
CALLCLEAR;如果输入的不是S就清屏
MA8,0
JNZWAT0
PUSHAX;入栈
PUSHBX
PUSHCX
PUSHDX
MOVROW,23;完成矩形框的左竖行
MOVCOLUME,0
LOP3:
CALLCURSOR;调用设置光标位置
MOVAL,40H;把#的ASCII码传递给AL
MOVBL,0BH;设置字符属性
PUSHCX;入栈
MOVCX,1;字符显示1次
MOVAH,09H
INT10H
POPCX;出栈
CALLDELAY1;调用延时
DECROW;行坐标减1
CMPROW,0;若行坐标大于0就跳转到lop3否则执行下个程序
JNZLOP3
MOVROW,0
MOVCOLUME,0;完成矩形框的上行
LOP1:
CALLCURSOR
MOVAL,40H
MOVBL,0BH
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
CALLDELAY1
INCCOLUME
CMPCOLUME,79
JNZLOP1
MOVROW,0
MOVCOLUME,79;完成矩形框的右竖行
LOP2:
CALLCURSOR
MOVAL,40H;完成@的输出
MOVBL,0BH
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
CALLDELAY1
INCROW
CMPROW,23
JNZLOP2
MOVROW,23
MOVCOLUME,79;完成矩形框的下横行
LOP4:
CALLCURSOR
MOVAL,40H
MOVBL,0BH
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
CALLDELAY1
DECCOLUME
CMPCOLUME,0
JNZLOP4;到此矩形框已完成
MOVCOUNT1,22;矩形框内部填充
LOP6:
MOVCOUNT,39
MOVCH,39
MOVCL,40
LOP5:
MACOUNT1,CH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 霓虹灯 模拟 显示 程序 DOC