微机课设计算机波形显示软件设计.docx
《微机课设计算机波形显示软件设计.docx》由会员分享,可在线阅读,更多相关《微机课设计算机波形显示软件设计.docx(28页珍藏版)》请在冰豆网上搜索。
![微机课设计算机波形显示软件设计.docx](https://file1.bdocx.com/fileroot1/2023-2/2/1d563489-c4e1-40cf-ae9f-f470c0f77dc6/1d563489-c4e1-40cf-ae9f-f470c0f77dc61.gif)
微机课设计算机波形显示软件设计
摘要
运用微机课程中的相关知识,设计一个可以实现波形显示的软件。
通过键盘输入特定的参数来实现波形的变换及相位的调整。
设计波形中利用笛卡尔坐标和屏幕像素完成波形绘制,实验中,利用插标法产生正弦波,绘制一张正弦数字量表。
运用基本程序设计方法、DOS和BIOS调用,宏汇编的基本概念和方法,通过上机操作和程序调试技术,进行软件设计。
可以通过调用DOC中断,int21h处理输入输出信息,同时还通过BIOS中断int10h设置输出字符的起始位置。
关键词:
像素,宏汇编,DOC,BIOS
计算机波形显示软件设计
1总体设计
1.1总体设计思路
本实验中波形的实现主要是运用查表法,即根据要实现的波形制作一张数字量表,在此次实验中,我计划实现正弦波、方波、和扫描波,也就要制作三个表格。
本次实验中每个波形的一周期内包含一百二十八个像素点。
波形曲线可以看成一个函数,屏幕是由一个个像素点组成,它可以看成一个笛卡尔坐标系,曲线的每一个点对应着一个横坐标,对应着一个纵坐标(函数值),不同的曲线有不同的函数,只要找到曲线上点的坐标(函数值)就可以绘制出不同的曲线,所以,问题的关键就在于如何获得并显示出不同波形曲线的函数值。
1.2程序流程图
程序从初始化开始,首先让指针指向提示信息一,即在屏幕上显示:
'1sin;2cos;3scanning;4clear;E/eexit;right/leftchangephase;0ah,0dh,'$';按键提示菜单
当有键按下后,如果键是1,则转向执行产生正弦波的程序;
如果键不是1,则看键是否为2。
如果键是2,则转向执行产生方波的程序;
如果键也不是2,则看是否为3。
如果是3,则转向执行扫描波的程序;
如果也不是3,则看是否为4。
如果是4,则转向执行清屏的程序;如果也不是4,则看是否是e或者E。
如果是e或者E,则转向执行结束程序。
以正弦波为例,当程序判断为按键1时,继续判断是否为“→”,“←”,若为是则执行右移,左移。
其他波形同正弦波,
Y
N
Y
N
Y
N
Y
N
Y
N
Y
N
N
Y图1-2程序流程图
2程序设计与实现
2.1初始条件
1.用于调试程序的IBM兼容PC机一台;
2.安装DOS/WIN98操作系统或运行于DOS/WIN98兼容方式;
3.EDIT等文本编辑器输入80x86汇编程序,MASM5.0编译及链接程序。
2.2设置屏幕显示方式
IBM-PC的标准显示适配器,一种是彩色/图形适配器EGA和VGA,,它能以文本和图形两种方式工作。
另一种是单色显示,它只能显示黑白字母、数字、符号和菱形等简单的图形字符,它是以文本方式工作的。
在彩色/图形适配器中把屏幕分成M*N个点阵,每个坐标上的图像元素就是一个像素。
调用方式如下:
入口参数:
AH=0(功能号),AL=设置方式。
部分显示设置方式调用参数如表2-1。
出口参数:
无。
表2-1部分显示设置方式表
调用参数AL
显示方式
00H
40*25黑白字符方式
01H
40*25彩色字符方式
02H
80*25黑白字符方式
03H
80*25彩色字符方式
04H
320*200彩色图形方式
11H
640*480单色图形
12H
640*48016色图形
本设计中选用04号功能,设置屏幕分辨率为320*200,彩色图形方式,字符分辨率为80*25。
其中屏幕的最左上角坐标为(0,0)。
程序模块如下:
;设置屏幕显示方式宏
SETSCREENMACRO;设置屏幕显示方式
MOVAH,0
MOVAL,04H;设置彩色4色,320*200,文本80*25
INT10H
ENDM
2.3输出文本信息
在程序设计中,文本提示信息的输出有着非常重要的作用。
汇编语言中,可以通过调用DOS中断,int21h处理输入和输出信息,同时还可以通过BIOS中断int10h设置输出字符的起始位置。
设置输出字符的起始位置模块如下:
MOVAH,2;用文本坐标下设置光标位置
MOVDH,X;第一个字符输出的行坐标
MOVDL,Y;第一个字符输出的列坐标
INT10H
显示字符串需要调用int21h中断的09号功能。
程序模块如下:
;设置输出宏,带参数
OUTPUTMACROMESS;输出宏
MOVAH,2
MOVDH,22;行坐标0-25
MOVDL,1;列坐标0-80
INT10H;设置标题开始位置80*25
MOVDX,OFFSETMESS
MOVAH,9
INT21H
ENDM
宏执行完成后,将在22行第一列开始输出变量mess的字符串。
2.4键盘处理子程序
键盘处理使用BIOS或者DOS键盘中断,BIOS中断INT16H,本程序中使用DOS键盘中断,调用如下:
MOVAH,0CH;清除键盘缓冲区
MOVAH,7;等待从键盘输入一个字符,不回显
INT21H
MOVBX,128
2.5绘制图形
本设计选用的屏幕显示方式为320*200彩色图形方式,即横坐标有320个点,纵坐标有200个点,默认左上角为坐标原点(0,0)。
要画出波形曲线,则要每个横坐标都对应着一个纵坐标的值。
值不同绘制出的波形曲线也不同。
把不同的曲线纵坐标的值储存在表中,通过查表可以得到不同曲线。
每种曲线每周期取128个点,然后在屏幕上绘制出这些点,从而显示出相应的波形曲线。
屏幕上的图形是由多个像素点组成,所以各种曲线也由多个点组成。
在指定的坐标位置上写像素点的方式如下:
MOVAH,0CH
MOVAL,COLOR;像素点的颜色(0~3)
MOVCX,COL;列号
MOVDX,ROW;行号
INT10H
2.6绘制坐标系
由于屏幕默认的原点为左上角为(0,0),要在屏幕中间绘制曲线,所以在绘制前要进行坐标的变换,转化为笛卡尔坐标系,该子程序如下:
;绘制笛卡尔坐标系
DRAW_ZUOBIAOPROCNEAR;绘制笛卡尔坐标系
MOVCX,0
D_HENG:
MOVAH,0CH
MOVAL,01H;像素的颜色
MOVDL,100
INT10H
INCCX
CMPCX,320
JNED_HENG
MOVCX,0
MOVDL,0
2.7清屏过程
清屏程序的设计原理,是用背景色的像素点重新在全屏进行绘制。
CLEAR1:
MOVAH,0CH
MOVAL,00H;黑色重新刷屏
INT10H
INCCX
CMPCX,320
2.8绘制波形曲线
根据不同的按键值,绘制不同的波形曲线。
如:
DRAW_LINEPROCNEAR;画线过程,先绘制第一周期
PUSHSI
MOVAX,COL
ADDBX,AX
CALLD_LINE
POPSI
CALLDRAW_LINE1
2.9相位的改变
相位的改变原理是当左/右方向键之一按下时,将曲线绘制的起始点向左/右平移10个像素点,然后重新绘制。
改变相位,右方向键按下一次曲线右移10个像素点
KEY_RIGHTPROCNEAR;改变相位,右移10个像素点
MOVCX,COL
ADDCX,10
MOVCOL,CX
CMPTEMP,1
JZRIGHT1
CMPTEMP,2
JZRIGHT2
CMPTEMP,3
JZRIGHT3
RET
KEY_RIGHTENDP
3程序调试及结果
通过运行程序可实现正弦波,方波,扫描波,以及三种波形的相位改变。
调节时如重新回到初始页面,按数字键“4”,即可完成清屏指令并返回最初界面。
按e/E退出程序。
以下位移及幅值改变以正弦波为例。
按下数字‘1’,显示两个周期的正弦波形曲线3-1
图3-1正弦波形
按下方向键右,曲线向右移动,如图3-2
图3-2正弦波右移
按下方向键左,曲线向左移动,如图3-3
图3-3正弦波左移
按下数字‘2’,显示两个周期的方波形曲线,如图3-4
图3-4方波
按下数字‘3’,实现显示多个周期的扫描波形曲线;如图3-5
图3-5扫描波形
按下数字‘4’,实现显示清屏;如图3-6
图3-6清屏
按下E/e键,程序成功
4总结与体会
在实验前我计划,先实现两个波形的显示,并能实现左右移动。
然后加入第三个波形,并实现左右移动。
最终再实现三个波形的幅值调整(或者是上下移动)。
在整个编写、调试过程中状况频出。
比如在开始时,由于未设置兼容模式,导致程序无法运行,一直会弹出如下对话框。
在程序设计过程中还出现了很多问题,有些是由于粗心大意导致的,比如说是英文大小写不一样,符号不一致。
还有些是由于理论知识不足,比如在CALL指令,和跳转指令的运用上不是很熟练。
在整个程序的设计过程中,我最大的感慨就是要学会模块化设计程序,先绘制好流程图,再搞清楚每一个模块要实现的功能,以及怎样实现功能。
通过本次课程设计,学会了用汇编语言设计一个运行于计算机的显示波形的软件,软件应实现根据定义的数组或从键盘输入的数据串显示波形。
掌握了基本程序设计方法、DOS和BIOS调用,掌握了宏汇编的基本概念和方法,熟悉上机操作和程序调试技术,初步具备了软件设计的能力。
但在将计算机理论知识转化为计算机应用知识的同时,也发现了许多薄弱环节,还不能熟练用汇编语言编程,
这次的课程设计,从开始收集材料,再分析理解材料,最后编写、调试程序,一路走来充满艰辛,但更是成长与进步的过程。
希望此次的课程设计能够为以后的专业学习奠定良好的基础。
参考文献
[1]许骏.微型计算机系统原理及应用.广州:
华南理工大学出版社,1996.5
[2]宫云战.微型计算机原理与应用基础教程.北京:
机械工业出版社,1999.5
[3]荀殿栋.微处理器应用技术与实例.北京:
电子工业出版社,1997.11
[4]潘名莲.微计算机原理.北京:
电子工业出版社,2004.7
[5]李志民.计算机原理与汇编语言程序设计.长沙:
中南大学出版社,2001.8
附录1程序
SETSCREENMACRO;设置屏幕显示方式
MOVAH,0
MOVAL,04H;设置彩色4色,320*200,文本80*25
INT10H
ENDM
OUTPUTMACROMESS;输出宏
MOVAH,2
MOVDH,22;行坐标0-25
MOVDL,1;列坐标0-80
INT10H;设置标题开始位置80*25
MOVDX,OFFSETMESS
MOVAH,9
INT21H
ENDM
STACKYSEGMENT
DB250DUP(?
)
STACKYENDS
DATASEGMENT
MENUDB'1sin;2cos;3sanning;4clear;E/eexit;right/leftchangephase',0ah,0dh,'$';按键提示菜单
;正弦表
SINEDB100,98,96,94,92,90,88,86
DB84,82,81,79,77,75,74,72
DB71,69,68,66,65,64,63,62
DB61,61,60,59,59,59,58,58
DB58,58,58,59,59,59,60,61
DB61,62,63,64,65,66,68,69
DB71,72,74,75,77,79,81,82
DB84,86,88,90,92,94,96,98
DB100,102,104,106,108,110,112,114
DB116,118,119,121,123,125,126,128
DB129,131,132,134,135,136,137,138
DB139,139,140,141,141,141,142,142
DB142,142,142,141,141,141,140,139
DB139,138,137,136,135,134,132,131
DB129,128,126,125,123,121,119,118
DB116,114,112,110,108,106,104,102;方波表
COSINEDB58,58,58,58,58,58,58,58
DB58,58,58,58,58,58,58,58
DB58,58,58,58,58,58,58,58
DB58,58,58,58,58,58,58,58
DB58,58,58,58,58,58,58,58
DB58,58,58,58,58,58,58,58
DB58,58,58,58,58,58,58,58
DB58,58,58,58,58,58,58,58
DB58,58,58,58,142,142,142,142
DB142,142,142,142,142,142,142,142
DB142,142,142,142,142,142,142,142
DB142,142,142,142,142,142,142,142
DB142,142,142,142,142,142,142,142
DB142,142,142,142,142,142,142,142
DB142,142,142,142,142,142,142,142
DB142,142,142,142,142,142,142,142
SCANNINGDB116,115,114,113,112,111,110,109;扫描波表
DB108,107,106,105,104,103,102,101
DB100,99,98,97,96,95,94,93
DB92,91,90,89,88,87,86,85
DB116,115,114,113,112,111,110,109
DB108,107,106,105,104,103,102,101
DB100,99,98,97,96,95,94,93
DB92,91,90,89,88,87,86,85
DB116,115,114,113,112,111,110,109
DB108,107,106,105,104,103,102,101
DB100,99,98,97,96,95,94,93
DB92,91,90,89,88,87,86,85
DB116,115,114,113,112,111,110,109
DB108,107,106,105,104,103,102,101
DB100,99,98,97,96,95,94,93
DB92,91,90,89,88,87,86,85
TEMPDB?
;输出曲线类型1正弦2方波3扫描波
COLDW0;象素点行坐标
ROWDB0;象素点列坐标
COLOUR_TEMPDB0;象素点颜色变量
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE,SS:
STACKY
START:
MOVAX,DATA
MOVDS,AX
SETSCREEN;屏幕方式设置
OUTPUTMENU;输出提示信息
CALLDRAW_ZUOBIAO;绘制坐标轴
MOVCOLOUR_TEMP,02H;颜色紫色
;检测按键值
INKEY:
MOVAH,0CH;清除键盘缓冲区
MOVAH,7;等待从键盘输入一个字符,不回显
INT21H
MOVBX,128
CMPAL,'1';若为1,画正弦
JZPAN1
CMPAL,'2';若为2,画方波
JZPAN2;若为3,画扫描波
CMPAL,'3'
JZPAN3
CMPAL,'4';若为4,清屏
JNZINKEY4B
JMPCLEAR_SCREEN
JZINKEY
INKEY4B:
CMPAL,4BH;左键按下左移
JNZINKEY4D
JMPKEY_LEFT
INKEY4D:
CMPAL,4DH;右键按下右移
JNZINKEYE
JMPKEY_RIGHT
INKEYE:
CMPAL,'E';若为E或e,则退出
JNZINKEYE2
JMPQUIT
INKEYE2:
CMPAL,'e'
JNZINKEY
JMPQUIT
JMPINKEY;不断检测键盘键值
PAN1:
;画正弦
LEASI,SINE
MOVROW,0
MOVCOL,0
CALLDRAW_SINE
RET
PAN2:
;画方波
LEASI,COSINE
MOVROW,0
MOVCOL,0
CALLDRAW_COS
RET
PAN3:
LEASI,SCANNING;画扫描波
MOVROW,0
MOVCOL,0
CALLDRAW_SCANNING
RET
KEY_RIGHTPROCNEAR;改变相位,右移10个像素点
MOVCX,COL
ADDCX,10
MOVCOL,CX
CMPTEMP,1
JZRIGHT1
CMPTEMP,2
JZRIGHT2
CMPTEMP,3
JZRIGHT3
RET
KEY_RIGHTENDP
RIGHT1:
;波形重绘
LEASI,SINE
JZDRAW_SINE
RET
RIGHT2:
LEASI,COSINE
JZDRAW_COS
RET
RIGHT3:
LEASI,SCANNING
JZDRAW_SCANNING
RET
KEY_LEFTPROCNEAR;改变相位,左移动10个像素点
MOVCX,COL
SBBCX,10
MOVCOL,CX
CMPTEMP,1
JZLEFT1
CMPTEMP,2
JZLEFT2
CMPTEMP,3
JZLEFT3
RET
KEY_LEFTENDP
LEFT1:
LEASI,SINE
JZDRAW_SINE
RET
LEFT2:
LEASI,COSINE
JZDRAW_COS
RET
LEFT3:
LEASI,SCANNING
JZDRAW_SCANNING
RET
DRAW_SINEPROCNEAR;画正弦过程
CALLCLEAR_SCREEN
MOVCX,COL
MOVTEMP,1
CALLDRAW_LINE
RET
DRAW_SINEENDP
DRAW_COSPROCNEAR;画方波过程
CALLCLEAR_SCREEN
MOVCX,COL
MOVTEMP,2
CALLDRAW_LINE
RET
DRAW_COSENDP
DRAW_SCANNINGPROCNEAR;画扫描波过程
CALLCLEAR_SCREEN
MOVCX,COL
MOVTEMP,3
CALLDRAW_LINE
RET
DRAW_SCANNINGENDP
DRAW_LINEPROCNEAR;画线过程,先绘制第一周期
PUSHSI
MOVAX,COL
ADDBX,AX
CALLD_LINE
POPSI
CALLDRAW_LINE1
D_LINE:
MOVAH,0CH
MOVAL,COLOUR_TEMP;像素的颜色
MOVDL,[SI]
INT10H
INCSI
INCCX
CMPCX,BX
JLD_LINE
RET
DRAW_LINEENDP
DRAW_LINE1PROCNEAR;绘制第二周期
MOVCX,BX
ADDBX,128
CALLD_LINE1
CALLINKEY
D_LINE1:
MOVAH,0CH
MOVAL,COLOUR_TEMP;像素的颜色
MOVDL,[SI]
INT10H
INCSI
INCCX
CMPCX,BX
JLD_LINE1
RET
DRAW_LINE1ENDP
DRAW_ZUOBIAOPROCNEAR;绘制笛卡尔坐标系
MOVCX,0
D_HENG:
MOVAH,0CH
MOVAL,01H;像素的颜色
MOVDL,100
INT10H
INCCX
CMPCX,320
JNED_HENG
MOVCX,0
MOVDL,0
D_ZONG:
MOVAH,0CH
MOVAL,01H;像素的颜色
INT10H
INCDL
CMPDL,200
JNED_ZONG
MOVCX,320
MOVDL,100
HENG_J1:
;绘制横轴箭头上
MOVAH,0CH
MOVAL,01H;像素的颜色
INT10H
SUBCX,2
SUBDL,1
CMPCX,300
JNEHENG_J1
MOVCX,320
MOVDL,100
HENG_J2:
;绘制横轴箭头
MOVAH,0CH
MOVAL,01H;像素的颜色
INT10H
SUBCX,2
ADDDL,1
CMPCX,300
JNEHENG_J2
RET
DRAW_ZUOBIAOENDP
CLEAR_SCREENPROCNEAR;清屏过程
MOVCX,0
MOVDL,0
PUSHAX
CLEAR1:
MOVAH,0CH
MOVAL,00H;黑色重新刷屏
INT10H
INCCX
CMPCX,320
JNECLEAR1
MOVCX,0
INCDL
CMPDL,200
JNECLEAR1
CALLDRAW_ZUOBIAO
POPAX
RET
CLEAR_SCREENENDP
QUIT:
;退出
MOVAH,4CH;结束
INT21H
CODEENDS
ENDSTART
本科生课程设计成绩评定表
姓名
性别
男
专业、班级
课程设计题目:
计算机波