霓虹灯模拟显示课程设计.docx

上传人:b****1 文档编号:13227431 上传时间:2023-06-12 格式:DOCX 页数:21 大小:138.43KB
下载 相关 举报
霓虹灯模拟显示课程设计.docx_第1页
第1页 / 共21页
霓虹灯模拟显示课程设计.docx_第2页
第2页 / 共21页
霓虹灯模拟显示课程设计.docx_第3页
第3页 / 共21页
霓虹灯模拟显示课程设计.docx_第4页
第4页 / 共21页
霓虹灯模拟显示课程设计.docx_第5页
第5页 / 共21页
霓虹灯模拟显示课程设计.docx_第6页
第6页 / 共21页
霓虹灯模拟显示课程设计.docx_第7页
第7页 / 共21页
霓虹灯模拟显示课程设计.docx_第8页
第8页 / 共21页
霓虹灯模拟显示课程设计.docx_第9页
第9页 / 共21页
霓虹灯模拟显示课程设计.docx_第10页
第10页 / 共21页
霓虹灯模拟显示课程设计.docx_第11页
第11页 / 共21页
霓虹灯模拟显示课程设计.docx_第12页
第12页 / 共21页
霓虹灯模拟显示课程设计.docx_第13页
第13页 / 共21页
霓虹灯模拟显示课程设计.docx_第14页
第14页 / 共21页
霓虹灯模拟显示课程设计.docx_第15页
第15页 / 共21页
霓虹灯模拟显示课程设计.docx_第16页
第16页 / 共21页
霓虹灯模拟显示课程设计.docx_第17页
第17页 / 共21页
霓虹灯模拟显示课程设计.docx_第18页
第18页 / 共21页
霓虹灯模拟显示课程设计.docx_第19页
第19页 / 共21页
霓虹灯模拟显示课程设计.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

霓虹灯模拟显示课程设计.docx

《霓虹灯模拟显示课程设计.docx》由会员分享,可在线阅读,更多相关《霓虹灯模拟显示课程设计.docx(21页珍藏版)》请在冰点文库上搜索。

霓虹灯模拟显示课程设计.docx

霓虹灯模拟显示课程设计

霓虹灯模拟显示课程设计

1.设计任务及要求分析

本次课程设计要求用汇编语言设计“霓虹灯”模拟显示,需要实现的功能如下:

1、按下b/B键,分六笔快速画出矩形及其两条对角线;2、按下y/Y键,流水灯从左到右依次点亮,然后一次熄灭;3、按下q/Q键,退出程序。

分析本设计不需要硬件设备,在微机原理实验集成环境MF2KP中编写程序,调用DOS命令和BIOS命令,并用合适的字符代替霓虹灯来实现。

1方案论证

2.1方案一

我们可以采用编写延时子程序的方法来实现延时,这种方法的主要原理是运用计算机相应每一条的时间积累。

程序如下:

pushbx

pushcx

movcx,xx;输入正数

A1:

movbx,xx;输入正数

A2:

decbx

JnzA1

LoopA2

popcx

popbx

此方案的原理是运用循环指令来进行,主要通过设置cx和bx的值来进行复循环,从而达到时间的积累即延时。

2.2方案二

方案二:

运用DOS功能调用。

采用21H来中断调用,功能号为AH=2CH,完成的功能是设置时间,DH的值变换一次是0.01秒,这样通过设置DH的值来设置时间的延时。

2.3方案比较

两种方案在理论上都是可行的,但是课程设计任务在时间要求上不是很严格

只要区分快慢的大概效果既可,故选择方案一。

3设计原理

3.1设计思想

本次课程设计主要中显示图案是通过显示单个字符逐步实现的,通过移动光标可以改变字符输出的位置,位置的改变又是通过宏定义定义了一个程序段用于改变光标,设计了两个变量分别为光标在屏幕上的行和列坐标,把已经设计好了的图案的行列坐标分别定义在数据段的行列数据组里,用指针自加的方式进行连续调用显示。

