计算机霓虹灯模拟显示软件设计.docx
- 文档编号:25575725
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:34
- 大小:46.73KB
计算机霓虹灯模拟显示软件设计.docx
《计算机霓虹灯模拟显示软件设计.docx》由会员分享,可在线阅读,更多相关《计算机霓虹灯模拟显示软件设计.docx(34页珍藏版)》请在冰豆网上搜索。
计算机霓虹灯模拟显示软件设计
学号:
0121011350134
课程设计
题目
计算机霓虹灯模拟显示软件设计
学院
自动化学院
专业
电气工程及其自动化
班级
电气1001班
姓名
指导教师
张锐
2013
年
1
月
18
日
课程设计任务书
学生姓名:
专业班级:
电气1001
指导教师:
张锐工作单位:
自动化学院
题目:
计算机霓虹灯模拟显示软件设计
初始条件:
1.用于调试程序的IBM兼容PC机一台;
2.安装DOS/WIN98操作系统或运行于DOS/WIN98兼容方式;
3.EDIT等文本编辑器输入80x86汇编程序,MASM5.0编译及链接程序。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.使用汇编语言设计一个运行于计算机的霓虹灯模拟显示软件,软件应实现模拟显示霓虹灯,要求至少有一种动态显示效果。
可以附加显示其它信息和添加多种动态显示效果。
2.说明书撰写格式应符合《课程设计说明书统一书写格式》。
时间安排:
1.程序框图设计,3天
2.编程,4天
3.调试,3天
4.编写设计报告,4天
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
霓虹灯是日常生活中常见的灯饰,它装点了夜空,丰富了人们的生活。
通过汇编语言的学习,可实现霓虹灯的控制与操作,实现其显示与闪烁,或者是其他的动态变化,从而可以很方便的达到理想效果。
本设计通过对字符进行坐标形式的定义再调用BIOS使之顺序显示,通过擦除子程序以及清屏子程序的配合运用,可以达到让汉字或图像闪烁或运动的功能。
最后通过按键‘Q/q’来实现程序的结束。
关键字:
霓虹灯汇编语言子程序
霓虹灯模拟显示软件设计
1设计任务原理及方案认证
1.1设计任务
1.使用汇编语言设计一个运行于计算机的霓虹灯模拟显示软件,软件应实现模拟显示霓虹灯,要求至少有一种动态显示效果。
可以附加显示其它信息和添加多种动态显示效果。
2.说明书撰写格式应符合《课程设计说明书统一书写格式》。
1.2设计原理分析
从设计任务中可看出,本次课程设计需完成用计算机模拟霓虹灯的动态显示,即在80*25大小的屏幕上显示由各种字符组成的不同图形或字符。
在设计中,程序的数据段以字符串的形式来表示,可以很方便的直接运用INT10H中的13号功能即显示字符串功能显示图形,即以行的依次顺序逐渐出像在屏幕上,在字符串一次出现的同时,采用BIOS中断调用,通过对字符文本方式的控制,将字符的颜色、亮度、闪烁等属性表示出来。
然后再通过顺序、循环结构程序的调用进行图形的霓虹灯效果显示。
在控制字符依次出现的方式上,还需采用延时程序,将延时定为适当的速度,使字符能够清晰的显示在屏幕上。
文字的闪烁通过清屏和擦屏程序来实现。
退出程序需检验输入字符与’Q’、’q’的比较来实现。
1.3方案比较及认证
方案一:
按照字符形状定义字符,在主程序中反复调用字符形态的字符定义,再通过顺序、循环、调用等程序来实现对字符串的顺序显示。
采用清屏程序和擦除程序控制文字的闪烁。
方案二:
可采用系统提供的BIOS功能调用中的int10h显示功能,通过写ASCII码,来组成文字,其中ASCII码的位置可由相对行数和列数的二维坐标确定,由定义的区域内开始,行向下自增1,列向右自增1,逐列写ASCII码。
为了程序中代码的方便书写,须事先利用坐标纸将自己要显示的文字用ASCII码拼写出来,然后将每个ASCII码的坐标写入程序的数据段中。
然后再利用该BIOS功能中的显示字符的中断调用来输出ASCII码,通过在不同位置写ASCII码来组成需要显示的文字,而ASCII码的位置由可以通过BIOS功能调用中的设置光标位置的中断调用实现。
而文字的闪烁可以通过清屏程序和擦除程序同时作用来实现。
方案比较:
方案一采用通过字符形态来定义字符的方式,其表示方式复杂冗长,并且表示出的字符也可能不太准确。
同时,不能控制字符的前景背景、亮度等属性。
在反复调用时也容易出错。
方案二采用坐标值写点的方式,并用ASCII码来表示。
通过INT10H的显示功能的调用,可以完成彩色字符的属性设置,从而更好的完成程序要求。
因此,我们选择方案二来定义表示字符,更方便、简洁、准确的实现霓虹灯的模拟显示功能。
2程序流程图
2.1主程序流程图
定义字符段,然后将代码段程序初始化,然后调用INT10H的13号功能依次显示字符串组成的’Hi2013’,再调用清屏子程序,清除所写文字。
程序执行完后,判断是否输入Q/q,若输入Q/q,则程序结束,退出程序,否则,执行跳转命令,继续调用字符显示程序和清屏程序。
主程序结构流程图如图2-1所示。
结束
调用INT10H显示程序
显示字符串
调用清屏程序
定义数据段
初始化代码段程序
开始
是否输入Q/q?
N
Y
图2-1主程序流程图
2.2子程序流程图
2.2.1字符显示程序结构流程图
显示定义字符,先保存写点字符的坐标,然后在指定坐标处写第一个点,判断cx中是否为0,不为0则继续循环,显示写点字符,为0则表示所有字符显示完成,则结束循环,进入下一条指令。
字符显示程序结构流程图如图2-2所示。
结束
寄存器出栈
判断CX中内容是否为0?
CX中内容自减1
保存组成点的基本信息
CX入栈
在指定坐标处写第一个点
开始
寄存器入栈
CX寄存器清零
N
Y
图2-2字符显示程序结构流程图
2.2.2清屏程序结构流程图
在显示完字符并进行变色以后,将使用横条纹对屏幕进行擦出,擦除以后若没有检测到字符Q的输入,则进行循环,继续显示字符,并在此进行擦出,擦出子程序流程图如图2-3所示。
保存组成点的基本信息
判断是否到达屏幕最左端?
判断指定位置处字符是否为@?
保存点的基本信息
列坐标dl自减1
将字符改为*
将字符写11个
Y
N
Y
开始
判断指定位置处字符是否为*?
N
Y
结束
图2-3清屏程序结构流程图
3主要程序段与程序设计分析
3.1程序中用到的BIOS内的中断功能
(1)02H号功能调用
功能:
用文本坐标下设置光标位置
入口参数:
AH=02H
BH=显示页码
DH=行(Y坐标)
DL=列(X坐标)
出口参数:
无
(2)08H号功能调用
功能:
读光标处的字符及其属性
入口参数:
AH=08H
BH=显示页码
出口参数:
AH=属性
AL=字符
(3)09H号功能调用
功能:
在当前光标处按指定属性显示字符
入口参数:
AH=09H
AL=字符
BH=显示页码
BL=属性(文本模式)或颜色(图形模式)
CX=重复输出字符的次数
出口参数:
无
(4)0FH号功能调用
功能:
读取显示器模式
入口参数:
AH=0FH
出口参数:
AH=屏幕字符的列数
AL=显示模式
BH=页码
字符属性:
屏幕上的每个字符:
其属性由两个连续的字节表示,一个字节表示ASCII码,另一个表示属性。
如图3-1所示。
7
6
5
4
3
2
1
0
BL
R
G
B
I
R
G
B
闪烁
前景
背景
图3-116色方式下的属性字节
3.2程序中用到的DOS功能调用
(1)01H号功能调用
功能:
从键盘输入一个字符
输入参数:
无
输出参数:
AL=ASCII码
(2)0BH号功能调用
功能:
检查标准输入设备上是否有字符可读,该输入操作可被重定向
输入参数:
AH=0BH
输出参数:
AL=00H——无字符可读;FFH——有字符可读
(3)4CH号功能调用
功能:
返回操作系统4CH
调用:
MOVAH,4CH
INT21H
3.3主要程序段与程序设计分析
3.3.1数据段程序
本课程设计源程序中的汉字运用写点的方式实现,在数据段的定义中,由组成字符的点的ASCII码值、颜色、X坐标、Y坐标构成。
其中‘Hi’的定义程序如下:
hidb33
db03h,1ah,0,0
db8dup(03h,1ah,1,0)
db03h,1ah,-4,0
db7dup(03h,1ah,0,1)
db03h,1ah,-4,0
db8dup(03h,1ah,1,0)
db03h,1ah,-8,4
db03h,1ah,3,0
db7dup(03h,1ah,1,0)
这段程序是第一个字符‘Hi’的位形图,其中03h为组成‘Hi’字第一个点的ASCII码值,在屏幕上显示为‘♥’;1ah为颜色属性,为绿色且闪烁;(0,0)为这个点的坐标,第一个为行坐标,第二个为列坐标。
这个点为‘Hi’字组成点的基准坐标,其它点的坐标设置与此点类似。
坐标设置按照矩阵的形式,向上则行自减1,向下则行自增1,向左则列自减1,向右则列自增1。
每写出一个点后,该点的坐标变回基准坐标(0,0)。
本程序中写点是按照从左到右、从上到下的顺序写的,直至写完所有的点。
3.3.2写点程序段
首先将汉字位形图的地址送给寄存器,程序如下:
leadi,hi
movdh,8
movdl,15
其中,dh,dl分别对应于所写汉字第一个点在屏幕上显示时的行、列坐标。
然后读取组成点的信息,程序段如下:
movchar_cnt1,cx
movpointer1,di
movline_on1,dh
movcol_on1,dl
movchar,cx
程序中char_cnt1指字符,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
int10h
popcx
adddi,4
应当说明的是,程序中cx寄存器入栈又出栈。
入栈是为了保存cx中的数值,将寄存器cx空出来,作为计数用,随即出栈的目的是重新将已经保存的cx中的值保存到cx中,作为循环次数用。
程序中到int10h为止都是写点的程序。
adddi,4是为写下一个点做准备,直至写完。
写点效果如图3-2。
图3-2写点效果图
3.3.3输入Q、q退出程序
movah,0bh
int21h
cmpal,0
jzAgain1
movah,1
int21h
cmpal,'q'
jzexit
cmpal,'Q'
jzexit
jmpAgain1
exit:
movax,4c00h
int21h
本段程序实现了首先判断有没有字符输入,有字符输入再判断是否为Q、q,进而判断是否退出。
若没有jmpAgain1这条语句,输入的字符不是Q、q程序也会结束。
3.3.4竖形条纹的显示程序
cmpal,40h
jeAexitx0
cmpal,02ah
jeAexitx0
jmpAexitx1
Aexitx0:
decAcount0
jneAplot_next
movAcount0,11
数据段中竖形条纹只定义了6个点,为了能够有足够的宽度将汉字覆盖,因此要将db40h,05h,1,0与db02ah,05h,-1,0两个点重复写11次,形成够宽的条纹。
主程序中Acount0先定义为了11,写完11个“@”后,Acount0重新赋值11,再将02ah对应的字符“*”写11次,构成完整的竖形条纹。
竖形擦除条纹如图3-3所示。
图3-3竖条形擦除效果图
3.3.5条纹清屏与文字闪烁功能程序
程序通过从右向左将字符显示覆盖,字符的依次显示是通过竖形条纹的移动覆盖与擦除程序实现的。
Aerase_next:
adddh,[di+2]
adddl,[di+3]
cmpdl,2
jeAleft
movah,2
int10h
movah,8
int10h
cmpal,40h
jeAexitx2
cmpal,02ah
jeAexitx2
jmpAexitx3
Aexitx2:
decAcount0
jneAexitx3
movAcount0,11
Aexitx3:
cmpAcount1,1
jeAexit0
moval,'*'
movbl,03h
jmpAexit7
Aexit0:
moval,'*'
movbl,0
Aexit7:
pushcx
movcx,1
movah,9
int10h
popcx
cmpAcount0,11
jneAerase_next
adddi,4
loopAerase_next
deccol_on1
在每次写完竖形条纹以后,由deccol_on1实现起始点列坐标的的自减1,从而实现竖形条纹的从右向左移动。
屏幕的擦除是通过比较竖形条纹与“*”,相同则不变,不同则将次字符改为“*”实现的。
其效果图如3-4所示。
图3-4条纹清屏效果图
3.3.6延迟功能程序
若显示程序没有了延时功能模块,那么所有的显示内容都将一闪而过,根本看不清,因此,我们需要在程序中加入延迟程序,除此之外延迟程序可以用来控制汉字显示的快慢以及刷屏的快慢速度。
以下是延迟模块的子程序:
dly_qrtrprocnear
pushcx
pushdx
movdx,50
dll:
movcx,65530
dl2:
loopdl2
decdx
jnzdll
popdx
popcx
ret
dly_qrtrendp
4程序调试
4.1.调试工具
使用汇编语言调试器MFPCI98进行调试,MFPCI98软件是专门为汇编语言设计的一种调试运行工具。
它能给DOS提供有力的纠错、跟踪和运行功能,并能检查系统的各个数据。
该工具可以通过单步、设置断点等方法微程序设计者提供一种有效的调试手段。
4.2.调试过程与结果分析
本程序在调试过程中,遇到了很多自己思考不周的问题。
第一,在没有输入任何字符的情况下,程序运行到字符检测点停了下来,必须输入一个字符让程序继续或结束。
经过检查原来是没有设置判断是否有字符输入的程序,修改后解决了;第二,输入的字符非Q、q时,程序也会结束。
在和Q、q比较的程序段之后、过程终止程序段之前加上jmpAgain1语句,即正常了。
第三,在使用复制操作DUP时,未将复制数目与DUP用空格分隔开,导致运行错误。
经过错误分析改正程序后,程序运行达到预期效果。
5心得体会
在这次微机原理与接口技术课程设计过程中,我收获到很多。
课程设计是培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。
从选题到定稿,从理论到实践,总体来说,在整个的课程设计过程中,我又重新巩固了微机原理与接口技术这门课程的许多知识,包括数据的转换、BIOS的调用等等。
虽然很多理论知识在平时的学习中已经有所掌握,但这次需要自己从字符创意到整个编程效果的完成,在不断调试修改、美化效果的过程中,使我更加专心、细心也更加耐心。
使我真正从书本中走出来,用理论知识解决实际问题。
其次,通过课程设计,让我在课本的基础上,更深入的了解了各种指令的用法和程序的完成过程,调试方法及技巧。
为了了解程序思路,我查了不少指令的功能资料,以及关于显示器显示的功能要求,并了解了霓虹灯功能的实现。
编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序,调试程序中,学习了汇编语言的整个调试过程,更加容易的找出程序的错误处了。
对于MFPCI98这个汇编软件,在平时学习的实验课上已经有所接触,知道如何来操作它,通过它来实现汇编语句的功能。
在调试自己编写的程序时,很激动也很紧张,通过一次次的调试改动程序,最终达到0error的时候,感受到强大的满足激动,这是在平时学习中所体验不到的,我相信这也是汇编语言的真谛。
通过课程设计的实践学习,使我更加懂得如何思考,如何解决问题,如何与同学和老师探索交流,这将对我今后的学习起到很大的帮助。
最后要感谢在本次课程设计中在各方面给与我帮助,使我不断提高的老师和同学们。
参考文献
[1]郑学坚、周斌.微机计算原理及应用(第三版).北京:
清华大学出版社,2003.6
[2]谭浩强.《计算机硬件技术基础》.北京:
电子工业出版社,2004.6
[3]邹逢兴.《计算机硬件技术基础》.北京:
高等教育出版社,2005.8
[4]朱定华.《微机原理汇编与接口技术学习指导》.北京:
清华大学出版社,2009。
7
[5]周佩玲、彭虎等著.微机原理与接口技术(第三版).北京:
电子工业出版社,2011.8
附录一源程序和程序注释
data_segsegment
hidb33
db03h,1ah,0,0
db8dup(03h,1ah,1,0)
db03h,1ah,-4,0
db03h,1ah,0,1
db03h,1ah,0,1
db03h,1ah,0,1
db03h,1ah,0,1
db03h,1ah,0,1
db03h,1ah,0,1
db03h,1ah,0,1
db03h,1ah,-4,0
db8dup(03h,1ah,1,0)
db03h,1ah,-8,4
db03h,1ah,3,0
db03h,1ah,1,0
db03h,1ah,1,0
db03h,1ah,1,0
db03h,1ah,1,0
db03h,1ah,1,0
db03h,1ah,1,0
db03h,1ah,1,0
year1db85
db03h,1ah,0,0
db4dup(03h,1ah,0,1)
db4dup(03h,1ah,1,0)
db4dup(03h,1ah,0,-1)
db4dup(03h,1ah,1,0)
db4dup(03h,1ah,0,1)
db03h,1ah,-8,3
db8dup(03h,1ah,1,0)
db03h,1ah,-8,1
db3dup(03h,1ah,0,1)
db8dup(03h,1ah,1,0)
db3dup(03h,1ah,0,-1)
db03h,1ah,-8,7
db8dup(03h,1ah,1,0)
db03h,1ah,-8,4
db4dup(03h,1ah,0,1)
db4dup(03h,1ah,1,0)
db4dup(03h,1ah,0,-1)
db03h,1ah,1,4
db3dup(03h,1ah,1,0)
db4dup(03h,1ah,0,-1)
hi1db33
db03h,1eh,0,0
db8dup(03h,1eh,1,0)
db03h,1eh,-4,0
db03h,1eh,0,1
db03h,1eh,0,1
db03h,1eh,0,1
db03h,1eh,0,1
db03h,1eh,0,1
db03h,1eh,0,1
db03h,1eh,0,1
db03h,1eh,-4,0
db8dup(03h,1eh,1,0)
db03h,1eh,-8,4
db03h,1eh,3,0
db03h,1eh,1,0
db03h,1eh,1,0
db03h,1eh,1,0
db03h,1eh,1,0
db03h,1eh,1,0
db03h,1eh,1,0
db03h,1eh,1,0
year2db85
db03h,1eh,0,0
db4dup(03h,1eh,0,1)
db4dup(03h,1eh,1,0)
db4dup(03h,1eh,0,-1)
db4dup(03h,1eh,1,0)
db4dup(03h,1eh,0,1)
db03h,1eh,-8,3
db8dup(03h,1eh,1,0)
db03h,1eh,-8,1
db3dup(03h,1eh,0,1)
db8dup(03h,1eh,1,0)
db3dup(03h,1eh,0,-1)
db03h,1eh,-8,7
db8dup(03h,1eh,1,0)
db03h,1eh,-8,4
db4dup(03h,1eh,0,1)
db4dup(03h,1eh,1,0)
db4dup(03h,1eh,0,-1)
db03h,1eh,1,4
db3dup(03h,1eh,1,0)
db4dup(03h,1eh,0,-1)
hi2db33
db03h,0ch,0,0
db8dup(03h,0ch,1,0)
db03h,0ch,-4,0
db03h,0ch,0,1
db03h,0ch,0,1
db03h,0ch,0,1
db03h,0ch,0,1
db03h,0ch,0,1
db03h,0ch,0,1
db03h,0ch,0,1
db03h,0ch,-4,0
db8dup(03h,0ch,1,0)
db03h,0ch,-8,4
db03h,0ch,3,0
db03h,0ch,1,0
db03h,0ch,1,0
db03h,0ch,1,0
db03h,0ch,1,0
db03h,0ch,1,0
db03h,0ch,1,0
db03h,0ch,1,0
year3db85
db03h,0ch,0,0
db4dup(03h,0ch,0,1)
db4dup(03h,0ch,1,0)
db4dup(03h,0ch,0,-1)
db4dup(03h,0ch,1,0)
db4dup(03h,0ch,0,1)
db03h,0ch,-8,3
db8dup(03h,0ch,1,0)
db03h,0ch,-8,1
db3du
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 霓虹灯 模拟 显示 软件设计