霓虹灯显示程序设计Word文档格式.docx
《霓虹灯显示程序设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《霓虹灯显示程序设计Word文档格式.docx(39页珍藏版)》请在冰豆网上搜索。
指导教师签名:
年月日
系主任(或责任教师)签名:
本科生课程设计成绩评定表
摘要
霓虹灯是城市的美容师,每当夜幕降临时,华灯初上,五颜六色的霓虹灯就把城市装扮得格外美丽。
通过汇编语言,可实现霓虹灯的控制与操作,实现其显示与闪烁,或者是其他的动态变化,从而可以很方便的达到理想效果。
INT10H是由BIOS对屏幕及显示器所提供的服务程序。
汇编语言的INT10号中断提供了设置显示模式、设置颜色模式、设置光标位置、按指定属性显示字符等功能,可以显示汉字或图像,同时也提供了初始化屏幕或滚屏等功能号,通过擦除子程序以及清屏子程序的配合运用,可以达到让汉字或图像闪烁或运动的功能。
本次课程设计,研究的正是霓虹灯显示程序设计,我们可通过对INT10号中断的功能调用实现,设计出我们想要的霓虹灯显示效果。
关键词:
霓虹灯中断子程序显示闪烁
霓虹灯程序设计
1设计任务及要求
(1)用汇编语言编写一个霓虹灯的模拟显示程序;
(2)在屏幕上显示你的中文名字或其它文字,按某种规律闪烁变化,按“q”键退出;
(3)撰写课程设计说明书。
2设计内容及介绍
汇编语言是用指令的助记符、符号地址、标号等书写程序的语言,实际上是机器语言的一种符号表示,主要特点是可以使用助记符来表示机器指令的操作码和操作数,可以用标号和符号来代替地址、常量和变量。
汇编语言是能够利用计算机所有硬件特性进而直接控制硬件的唯一语言。
汇编语言的使用范围很广,文字显示只是其中很简单的一项。
本次课程设计采用DOS和BIOS功能调用,采用25×
80的彩色图像显示方式。
先运用绘图软件生成文字图片文件,再用ASCIIArtStudio软件将编辑好的图片文件转换为ASCII字符画,并设定ASCII码的颜色值。
ASCII码对应字符的位置由行数与列数的二维坐标确定。
其中行向上则减,向下则增;
列向左则减,向右则增。
在程序的数据定义区定义所要输出的文字的位形图,每行数据段定义组成文字的一个点。
其中包含组成文字的字符、颜色、横坐标、纵坐标。
文字的变色是通过同一个字的不同颜色版本去覆盖当前的版本以及清屏、擦除程序实现的。
文字的闪烁则是通过将颜色属性的八位二进制数的最高位置实现的。
通过比较键盘字符输入“q”来判断是否结束程序。
3设计方案
汇编语言是计算机提供给用户的最快最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,是操作系统等其它核心课程的必要选修课。
汇编语言的应用有很多,其中,图形文字的显示就是计算机的一项基本应用。
通过查阅相关资料在此可以提供两种方案实现来实现此课程设计要求。
(1)25×
80的彩色图像显示方案
根据程序设计要求,可采用25×
文字的闪烁则是通过将颜色属性的八位二进制数的最高位置1实现的。
(2)调用BIOS的INT10H显示功能方案
完成相应的程序设计要求,还可采用系统提供的BIOS功能调用中的INT10H显示功能。
定义AH=0,AL=13将屏幕输出设置为320×
200,256色图形方式。
同25×
80的彩色图像显示方案,我们必须建立给我们所要显示的文字或者图像建立相对应的坐标平面,然后编写程序段实现内存地址与屏幕坐标之间的联系。
采用直接往显卡的内存映射地址中写入数据,用来控制屏幕输出的颜色。
文字的闪烁同样可以通过清屏程序和擦除程序同时作用来实现。
(3)两种方案的比较
同过以上的分析我们可以很明显的认识到两种方案的利弊。
对于方案一,优点:
屏幕如同坐标纸,如何画上ASCII码只需确定坐标,然后调用中断即可实现。
而坐标的确定可以通过字符取模软件轻松实现。
并且文字或图像的变化更加丰富。
缺点:
编程过程对每个坐标点都需要做ASCII码的定义,程序的编写将更加繁琐和复杂。
方案二,优点:
不需要对每个点做大量的ASCII码定义,程序的编写相比方案一更加简洁轻松,并且坐标点的绘制同样可同坐取模软件轻松获得;
另外,执行过程不需要进行大量、重复的中断调用。
对于图像点颜色的设定较为死板,不能灵活变化。
综上分析,在满足设计要求的前提条件下,考虑到编程的复杂程度,选择方案一最为此次课程设计的执行方案。
4程序原理分析
4.1程序中的字体属性定义
本程序采用的是彩色字符显示,在显示彩色文本时,属性字节能够选择前景和背景的颜色。
每个字符可以选择16种颜色中的一种,背景色有8种颜色可以选择。
16色文本方式显示的属性字节如图4-1所示。
16色字符方式颜色的组合如表4-1所示。
BL
R
G
B
I
图4-116色方式下的属性字节
表4-116种颜色的组合
颜色
IRGB
黑
0000
灰
1000
红
0100
浅红
1100
蓝
0001
浅蓝
1001
品红
0101
浅品红
1101
绿
0010
浅绿
1010
棕
0110
黄
1110
青
0011
浅青
1011
灰白
0111
白
1111
4.2程序中用到的BIOS内的中断功能
(1)02H号功能调用
功能:
用文本坐标下设置光标位置
入口参数:
AH=02H
BH=显示页码
DH=行(Y坐标)
DL=列(X坐标)
出口参数:
无
(2)08H号功能调用
读光标处的字符及其属性
AH=08H
AH=属性
AL=字符
(3)09H号功能调用
在当前光标处按指定属性显示字符
AH=09H
BL=属性(文本模式)或颜色(图形模式)
CX=重复输出字符的次数
(4)0FH号功能调用
读取显示器模式
AH=0FH
AH=屏幕字符的列数
AL=显示模式
BH=页码
4.3程序中用到的DOS功能调用
(1)01H号功能调用
从键盘输入一个字符
输入参数:
输出参数:
AL=ASCII码
(2)0BH号功能调用
检查标准输入设备上是否有字符可读,该输入操作可被重定向
AH=0BH
AL=00H——无字符可读;
FFH——有字符可读
(3)4CH号功能调用
返回操作系统4CH
调用:
MOVAH,4CH
5程序设计与主要模块
5.1程序设计
5.1.1主程序流程图
主程序流程图如图5-1所示。
图5-1主程序结构流程图
5.1.2子程序流程图
本程序显示的文字为英文字母,字母都用不同颜色的版本先写一次,然后竖形条纹扫过,条纹扫过时字母被覆盖,条纹扫过后开始显示颜色变化后的字母,然后条纹再扫过,一直这样循环。
因此,子程序有文字显示子程序、竖形条纹显示子程序、擦除子程序。
文字显示子程序流程图如图5-2所示。
图5-2文字显示子程序流程图
竖形条纹显示子程序流程图如图5-3所示。
图5-3竖形条纹显示子程序流程图
擦除子程序流程图如图5-4所示。
图5-4擦除子程序流程图
5.2主要模块
5.2.1文字显示模块
本次课程设计中,我采用使用各种字符组合来组成文字的形状。
如何使用ASCII码显示文字是这次课程设计的要点之一,为了达到更美观的效果,我使用了ASCIIArtStudio。
该软件是用来创建ASCII字符画的软件,可以像使用画笔一样创建ASCII字符画。
按照每一个字符的坐标方位在25×
80大小的屏幕上显示由各种字符组成的文字,在屏幕上,0行0列相对于屏幕左上角的位置,24行79列相对于右下角的位置。
转换完成的文字效果如图5-5所示。
图5-5转换为字符画的文字
对应显示屏幕上的每个字符,在存储器中又连续的两个字节表示,一个字节保存ASCII码,另一个字节保存字符的属性。
在屏幕上处理字母、数字以及一些字符图形称为文本方式。
在文本方式下,属性字节对单色显示和彩色显示都是有效的。
在彩色显示器里,如CGA、EGA、VGA等,常用一个字节(8个位)来表示文字颜色和背景颜色,通常以第0~3位表示文字本身颜色;
第4~6位表示背景颜色,背景颜色只有上表左栏的8种而已;
第7个位,表示是否闪烁,0表示不闪烁,1表示闪烁。
每个字符由四种属性组成,第一项为字符种类,如61h代表字符“a”,第二项为字符的颜色,如Oah代表绿色,第三项为字符相对于前一个字符的行坐标,第四项为该字符对于上一个字符的列坐标,这样只要定义了第一个字符在屏幕中的位置,那么就能将整个文字显示出来。
例如:
Adb147
db'
q'
04h,0,8
N'
04h,0,1
y'
04h,1,-2
这段程序是字母A的位形图程序的一部分。
其中'
为A的第一个点转换为ASCII码的值,在屏幕上会显示q;
04h为其颜色属性,且为红色不闪烁;
(0,8)为这个点的坐标,第一个为行坐标,第二个为列坐标。
这个点也是字母A组成点的基准坐标,其余点的设置与此点类似。
,向上则行自减1,向下则行自增1,向左则列自减1,向右则列自增1。
每写出一个点后,该点的坐标变回基准坐标(0,0)。
本程序中写点是按照从左到右、从上到下的顺序写的,直至写完所有的点。
换句话说,每个点的坐标值是相对于前一个点的坐标值而确定的。
显示字母的的过程如下面程序段所示,其中前三句是将字母位型图的地址送给寄存器,dh和dl分别表示字母的起始的第一个点在屏幕上的行列的坐标,call指令用于子程序调用,分别调用move_shape1和Amust_2子程序,进行读点和写点。
leadi,A
movdh,3
movdl,4
callmove_shape1
callAmust_2
在move_shape1子程序中,char_cntl是指字符,pointer1表示颜色,line_on1为行坐标,col_on1为列坐标。
写点的程序在子程序Amust_2,Amust_21中类似,程序段如下:
movcx,char_cnt1
movdi,pointer1
movdh,line_on1
movdl,col_on1
Aplot_next0:
adddh,[di+2]
adddl,[di+3]
movah,2
int10h
moval,[di]
movbl,[di+1]
pushcx
movcx,1
movah,09
popcx
adddi,4
应当说明的是,程序中cx寄存器入栈又出栈。
入栈是为了保存cx中的数值,将寄存器cx空出来,作为计数用,随即出栈的目的是重新将已经保存的cx中的值保存到cx中,作为循环次数用。
程序中到int10h为止都是写点的程序。
adddi,4是为写下一个点做准备,直至写完。
5.2.2颜色变化模块
颜色变化就是将文字用其他颜色重新写一遍,可以实现文字颜色变化。
方法有二:
其一是重新定义数据段,将每个字符重新定义;
其二是使用函数,将每个字符代表字符颜色的部分同时加减一个数,便可实现变色功能。
5.2.3竖形条纹显示模块
数据段中竖形条纹只定义了6个点,为了能够有足够的宽度将汉字覆盖,因此要将db40h,0ah,1,0与db02ah,0ceh,-1,0两个点重复写19次,形成够宽的条纹。
主程序中Acount0先定义为了19,写完19个“@”后,Acount0重新赋值19,再将02ah对应的字符“*”写19次,构成完整的竖形条纹。
模块的核心算法程序如下:
cmpal,40h
jeAexitx0
cmpal,02ah
jmpAexitx1
Aexitx0:
decAcount0
jneAplot_next
movAcount0,19
5.2.4竖形条纹移动与清屏模块
在每次写完竖形条纹以后,由deccol_on1实现起始点列坐标的的自减1,从而实现竖形条纹的从右向左移动。
模块的核心程序如下:
cmpdl,2
jeAleft
movah,8
cmpal,40h
jeAexitx2
jmpAexitx3
Aexitx2:
jneAexitx3
Aexitx3:
cmpAcount1,1
jeAexit0
moval,'
'
movbl,03h
jmpAexit7
Aexit0:
movbl,0
Aexit7:
movah,9
cmpAcount0,19
jneAerase_next
loopAerase_next
deccol_on1
屏幕的擦除是通过竖形条纹与“空格”的比较,相同则不变,不同则将次字符改为“空格”实现的。
5.2.5按q退出模块
根据程序设计要求,该程序应在按下q键时能够退出程序,所以加入了退出功能模块。
该模块首先判断有无字符输入,没有,跳转到Again,若检测到字符输入,再把输入字符与q相比较,若不同,跳转到Again执行循环,若为q,则执行退出命令,返回DOS。
checkprocnear
pushax
movah,0bh
int21h
cmpal,0
jeback
movah,08h
cmpal,71h
jneback
popax
movah,4ch
back:
ret
checkendp
5.2.6延迟功能模块
延迟模块的功能是控制文字显示的快慢以及刷屏的速度。
没有延时功能模块,所有的显示内容会以很快的速度从屏幕一闪而过。
所以需要在程序中加入延迟程序,减慢文字显示及刷屏的速度,可以清楚地看到文字一个字符一个字符地显示出来,若有闪烁效果也可以看得很清楚。
以下是延迟模块的子程序。
dly_qrtrprocnear
pushdx
movdx,250
dll:
movcx,250
dl2:
loopdl2
decdx
jnzdll
popdx
dly_qrtrendp
6程序调试说明
6.1程序调试工具及过程
本次课程设计所使用的编译软件为MasmforWindows集成实验环境共享版2012.5,该软件具有界面简洁、美观,并且使用方便的优点,符合初学者或学生使用。
其编译界面如图6-1所示。
图6-1编译界面图
当程序编译完成可直接点击工具栏中“运行”按钮,汇编程序可一次性运行程序的编译、连接、运行,然后出现运行结果。
当程序设计完成,可以在汇编编译集成软件菜单栏点击“运行”->
“编译生成目标文件”,再次点击菜单栏“运行”->
“生成可执行文件”,生成所需要的.exe文件。
本程序在调试过程中,遇到了许多问题。
比如在写好程序后,运行时发现屏幕上显示的文字严重错位,检查数据段发现,有几个点的位置定义错误,重新定义后显示了正确的字符。
在写好程序运行之后文字能够正常显示,但是显示完一个字母之后还会继续显示乱码,检查数据区发现是将db'
04h,0,1这类的数据的个数定义的超出范围,适当缩小范围则可避免乱码的出现。
6.2调试结果分析
先显示加有闪烁效果的版本的图案。
由于闪烁,截图的时候图像有缺失。
截图效果如图6-2所示。
图6-2带闪烁的效果图
颜色变换过程如图6-3所示。
颜色变换完成后,不带闪烁的效果图如图6-4所示。
图6-3颜色变换过程效果图
图6-4不带闪烁的文字效果图
然后竖形条纹从右向左扫过,将屏幕清空,屏幕被清空后重新开始循环上述过程,直到输入“q”,程序结束。
扫屏效果如图6-5所示。
图6-5扫屏过程效果图
7课程设计总结
经过两周的霓虹灯显示程序设计课程设计,我觉得学习像微机原理与接口技术这样实用的知识,不仅要掌握书本上的基本内容,还要灵活思考,善于变换,这样才能找到最优设计,达到事半功倍的效果。
回顾起此次微机原理课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
在设计的过程中遇到问题,可以说得是困难重重。
为了了解程序思路,我查了不少指令的功能资料,以及关于显示器显示的功能要求,并了解了霓虹灯功能的实现。
编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序,调试程序中,学习了汇编语言的整个调试过程,更加容易的找出程序的错误处了。
在这次的课程设计中,首先我要感谢与我同组的同学,没有我们的一致团结合作,就没有我们今天的成果,同时,也要感谢其他组的同学,在我们有疑问的时候,给予了及时的解答,及时的提醒让我们得以少走很多弯路。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能真正提高自己的实际动手能力和独立思考的能力。
参考文献
[1]周佩玲,彭虎等著.微机原理与接口技术(基于16位机).北京:
电子工业出版社,2007
[2]艾德才.Pentium/80486实用汇编语言程序设计.北京:
高等教育出版社,2000
[3]谭浩强.计算机硬件技术基础.北京:
电子工业出版社,2004
[4]李继灿.新编16-32位微型计算机原理及应用.北京:
清华大学出版社,1997
[5]朱定华.微机原理、汇编与接口技术学习指导.北京:
清华大学出版社,2004
[6]邹逢兴.计算机硬件技术基础.北京:
高等教育出版社,2001
[7]邹逢兴.微型计算机原理及其应用典型题解析与实战模拟.长沙:
国防科技大学出版社,2001
附录源程序代码
datasegment
;
---A--**************************--A---
Hdb150;
浅红色带闪烁效果的H的位形图
#'
0ch,0,1
db6dup('
0ch,0,1)
0ch,0,1
db7dup('
0ch,0,1)
8ch,1,-12
db2dup('
db5dup('
db3dup('
8ch,1,-10
db10dup('