在显示中插入延时程序控制显示的效果。

本次课程设计设计了二个延时程序分别满足二种不同的延时需要。

延时程序是通过LOOP循环来实现的,可以改变CX的值来改变延时的长短。

本次课设还涉及到清屏功能,故设计了一个清屏子程序,通过BIOS功能的调用实现清屏,和屏幕属性的设置。

整个程序分为三部分:

第一段是继续与否的选择,检查输入是否为设计的字符b/B,是则进入下一程序断,否则继续检测;第二段是快速显示设计图案,通过光标移动逐步显示完预设图案,并询问是否进入下一程序段,检查输入是否为字符y\Y,是则进入下一程序段,否则跳回第二段程序重复执行一遍;第三段程序以较慢速度依次出现“*”,以实现模拟流水灯的效果,然后一次消失,在这个过程中检查是否有“q/Q”输入,有则跳转到中止程序段退出程序,否则继续。

3.2程序中用到的DOS功能调用

(1)01H号功能调用(中断指令int21h)

功能:

从键盘输入1个字符

输入参数:

输出参数:

AL=ASCII码

(2)02H号功能调用(中断指令int21h)

功能:

在屏幕上显示1个字符(ASCII码)

输入参数:

DL=ASCII码

输出参数:

无。

(3)09H号功能调用(中断指令int21h)

功能:

多字符输出到屏幕显示

输入参数:

DS:

DX=输出字符缓冲区首地址

输出参数:

该功能对输出字符的个数没有要求,但输出字符串要以‘$’结束。

(4)4CH号功能调用(中断指令int21h)

功能:

返回操作系统4CH

调用:

MOVAH,4CH

3.3程序中用到的BIOS功能调用

1)功能01H调用(中断指令int16h)

功能描述:

检测键盘

输出参数:

ZF=1无码可读

ZF=0输入于AX中

2)功能02H调用(中断指令int10h)

功能描述:

用文本坐标下设置光标位置

入口参数:

AH=02H

BH=页号

DH=行坐标

DL=列坐标

出口参数:

3)功能06H调用(中断指令int10h)

功能描述:

初始化屏幕或滚屏

入口参数:

AH=06H向上滚屏,AH=07H向下滚屏

AL=滚动行数(0,清窗口)

BH=空白区域的缺省属性

(CH、CL)=窗口的左上角坐标(X、Y)

(DH、DL)=窗口的右下角坐标(X、Y)

出口参数:

4.程序设计流程图

程序流程图如下图所示,分为主程序流程图和子程序流程图。

主程序流程图如图4—1所示;置光标宏定义流程图如图4—2所示;延时子程序流程图如图4—3所示;字符显示流程图如图4—4所示。

 

 

 

 

图4—1主流程图图4—2置光标宏定义

 

图4—3延时子程序流程图图4—4显示字符程序段流程图

本次课程设计用到了二个不同大小的延时效果,故在延时程序中改变CX的赋值来改变延时长短。

清屏子程序流程图与置光标宏定义类似只需改变相应寄存器赋值和调用中断号即可。

显示图案时分部分显示连续的字符就能达到显示整个图案的效果。

5.主要程序分析

5.1设置光标的宏定义

程序如下:

MAmacroop1,op2

pushax;保存数据

pushbx

movah,02h

movbh,0

movdh,op1;光标纵坐标

movdl,op2;光标横坐标

int10h

popbx

popax

Endm

该宏定义主要是调用功能02H(中断指令“INT10H”)来确定光标的位置的。

该定义的主要功能首先是指定位置来完成字符‘@’或‘*’的显示与消失。

5.2时间延迟程序

程序如下:

waiting_1procnear

pushcx

pushdx

movdx,0ffh

dll:

movcx,65500

dl2:

loopdl2

decdx

jnzdll

popdx

popcx

ret

waiting_1endp

waiting_2procnear

pushcx

pushdx

movdx,0fffh

d2l:

movcx,65500

d22:

loopdl2

decdx

jnzdll

popdx

popcx

ret

