汇编第10章 应用系统开发_第1页
汇编第10章 应用系统开发_第2页
汇编第10章 应用系统开发_第3页
汇编第10章 应用系统开发_第4页
汇编第10章 应用系统开发_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章应用系统开发﹡10.1汽车动画程序开发﹡10.2发声系统程序开发开始10.1汽车动画程序开发

﹡10.1.1字符图形显示

﹡10.1.2动画程序的开发返回本章首页10.1.1字符图形显示字符图形既可以在显示器上以简单的黑白图形字符显示,也可以在彩色显示器上以彩色的图形字符显示。通过调用INT10H的AH=0,AL=0~7可设置不同的显示方式调用INT

10H的AH=09H,AH=0AH可显示字符。返回本节源程序GALLERY.ASM图10.1“汽车”各字符的相对位移量(-2,1)(0,1)(0,0)(0,-3)(0,1)(0,1)(1,0)上一页(-2,1)显示汽车定义字符汽车CAR DB7 ;字符图形表中字符的个数DB0DBH,7,0,0;方块,字符属性,行,列相对坐标DB0B1H,7,0,1;带阴影的方块字符DB0DBH,7,0,1;方块字符DB0DBH,7,0,1;方块字符DB4FH,7,1,0;右边字符oDB4FH,7,0,-3;左边字符oDB02H,7,-2,1;笑脸字符汽车图形的结构MOV_CRSR:

SUB CH,CH ;清除计数器CX的高字节

MOV CL,[DI] ;CL放循环次数=7INC DI;DI指向字符图形表中的第一个字符PLOT-NEXT:ADDDH,[DI+2] ;改变行列指针,加上相对位移量

ADD DL,[DI+3]

MOV AH,2 ;移动光标位置

INT 10H

MOV AL,[DI] MOV BL,[DI+1] ;取字符值及属性

MOVBH,0;页号

PUSH CX;保存计数值

MOV CX,1;显示1个字符

MOV AH,09 ;显示字符

INT 10HPOP CX;恢复计数值

ADD DI,4 ;DI指向下一个字符(每个字符4个字节) LOOP PLOT-NEXT;循环结束汽车图形就显示出来了源程序CAR1.ASM1.动画显示的基础2.程序举例10.1.2动画程序的开发在屏幕上显示出动画的效果,可分5步进行:l

1、

在屏幕上显示图形(单字符或多字符图形)。l

2、

延迟一个时间周期,这样图形更清晰。l

3、

清除图形。l

4、改变图形的行列坐标。l

5、返回第一步,重复上述过程。1.动画显示的基础2.程序举例GALLERY1.ASM移动小汽车流程图开始

初始化光标位置显示图形调用延时子程序调用清屏子程序改变光标的行列号是否继续结束

10.2发声系统程序开发

10.2.1系统发声途径

﹡10.2.2发声应用程序举例返回本章首页10.2.1系统发声途径1.8253/8254定时器作为发声源2.8255端口B(PB1位)作为发声源返回本章首页1.8253/8254定时器作为发声源将定时器产生的方波信号同8255的端口B相与来控制扬声器发声,因此当PB1=1时,才能控制扬声器的音调。在系统中8255的B口地址为61H,用指令:

IN AL,61HOR AL,3OUT 61H,AL图10.9控制扬声器发声原理图ROMBIOS中的发声子程序BEEP如下:BEEP PROCNEARMOV AL,10110110B;0B6H,计时器的工作方式

OUT 43H,AL;写控制字

MOV AX,533H;设置计数初值产生896Hz的音调

OUT 42H,AL;先写低字节

MOV AL,AH;再写高字节

OUT 42H,AL;初始化计数器2的初值

IN AL,61H ;读8255的端口B

MOV AH,AL;保存端口原状态

OR AL,03 OUT 61H,AL;打开扬声器与开关

SUB CX,CXG7: LOOP G7 DEC BL;BL入口参数,控制音长

JNZ G7 MOV AL,AH OUT 61H,AL;恢复端口状态

RETBEEP ENDP返回本节2.8255端口B(PB1位)作为发声源使8255端口B(或相应的等效电路)最低位D0=0,关闭定时器声源的输出,OUT2为常高电位(方式3所致)。又通过使8255端口B(或相应等效电路)的D1位置1或置0(按指定的频率来编程),便能让“与”门输出一周期性变化的方波,使扬声器发声。返回本节10.2.2发声应用程序举例1.扬声器发声通用子程序2.演奏乐曲程序GENSOUND PROC FARPUSHAX

PUSH CXPUSH DX PUSH DI;入口参数(DI)=指定声音的频率

MOV AL,0B6H;向8253-5/8254-2计数器2写控制字

OUT 43H,AL;方式3、双字节写和二进制计数方式写到控制口

MOV DX,12H;设置被除数(DX:AX)=1193181.7Hz MOV AX,348CH DIV DI;其商(AX)为预置值

OUT 42H,AL;先送LSBMOV AL,AH OUT 42H,AL;后送MSB1.扬声器发声通用子程序

IN AL,61H;读8255端口B(61H)原值

MOV AH,AL;保存端口原值

OR AL,3 OUT 61H,AL;接通扬声器WAIT1:MOVCX,2800DELAY:LOOPDELAY;等待10ms DEC BX;入口参数(BX)=循环次数

JNZ WAIT1;音长=BX*10msMOV AL,AH;写回61H口原值,关闭扬声器OUT 61H,AL

POP DI;恢复寄存器

POP DX POP CX POP BX POP AX RET ;子程序结束返回GENSOUND ENDPCODE ENDSEND返回本节使用LOOP指令实现延迟的程序延迟时间依赖CPU主频和LOOP指令的执行周期,为了建立一个与处理器无关的时间延迟,ibm采用了一种利用硬件产生时间延迟的方法。P390

……wait1:movcx,633

call

waitf;调用延时10ms

dec

bx

jnz

wait1…….

利用硬件产生延迟的方法,与处理器无关

;----------------------------------------利用端口61h的PB4延时10ms子程序waitfprocnear push axwaitf1: in al,61h and al,10h

cmp

al,ah je waitf1

mov

ah,al loop waitf1 pop ax retwaitf

endp见教材P3912.演奏乐曲程序音名CDEFGABCDEFGABC唱名12345671234567i频率(Hz)131147165175196220247262294330349392440492523表10.1

音律与频率对应表低中高TITLEMUSIC–乐曲“玛丽有只小羊羔”DATA SEGMENTMUS_FREQ ;为演奏的乐曲定义一个频率表

DW330,294,262,294,3DUP(330);1,2节

DW3DUP(294),330,392,392;3,4节

DW330,294,262,294,4DUP(330);5,6节

DW294,294,330,294,262,-1;7,8节MUS_TIME;为演奏的乐曲定义一个节拍时间表

DW 6DUP(25*8),50*8;全音符为8*100DW 2DUP(25*8,25*8,50*8)DW 12DUP(25*8),100*8DATA ENDS;

CODE SEGMENT ASSUMECS:CODE,SS:STACK,DS:DATAMUSIC PROC FARPUSH DSSUB AX,AXPUSH AX

MOV AX,DATA ;指向数据指针MOV DS,AXLEA SI,MUS_FREQ;将频率表的偏移地址送入SILEA BP,DS:MUS_TIME;将节拍时间表的偏移地址送入BPFREQ:

MOV DI,[SI];取音符频率

CMP DI,-1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论