版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微机接口研究性教学专题三题目名称 (题目2 ) 简单动画设计 学院 电信学院 班级 组员 教师 一 概述1. 课程设计的目的对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。汇编语言程序设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。培养学生综合运用所学知识独立完成汇编程序课题的能力。使学生能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
2、提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。2. 课程设计的要求利用BIOS系统功能调用,进行简单的动画设计,并根据以下提示信息进行选择: 1小鸟从屏幕飞过; 2汽车按水平方向从屏幕上“开”过去; 3退出提高要求:加入音乐播放。二 方案设计1. 主程序设计思想:此动画程序要求结构化的显示两个动画效果:小鸟飞过和小车开过。程序要求能多次执行以上
3、两种动画并有退出选项。则我们可以设计三个选项以供用户选择:1-小鸟、2-小车和q-退出程序。三个选项分别可以用三个过程实现其功能。动画的原理实质上是在屏幕上连续的间隔较小的地方显示相同的图案。由于人眼具有视觉暂留的特性,我们就会看到“运动”的画面。2. 小鸟及汽车图案和加入音乐设计思想:首先讨论小鸟图像形成及移动部分的方案。我们通过查阅资料,决定以一组字符组合来形成小鸟图像(即文本方式),用字符形成小鸟图像,主要是利用BIOS中的INT 10H中断,即显示器中断,INT 10H中的09H号功能是在光标制定位置处写字符和属性。程序结构图大致如下:MOV AH,09H ;置光标MOV AL,字符
4、;字符ASCII码MOV BL,7 ;字符属性MOV BH,0 ;第0页MOV CX,数量值 ;字符重复个数INT 10H汽车图形由7个文本字符组成,从左到右,车体是由字母R(ASCII码为52H),1/2阴影符(ASCII码为B1H),和两个实心方块(ASCII码为DBH)组成,两个车轮是字母O(ASCII码为4FH),和笑脸符号(ASCII码为02H),以上七个文本字符都是以正常属性显示。汽车各字符的相对位移量如图2.2:R(0,0)(0,-3)(0, 1) (0, 1)(1, 0)(0,1)(-2, 1)图2.2 汽车字符表开始显示车体,R是显示的第一个字符,其相对位移量定为(0,0),
5、第二个阴影符号在R的右边一列,所以相对R的位移量为(0,1),两个实心方块都是在前一个字符的同一行的右边一列,所以位移量都为(0,1)。前轮比最后一个方块符号的行数加1,但仍在同一列上,所以它的位移量为(1,0),后轮相对前轮行数不变,但列数减了3,所以位移量应是(0,-3)。最后显示出笑脸,是相对于后轮位移量是(-2,1)。如汽车图形可定义变量定义如下:CAR DB 7 DB 52H,7,0,0 ;字符R的ASCII码,及字符属性值为7,相对位移量为0,0DB 0B1H,7,0,1 ;阴影符的ASCII码,及字符属性值为7,相对位移量为0,1DB 0DBH,7,0,1 ;实心方块的ASCII
6、码,及字符属性值为7,相对位移量为0,1DB 0DBH,7,0,1 ;实心方块的ASCII码,及字符属性值为7,相对位移量为0,1DB 4FH,7,1,0 ;大写字母O的ASCII码,及字符属性值为7,相对位移量为1,0DB 4FH,7,0,-3 ;大写字母O的ASCII码,及字符属性值为7,相对位移量为0,-3DB 02H,7,-2,1加入音乐程序也是一个比较重要的环节,我们尝试了好听的音乐,未成功,所以这里采用了产生指定频率声音,中间涉及到扬声器发声部分。我们采用了定时器控制。产生指定频率声音的程序段如下:PUSH AX;保存ax的值MOV AL,0B6H ;给2号定时器的43端口送入一个
7、特定的数0B6HOUT 43H,ALMOV AX,34DCHDIV BXOUT 42H,AL ;给42H端口装入一个16位的计时常数(533H*896/频率)MOV AL,AHOUT 42H,ALIN AL,61H;获取61h端口的当前值ORAL,03H;把61h端口低二位置1,即打开蜂鸣器OUT61H,AL;输出数据到61h端口POPAX;恢复ax的值 主程序: CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: MOV AX,DATA MOV DS,AX MOV AH,0MOV AL,4 ;设置显示方式为320*200彩色图
8、形方式 INT 10H LEA DX,STRING MOV AH,9 ;在显示器上显示字符串提示信息 INT 21H MOV AH,1 INT 21H ;从键盘读取字符到AL寄存器 CMP AL,1 ;比较AL是否等于1 JNE A ; 不相等则转移到A CALL xiao ;相等则调用xiao子程序 A: CMP AL,32H ;比较AL是否等于2 JNE B ; 不相等则转移到B CALL qiche ; 相等则调用qiche子程序 B: CMP AL,q ;比较AL是否等于q JNE START ; 不相等则转移到START,重新输入字符 MOV AH,4CH ; 相等则终止当前程序。
9、INT 21H主程序主要实现与用户的交互,首先程序会提示用户想要进行什么操作。是显示小鸟动画、汽车动画还是退出。这里对应的给用户提供的选项是“1”、“2”和“q”。当用户输入他们的选项之后,主程序要判断用户的输入调用相应的功能模块来满足用户的要求。我们假设用户输入字符为X,那么首先我们将X与“1”比较。如果相同则程序调用小鸟动画模块为用户显示动画。若不为“1”则要继续与“2”想比较。相等则调用汽车动画,不等则继续与“q”想比较。相等则正常退出,不等则说明用户输入非法字符主程序返回到选择界面用户可以继续选择。特别说明:汇编语言的选择结构不同于C语言的选择结构,程序设计过程中要特别小心。避免将造成
10、潜在的BUG.2) 清屏宏定义CLEAR MACRO pch,pcl,pdh,pdl,pbh ;清屏宏定义 MOV AH,0 MOV AL,4 INT 10H MOV AH,6
11、160; ;调用6号功能 MOV AL,0 ;设置整个屏幕为空白 MOV CH,pch
12、0; MOV CL,pcl ;窗口左上角(0行,0列) MOV DH,pdh MOV DL,pdl ;窗口右下角(24行,79列) &
13、#160; MOV BH,pbh ;正常属性显示 INT 10HENDM宏定义分为带参宏定义与无参宏定义。宏定义的功能旨在减少代码量和提高程序的结构化程度。一个定义好的宏可以在程序中被多次调用,从而增加了程序员和程序本身的效率。其中,无参宏定义的格式为:宏名 MACRO 宏体 ENDM带参宏定义的格式为:宏名 MACRO 形参1,形参2 宏体 ENDM它们的调用格式为:宏名 实参清
14、屏宏为一个带有五个参数的带参宏。它的功能是将屏幕中一定区域的内容清楚,为接下的显示提供屏幕空间。要想进行显示操作就要了解BIOS(INT 10H)调用。清屏宏中用到了六号功能调用:6号功能:初始窗口或向上滚动入口参数:AH=6,AL=上滚行数(AL=0时,整个屏幕为空白) CX=上滚窗口左上角的行、列号 DX=上滚窗口右下角的行、列号 BH=空白行的属性出口参数:无在清屏宏的五个参数中,pch和pcl的值分别赋给CH和CL寄存器,这样所要清屏区域的左上角的坐标就设置好了。同样,将pdh和pdl的值赋给DH和DL寄存器,设置好右下角的坐标。BH寄存器取得pbh的值设置空白行的属性。最后INT 1
15、0h,调用BIOS显示设置实现清屏功能。三 流程设计和程序编写1. 主程序流程图 如图3.1:图3.1 主程序流程图t图2. 源程序代码源代码:DATA SEGMENTINFO1 DB 0DH,0AH,'INPUT 1,2,OR q:(1:bird,2:car,q:exit) $'BUFA DB 200 DB ? DB 200 DUP(0)BUFB DB 200 DUP(?)CAR DB 7 ;小汽车的字符图形表 DB 52H,7,0,0 DB 0B1H,7,0,1 DB 0DBH,7,0,1 DB 0DBH,7,0,1 DB 4FH,7,1,0 DB 4FH,7,0,-3 D
16、B 2,7,-2,1 CHAR_CNT DW ? POINTER DW ? LINE_ON DB ? COL_ON DB ?ZONGZUOBIAO DB 13,13,11,10,10,9,20,6,9,5,3,2,1,9,19,9,10,11,11,11,12,13,14;小鸟的字符图形表HENGZUOBIAO DB 1,2,3,4,5,6,6,7,7,8,9,10,11,12,12,13,14,15,16,17,18,19,20SHULIANG DB 2,4,6,7,7,8,3,1,14,18,20,20,23,7,4,6,5,4,4,4,3,2,1FLAG DW 0YIDONG DB 0Y
17、ANSHI DW 0DATA ENDSSTACK SEGMENT stack DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKstart:mov ax,data mov ds,ax mov ah,0 ;设置显示方式为320*200彩色图形方式 mov al,3 int 10h lea dx,info1 ;在显示器上显示字符串提示信息 mov ah,9 int 21h mov ah,0 ;从键盘读取字符到AL寄存器 int 16h CMP AL,31H ;比较AL是否等于1 JNE A CALL XIAO A:
18、 CMP AL,32H ;比较AL是否等于2 JNE B CALL QICHE B: CMP AL,71H ;比较AL是否等于q JNE START MOV AH,4CH ;终止当前程序并返回调用程序 INT 21HCLEAR MACRO pch,pcl,pdh,pdl,pbh ;清屏宏定义 MOV AH,0 MOV AL,4 INT 10H MOV AH,6 ;调用6号功能 MOV AL,0 ;设置整个屏幕为空白 MOV CH,pch MOV CL,pcl ;窗口左上角(0行,0列) MOV DH,pdh MOV DL,pdl ;窗口右下角(24行,79列) MOV BH,pbh ;正常属性
19、显示 INT 10HENDMxiao proc ;小鸟子程序 PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV FLAG,0 MOV YIDONG,70;描绘小鸟图像LOOP4: MOV AH,02H ;设置光标位置 LEA BX,HENGZUOBIAO MOV CX,FLAG ADD BX,CX MOV DH,BX ;DH代表行号 LEA BX,ZONGZUOBIAO ADD BX,CX MOV DL,BX ;DL代表列号 ADD DL,YIDONG MOV BH,0 ;表示页号 INT 10H MOV AH,09H ;在当前光标位置处写字
20、符和属性 MOV AL,76H ;设置字符ASCII码 LEA BX,SHULIANG MOV DX,FLAG ADD BX,DX MOV CL,BX ;CX代表写入字符数 MOV CH,0 MOV BH,0 MOV BL,16H ;字符属性 INT 10H INC FLAG CMP FLAG,22 ;表示要写23次 JNA LOOP4 ;JMP LOOP3 Fasheng:;发声程序MOVAL,0B6HOUT43H,ALMOV AX,34DCHMOV DX,12HDIV BXOUT 42H,ALMOV AL,AHOUT 42H,ALIN AL,61HOR AL,03HOUT 61H,ALLO
21、OP3: MOV FLAG,0;小鸟飞行程序LOOP2: MOV AH,02H ;置光标位置 LEA BX,HENGZUOBIAO MOV CX,FLAG ADD BX,CX MOV DH,BX LEA BX,ZONGZUOBIAO ADD BX,CX MOV DL,BX ADD DL,YIDONG ;纵坐标(相当于列)加上40 MOV BH,0 ;选择在第0页 INT 10H MOV AH,09H ;在当前光标位置处写字符和属性 MOV AL,76H ;字符的ASCII码值 LEA BX,SHULIANG MOV DX,FLAG ADD BX,DX MOV CL,BX ;cx为写入的字符数
22、MOV CH,0 MOV BH,0 ;写入的页数 MOV BL,16H ;字符属性 INT 10H INC FLAG CMP FLAG,22JNA LOOP2 ;JIXU: mov YANSHI,5 CALL DLY MOV AH,02H MOV DX,0 MOV BH,0 INT 10H MOV AH,09H ;清除前一帧图像 MOV AL,' ' MOV CX,1700 MOV BL,07H INT 10H DEC YIDONG CMP YIDONG,0 ;飞行到纵坐标为0处时将重新从开始出飞行 JA LOOP3 MOV YIDONG,70 JMP LOOP3 TUICHU
23、:RETxiao endpDLY PROC NEAR ;延时子程序 PUSH CX PUSH DX MOV DX,1000DL1: MOV CX,680DL2: LOOP DL2 DEC DX JNZ DL1 POP DX POP CX RETDLY ENDPQICHE PROC near ;汽车子程序 PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,0 MOV AL,4 INT 10H MOV AH,0BH ;设置彩色组颜色为绿、红、黄 MOV BH,01 MOV BL,00 INT 10H CLEAR 33,33,24,79,7 ;清屏宏调用 LEA DI,C
24、AR ;DI指向字符图形表 MOV DH,10 ;从第5行5列位置开始显示汽车 MOV DL,0 CALL MOVE_SHAPE RETQICHE ENDPMOVE_SHAPE PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AH,0FH ;取当前显示方式 INT 10H SUB CH,CH MOV CL,DI ;CL放字符个数 INC DI ;DI指向字符图形表中的第一个字符 MOV CHAR_CNT,CX MOV POINTER,DI MOV LINE_ON,DH MOV COL_ON,DLPLOT_NEXT: ADD DH,DI
25、+2 ;改变行列坐标 ADD DL,DI+3 CMP DL,80 ;出屏否? JB MOV_CRSR Pop DI Pop DX Pop CX Pop BX Pop AX jmp exit2MOV_CRSR: MOV AH,2 INT 10H MOV AL,DI ;取字符值 MOV BL,DI+1 ;取字符属性 PUSH CX MOV CX,1 MOV AH,09 ;显示字符 INT 10H POP CX ADD DI,4 ;DI指向下一个字符 LOOP PLOT_NEXT CALL DLY CALL ERASE JMP SHORT PLOT_NEXTexit2: ret MOVE_SHAPE
26、 ENDPERASE PROC NEAR MOV CX,CHAR_CNT MOV DI,POINTER MOV DH,LINE_ON MOV DL,COL_ONERASE_NEXT: ADD DH,DI+2;修正光标的行坐标 ADD DL,DI+3;修正光标的列坐标 MOV AH,2 INT 10H;设置光标位置 MOV AL,DI;以黑色的相同字符覆盖原有的图案实现擦除图案的功能 MOV BL,0;设置字符属性为0,黑色 PUSH CX MOV CX,1;设置显示字符次数为1 MOV AH,9 INT 10H;9号调用,显示黑色字符,擦除字符 POP CXADD DI,4;指向下一个要用来擦
27、除的字符 LOOP ERASE_NEXTLOOP ERASE_NEXT MOV CX,CHAR_CNT MOV DI,POINTER MOV DH,LINE_ON INC COL_ON MOV DL,COL_ON RETERASE ENDPCODE ENDS END start运行可执行程序CAR.exe,选择1,小鸟飞过;选择2,汽车开过;选择q,退出。四、调试结果与分析4.1 电路连接一般无须连接电路,如果想要听到笑鸟鸣叫声大一点,可以把电脑里面的蜂鸣器接口用导线引出来,外接一个大的扬声器,效果可能好一点。4.2 调试步骤1)运行MF2KP汇编软件,在里面编辑源程序,编辑完成之后,生成.A
28、SM文件,保存该该文件;2)接着仍用上面的软件进行编译,连接,运行生成.EXE文件;3)运行所生成的EXE文件即可产生所需要的结果。程序正常运行截图如下面的几幅图像所示。当点击开.EXE文件之后,出来一个界面,提示输入1,2或者q(1)当输入为1时,得到了下面的用v组成的在“飞行”的大鸟。且可以发出声音(声音程序部分可以跳过去,若将程序中的“;loop3”改成“loop3”则不发生):(2)初始化图像当按下按键2时,出现移动的小车:(3)初始化图像当按下按键2时, 退出程序。5、 调试中出现的问题、原因及排除方法在编程调试的过程中,遇到了很多麻烦,总结起来有以下几点:问题1:当我们将程序start:mov ax,data mov ds,ax mov ah,0 ;设置显示方式为320*200彩色图形方式 mov al,3中最后一句改成mov al,4,则组成的小鸟异动到屏幕左端会突然出现有一行v显示不了的问题,而且整体的形状看起来也不稳定。如下图原因:mov al,4中不是文本格式解决办法:改成文本格式,将4换成3或者0,1,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年苏州百年职业学院中单招职业技能考试题库及答案详解一套
- 2026年安徽中医药高等专科学校单招职业适应性测试题库及参考答案详解一套
- 2026年南阳科技职业学院单招职业倾向性测试题库带答案详解
- 2026年广西国际商务职业技术学院单招职业技能测试题库带答案详解
- 2026年湖南水利水电职业技术学院单招职业技能测试题库带答案详解
- 2026年青岛职业技术学院单招职业倾向性测试题库参考答案详解
- 2026年嘉兴职业技术学院单招职业技能考试题库及答案详解1套
- 2026年山西省运城市单招职业适应性考试题库及参考答案详解一套
- 2026年青岛远洋船员职业学院单招职业倾向性测试题库带答案详解
- 2026年闽江师范高等专科学校单招职业技能考试题库参考答案详解
- 如何培养孩子深度专注
- 2024年餐饮店长年度工作总结
- 护理8S管理汇报
- 产前筛查标本采集与管理制度
- 急危重症护理培训心得
- 2025劳动合同书(上海市人力资源和社会保障局监制)
- 门诊护士长工作总结汇报
- 药膳餐厅创新创业计划书
- erp沙盘模拟实训报告采购总监
- 污水消毒知识培训课件
- 横纹肌溶解症的护理
评论
0/150
提交评论