waiting_2endp

本题目中需要两种不同的延迟,通过改变dx的值来大致控制时间的长短。

6.程序调试显示

6.1矩形及其对角线的显示

程序运行之初,首先在屏幕上出现提示字符“pleaseinputbtobegin”如图6—1所示,按下b/B键,屏幕上以较快速度分六笔画出矩形及其对角线,并由提示符“pleaseinputytochose”如图6—2所示。

图6—1初始提示字符

图6—2矩形及其对角线的显示

6.2流水灯的运行

根据提示符,按下Y/y键,屏幕和字符的颜色会变化,用*号代替灯来流水灯的效果,如图6—3所示,然后依次熄灭,并出现提示符“pleaseqtoquit”

如图6—4。

最后根据提示符,按下Q/q键,退出程序。

如图6—3流水灯出现

6—4图流水灯消失

7.心得体会

两周的课程设计就这样匆匆结束,感觉时间很快,但是本次课程设计让我学到了很多东西。

首先,通过对这程序的制作,加深了我对课本知识的理解和掌握,使我对汇编语言的基本知识的使用更加熟练,同时也让我学到了新的知识,如DOS命令和BIOS命令的调用,让我大胆编写程序,实现自己想要的功能。

其次,在这次课程设计,需要与同学充分交流,加强团结合作的技巧。

通过查阅以下资料如课本以及网络也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。

此外,通过这个课程设计,让我切实的体会到了微机原理的重要性,同时增强了我的学习兴趣,然我发现,实际生活的常用知识都来自于我们所学的课本基础知识。

本次课程设计是一个综合的程序,平时的很多程序都用到了。

很多子程序的设计是固定的,因此可以直接从指导资料中调用,大多只需要修改几个参数就可以,这大大方便了我们的设计,为我们节省了很多的时间。

特别之处的是,通过本次‘霓虹灯’模拟显示的课程设计,我掌握了关于DOS和BIOS中断功能调用,如颜色显示,屏幕属性,字符输入\输出,字符串输入\输出等。

通过综合程序编写的联系,学会了编写相对复杂程序的基本方法步骤。

由于和同学相互交流学习,加强了合作能力,当要用到一些完全陌生的知识时需要独立去查询资料,加强了自学能力。

以上心得体会势必对我以后的学习和工作大有帮助,衷心感谢学校给我们这个宝贵的学习机会和老师的耐心指导!

 

参考资料

[1]齐志儒、高福祥.汇编语言程序设计.沈阳:

东北大学出版,2001

[2]刘均、周苏、金海荣.汇编语言程序设计实验教程.北京:

科学出版社,2009

[3]周佩玲、彭虎、傅忠谦.微机原理与接口技术.北京:

电子工业出版社,2005

[4]方立友.微机原理与汇编语言实用教程.北京:

清华大学出版社,2007

[5]凌志浩.微机原理与接口技术.上海:

华东理工大学出版社,2006

[6]朱世鸿.微机系统和接口应用技术.北京:

清华大学出版社,2006

 

 

附录

程序清单如下所示:

MAmacroop1,op2

pushax;保存数据

pushbx

movah,02h

movbh,0

movdh,op1;光标纵坐标

movdl,op2;光标横坐标

int10h

popbx

popax

endm

datasegment

info_1db'pleaseinputbtobegan',0dh,0ah,'$'

info_2db'pleaseinputytochooseanotherway',0dh,0ah,'$'

info_3db'pleaseqtoquit',0dh,0ah,'$'

hang_1db8,8,8,8,8,8,8,8,8,8

db8,9,10,11,12,13,14,15,16,17

db17,17,17,17,17,17,17,17,17,17

db17,16,15,14,13,12,11,10,9,8,7

hang_2db8,9,10,11,12,13,14,15,16,17

db8,9,10,11,12,13,14,15,16,17

hang_3db14,14,14,14,14,14,14

lie_1db35,36,37,38,39,40,41,42,43,44

db44,44,44,44,44,44,44,44,44,44,

