- 1、本文档共67页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.1.2 动画程序的开发 6.2.1 系统发声途径 1.8254定时器作为发声源 2.8255端口B(PB1位)作为发声源 6.2.2 发声应用程序举例 1.扬声器发声通用子程序 2.演奏乐曲程序 3.定时报警程序 MOV AL,AH;写回61H口原值,关闭扬声OUT 61H,AL POP DI;恢复寄存器 POP DX POP CX POP BX POP AX RET ;子程序结束返回 GENSOUND ENDP CODE ENDS END 返回本节 2.演奏乐曲程序 音名 C D E F G A B C D E F G A B C 唱名 1 2 3 4 5 6 7 1 2 3 4 5 6 7 i 频率 (Hz) 131 147 165 175 196 220 247 262 294 330 349 392 440 492 523 表6.1 音律与频率对应表 程序如下: TITLE MUSIC –乐曲“玛丽有只小羊羔” ;汇编过程: MASM MUSIC.ASM 连接过程;LINK MUSIC+GENLOUND EXTRN GENSOUND:FAR;定义外部调用程序 STACK SEGMENT PARA STACK ‘STACK’ DB 64 DUP(‘STACK’) STACK ENDS ; 【例6.3】以乐谱“玛丽有只小羊羔”为例编写演奏程序 DATA SEGMENT PARA ‘DATA’ MUS_FREQ DW 330,294,262,294,3 DUP(330);为演奏的乐曲定义一个 DW 3 DUP(294),330,392,392 ;频率表 DW 330,294,262,294,4 DUP(330) DW 294,294,330,294,262,-1MUS_TIME DW 6 DUP(25*8),50*8;为演奏的乐曲定义一个 DW 2 DUP(25*8,25*8,50*8);节拍时间表 DW 12 DUP(25*8),100*8 DATA ENDS ; CODE SEGMENT PARA ‘CODE’ ASSUME CS:CODE,SS:STACK ASSUME DS:DATA MUSIC PROC FAR PUSH DS SUB AX,AX PUSH AX MOV AX,DATA ;指向数据指针 MOV DS,AX LEA SI,MUS_FREQ;将频率表的偏移地址送入SI LEA BP,DS:MUS_TIME;将节拍时间表的偏移地址送入BP FREQ:MOV DI,[SI];取音符频率 CMP DI,-1 ;结束? JE END_MUS;是,退出 MOV BX,DS:[BP];取音符持续时间 CALL GENSOUND ;调用GENSOUND发音子程序 ADD SI,2 ;频率表指针增2 ADD BP,2 ;时间表指针增2 JMP FREQ ;继续演奏 END_MUS:RET ;返回DOS MUSIC ENDP ; CODE ENDS END MUSIC 返回本节 3.定时报警程序 图6.3 实时钟中断处理流程图 ;利用INT 1AH中断实现定时报警,本程序在执行后,若设置成功则首先显示 ;字符串“Set up all right ”并使扬声器发声,这表明设置成功;1分钟(为定时时间, ;读者也可自己设定)后屏幕显示“!”并发声,以示报警。 ;汇编过程:MASM:ALARM.ASM ;连接过程:LINK :ALARM+GENSOUND EXTRN GENSOUND:FAR;定义外部调用程序 【例6.4】TITLE ALARM——定时报警程序 STACK SEGMENT PARA STACK ‘STACK’ DB 64 DUP(‘STACK﹒﹒﹒’ STACK ENDS ; DATA SEGMENT PARA PUBLIC ‘DATA’ BJ DB ‘Set up all right .’ DB 13,10,’$’ DATA ENDS ; CODE SEGMENT PARA PUBLIC ‘CODE’ ASSUME CS:CODE,SS:STACK,DS:DATA ENTRY PROC FAR PUSH DS;保存旧的数据段 SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AL,4AH;读取INT 4AH中断向量 上
文档评论(0)