微机课设计算机波形显示软件设计.docx

上传人:b****8 文档编号:9135326 上传时间:2023-02-03 格式:DOCX 页数:28 大小:201.32KB
下载 相关 举报
微机课设计算机波形显示软件设计.docx_第1页
第1页 / 共28页
微机课设计算机波形显示软件设计.docx_第2页
第2页 / 共28页
微机课设计算机波形显示软件设计.docx_第3页
第3页 / 共28页
微机课设计算机波形显示软件设计.docx_第4页
第4页 / 共28页
微机课设计算机波形显示软件设计.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

微机课设计算机波形显示软件设计.docx

《微机课设计算机波形显示软件设计.docx》由会员分享,可在线阅读,更多相关《微机课设计算机波形显示软件设计.docx(28页珍藏版)》请在冰豆网上搜索。

微机课设计算机波形显示软件设计.docx

微机课设计算机波形显示软件设计

摘要

运用微机课程中的相关知识,设计一个可以实现波形显示的软件。

通过键盘输入特定的参数来实现波形的变换及相位的调整。

设计波形中利用笛卡尔坐标和屏幕像素完成波形绘制,实验中,利用插标法产生正弦波,绘制一张正弦数字量表。

运用基本程序设计方法、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

 

本科生课程设计成绩评定表

姓名

性别

专业、班级

课程设计题目:

计算机波

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1