db44,43,42,41,40,39,38,37,36,35

db35,35,35,35,35,35,35,35,35,35

lie_2db35,36,37,38,39,40,41,42,43,44

db44,43,42,41,40,39,38,37,36,35

lie_3db30,32,34,36,38,40,42

countdb8

clourdb0f7h

dataends

codesegment

assumeds:

data,cs:

code

;**********清屏子程序*********

clear_screenprocnear

pushax

pushbx

pushcx

pushdx

movah,6

moval,0

movch,0

movcl,0

movdh,24

movdl,79

movbh,7

int10h

popdx

popcx

popbx

popax

ret

clear_screenendp

;**********延迟子程序********

waiting_1procnear

pushcx

pushdx

movdx,0ffh

dll:

movcx,65500

dl2:

loopdl2

decdx

jnzdll

popdx

popcx

ret

waiting_1endp

waiting_2procnear

pushcx

pushdx

movdx,0fffh

d2l:

movcx,65500

d22:

loopdl2

decdx

jnzdll

popdx

popcx

ret

waiting_2endp

start:

movax,data

movds,ax

xorax,ax

xorbx,bx

xorcx,cx

xordx,dx

movah,02h;置光标位子

movbh,0;BH=页数

movdh,0;DH\DL=行列数

movdl,0

int10h

info:

leadx,info_1;提示字符输出

movah,9

int21h

movah,01h

int21h

cmpal,'b';输入字符检查是否为g/G

jexianshi_1;是则跳转到xianshi_1

cmpal,'B';否则跳回info重新检查

jexianshi_1

jmpinfo

;**********方式一显示程序********

xianshi_1:

movah,06h;屏幕初始化

movbh,29H;卷入行属性

movcx,0;左上角行列坐标(0,0)

movdx,1850h;右下角行列坐标(80,80)

int10h

leasi,hang_1;取hang_1,lie_1字符串的首地址

leadi,lie_1

movcx,40;cx赋值确定循环次数

loop_1:

MA[si],[di];调用宏定义移动光标

movdl,'@'

movah,02;在光标处显示输出‘*’

int21h

incsi;指针自加

incdi

MA0,0;移动光标

callwaiting_1;延时

looploop_1;循环loop_1

xianshi_2:

;显示图案第二部分

leasi,hang_2

leadi,lie_2

movcx,20

loop_2:

MA[si],[di]

movdl,'@'

movah,02

int21h

incsi

incdi

MA0,0

callwaiting_1

looploop_2

leadx,info_2;方式选择提示

movah,9

int21h

movah,01h

int21h

cmpal,'y';检查输入字符是否为y/Y

jeliushui;是,则跳转到liushui

cmpal,'Y';否,则跳转到xianshi_1

jeliushui

callclear_screen;调用清屏程序

jmpxianshi_1

;**********流水灯子程序*******

liushui:

callclear_screen;清屏

xorax,ax

xorbx,bx

xorcx,cx

xordx,dx

movah,06h;屏幕初始化

movbh,4ah;卷入行属性

movcx,0;左上角行列坐标(0,0)

movdx,1850h;右下角行列坐标(80,80)

int10h

MA0,0;提示语显示

leadx,info_3

movah,9

int21h

callwaiting_1

xianshi_3:

;快速形成图案

leasi,hang_3

leadi,lie_3

movcx,7

loop_3:

MA[si],[di]

movdl,'*'

movah,02

int21h

incsi

incdi

MA0,0

callwaiting_2;延时减小

looploop_3

xianshi_4:

;快速形成图案

leasi,hang_3

leadi,lie_3

movcx,7

loop_4:

MA[si],[di]

movdl,''

movah,02

int21h

incsi

incdi

MA0,0

callwaiting_2;延时减小

looploop_4

;****检测是否按下Q键********

movah,01h

int21h

cmpal,'Q'

jeQUIT

cmpal,'q'

jeQUIT

jmpliushui

;*******中止程序********

QUIT:

movah,4ch

int21h

codeends

endstart

 

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2