1、 1 1 设计任务及要求 1.1 设计任务 采用汇编语言设计一个运行于计算机的小鸟动画程序。在屏幕上显示一只小 鸟,当按下按键 S 时,小鸟开始飞行;当按下按键 B 时,小鸟开始发声;当按 下按键 P 时,小鸟暂停飞行和鸣叫;而按下按键 C 时,小鸟继续飞行并且鸣叫; 按下 Q 键时,退出程序。 1.2 设计要求 (1) 设计任务及要求分析 (2) 方案比较及认证说明 (3) 系统原理阐述 (4) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释 (5) 调试记录及结果分析 (6) 总结 (7) 参考资料 (8) 附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图 2 2 方案比
2、较及论证 2.1 方案比较 在小鸟动画程序设计中主要分为两个部分: 一个部分是小鸟图像形成与移动 部分,另一个部分是小鸟发声鸣叫部分,只要相应地设计出这两个部分之后,将 二者结合起来,就可以完成任务要求。 首先讨论小鸟图像形成及移动部分的方案。通过查阅资料,形成小鸟图像有 两种方法:一种是字符形成小鸟图像(即文本方式);另一种是像素点形成小鸟图 像(即图形方式) 。 方案一:用字符形成小鸟图像,主要是利用 BIOS 中的 INT 10H 中断,即显示器 中断,INT 10H 中的 09H 号功能是在光标制定位置处写字符和属性。程序结构图 大致如下: MOV AH,09H ;置光标 MOV AL
3、,字符 ;字符 ASCII 码 MOV BL,7 ;字符属性 MOV BH,0 ;第 0 页 MOV CX,数量值 ;字符重复个数 INT 10H 方案二:用图形方式形成小鸟图像,是利用像素来产生彩色图案,它也是利用 BIOS 中的 INT 10H 的功能 00H 来设置图形方式。程序结构大致如下面所示: MOV AH,00H ;请求设置方式 MOV AL,0CH ;彩色图形 INT 10H ;调用中断服务 以上是关于小鸟图像显示的两个方案。 小鸟发声程序也是一个比较重要的环节,中间涉及到扬声器发声部分。而在 关于扬声器发声时,主要有两种方式,分别是以位触发和定时器控制。下面就这 两种不同的方
4、式确定两个不同的设计方案。 方案一:发声采用位触发方式。程序直接控制 PPI(8255 可编程序外围接口芯 片)的输出控制寄存器(I/O 端口为 61H)的第一位,使该位按所需的频率进行 1 和 0 的交替变化,从而产生一串脉冲控制波形,这些脉冲经过放大后驱动扬声 3 器发出声音。 可以利用软件延时来控制所产生的脉冲波形的长度和脉宽, 就可以实现产生 不同频率和不同音长的声音。软件实现的程序如下: IN AL,61H MOV AH,AL AND AL,0FCH ;关断定时器通道 2 的门控 SOUND:XOR AL,2 ;触发 61H 端口第 1 位 OUT 61H,AL MOV CX,DX
5、; (DX)=控制脉冲的计数值 WAIT: LOOP WAIT ;延时循环 DEC BX ; (BX)=脉冲持续的时间 JNZ SOUND MOV AL,AH OUT 61H,AL ;恢复 61H 端口 在本方案中,通过程序的方法来控制 PB1,使其在 1 和 0 之间按一定的频 率变,从而产生一串脉冲。控制脉冲宽度的计数值的算法如下: 计数值=2801*100/音频 如果音频为 f,则脉冲周期 1/f 一个半波的时间为 1/2f 秒,而 1/2f 秒的延时可简 单地通过 LOOP 指令的循环来取得,由于 2801 次 LOOP 指令循环执行所需时 间是 10MS,所以一秒钟时间约执行 280
6、1*100 次 LOOP 指令。控制脉冲宽度的 计数值的实现程序如下: MOV BX,100 WAIT: MOV CX,2801 DELAY: LOOP DELAY DEC BX JNZ WAIT 算出了脉冲宽度,再通过高低电平的不断变换,就可实现不同频率的脉冲 方波。把此方波经滤波放大即可驱动扬声器发声了。 方案二:利用定时器发声。这里是通过硬件即 8253 定时器产生声音。 4 CPU 通过对定时器的通道 2 进行编程,使其 I/O 寄存器接收一个控制声音 频率的 16 位计数值,端口 61H 的最低位控制通道 2 门控的开断,以产生特殊的 音响。当定时器接收的计数值为 533H 时,能产生 896Hz 的声音,因此产生其他 频率的计数值就可由下式计算:计数值=533H896 f=1234DCH f 在送出频率计数值之前,还要给方式寄存器送一个方式值,该数决定对哪一 个通道编程,采用什么模式,送入通道的计数值是一字节还是两字节,是二进制 码