版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 应用系统开发 6.1 汽车动画程序开发 6.2 发声系统程序开发开 始6.1 汽车动画程序开发 6.1.1 字符图形显示 6.1.2 动画程序的开发 返回本章首页6.1.1 字符图形显示字符图形既可以在显示器上以简单的黑白图形字符显示,也可以在彩色显示器上以彩色的图形字符显示。通过调用INT 10H的AH=0,AL=07可设置不同的显示方式,调用INT10H的AH=09H,AH=0AH等可显示字符。返回本节1动画显示的基础2程序举例6.1.2 动画程序的开发 在屏幕上显示出动画的效果,可分5步进行:l在屏幕上显示图形(单字符或多字符图形)。l延迟一个时间周期,这样图形更清晰。l清除图形
2、。 l 改变图形的行列坐标。l 返回第一步,重复上述过程。1动画显示的基础图6.1 “汽车”各字符的相对位移量(2,1)(0,1)(0,0)(0,3)(0,1)(0,1)(1,0)上 一 页【例6.1】在屏幕上显示一个开动的汽车如图6.1所示源程序如下:DATASEGMENTCARDB 7;字符图形表DB 52H,7,0,0DB 0B1H,7,0,1DB 0DBH,7,0,1DB 0DBH,7,0,1DB4FH,7,1,0DB4FH,7,0,-3DB2,7,-2,12程序举例CHAR_CNTDW ? POINTERDW ?LINE_ONDB ? COL_ON DB ?DATAENDS; COD
3、ESEGMENTASSUME CS:CODE,DS:DATAMAINPROCFAR PUSH DSSUBAX,AXPUSHAXMOVAX,DATA;初始化DS 上 一 页MOVDS,AXMOVAH,0;设置300200彩色图形方式MOVAL,4 INT 10HMOVAH,0BH;设置背景颜色MOVBH,0 MOV BL,2INT10MOVAH,0BH;设置彩色调板MOVBH,01 MOV BL,00INT10HCALLCLEAR_SCREEN;清屏上 一 页LEADI,CAR;DI指向字符图形表MOVDH,5;从第5行5列位置开始MOVDL,5;显示汽车CALLMOVE_SHAPERET MA
4、INENDP; CLEAR_SCREEN PROC NEARPUSHAX;保护寄存器PUSHBXPUSHCX上 一 页PUSHDXMOVAH,6;屏幕上卷功能MOVAL,0MOVCH,0;左上角行号 MOVCL,0;左上角列号MOVDH,24;右下角行号MOVDL,79;右下角列号MOVBH,7;卷入行属性INT10H;调用显示属性POPDX;恢复寄存器上 一 页POPCXPOPBXPOPAXRET;返回主程序CLEAR_SCREEN ENDP; MOVE_SHAPE PROC NEARPUSHAX;保护寄存器PUSHBX PUSHCXPUSHDX PUSHDI上 一 页 MOVAH,0FH;
5、取当前显示方式INT10HSUBCH,CH;清除计数器CX的高字节MOVCL,DI;CL放循环次数INCDI ;DI指向字符图形表中的第一个字符MOVCHAR_CNT,CX;保存循环次数MOVPOINTER,DIMOVLINE_ON,DH MOVCOL_ON,DL上 一 页 PLOT_NEXT:ADDDH,DI+2;改变行列指针ADDDL,DI+3CMPDL,80;出屏否?JBMOV_CRSRCALLERASEPOP DI POPDXPOPCX POPBXPOPAX RET上 一 页 MOV_CRSR:MOVAH,2;移动光标位置INT10H MOVAL, DIMOVBL,DI+1;取字符值及
6、属性PUSHCX MOV CX,1MOVAH,09;显示字符INT10H POPCXADDDI,4;DI指向下一个字符LOOPPLOT_NEXTCALLDLY_QRTR;调用延时子程序CALLERASE;调用擦除子程序JMPSHORT PLOT_NEXTMOVE_SHAPEENDP;ERASE PROCNEARMOVCX,CHAR_CNTMOVDI,POINTERMOVDH,LINE_ONMOVDL,COL_ON上 一 页ERASE_NEXT:ADDDH,DI+2 ADDDL,DI+3MOVAH,2 INT10HMOVAL,DI MOVBL,0PUSHCX MOVCX,1 MOVAH,9 IN
7、T10HPOPCX ADDDI,4LOOPERASE_NEXTMOVCX,CHAR_CNT上 一 页MOVDI,POINTERMOVDH,LINE_ONINCCOL_ONMOVDL,COL_ONRETERASEENDP; DLY_QRTR PROC NEAR;延时子程序PUSHCXPUSHDXMOVDX,5000D11:MOVCX,2801D12:LOOPD12 DECDXJNZD11 POPDXPOPCX RETDLY_QRTRENDPCODEENDSEND MAIN返回本节上 一 页6.2 发声系统程序开发 6.2.1 系统发声途径 6.2.2 发声应用程序举例返回本章首页6.2.1 系统
8、发声途径18254定时器作为发声源28255端口B(PB1位)作为发声源返回本章首页18254定时器作为发声源将定时器产生的方波信号同8255的端口B相与来控制扬声器发声的(如图6.2所示),因此当PB1=1时,才能控制扬声器的音调。在系统中8255的B口地址为61H,用指令: INAL,61H ORAL,3 OUT61H,AL图6.2 控制扬声器发声原理图ROM BIOS中的发声子程序如下:BEEPPROC NEAR MOVAL,10110110BOUT43H,AL MOVAX,533HOUT42H,AL MOVAL,AH OUT42H,AL INAL,PORT_BMOVAH,ALORAL,
9、03OUTPORT_B,ALSUBCX,CXG7:LOOPG7DECBLJNZG7MOVAL,AHOUTPORT_B,ALRET BEEPENDP返回本节28255端口B(PB1位)作为发声源使8255端口B(或相应的等效电路)最低位D0=0,关闭定时器声源的输出,OUT2为常高电位(方式3所致)。又通过使8255端口B(或相应等效电路)的D1位置1或置0(按指定的频率来编程),便能让“与”门输出一周期性变化的方波,使扬声器发声。返回本节6.2.2 发声应用程序举例1扬声器发声通用子程序2演奏乐曲程序3定时报警程序1扬声器发声通用子程序【例6.2】通用发声程序GENSOUND。PUBLICGE
10、NSOUNDCODESEGMENT PARA CODEASSUME CS:CODEGENSOUNDPROCFARPUSHAX;保存将要用到的寄存器PUSHBXPUSHCX PUSHDXPUSHDIMOVAL,0B6H;向8253-5/8254-2计数器2写控制字OUT43H,AL;方式3、双字节写和二进制计数方式写到控制口MOVDX,12H;设置被除数MOVAX,533H*896DIVDI;其商(AX)为预置值OUT42H,AL;先送LSBMOVAL,AHOUT42H,AL;后送MSBINAL,61H;读8255端口B(61H)原值MOVAH,AL;保存端口原值ORAL,3 OUT61H,AL
11、;接通扬声器WAIT1:MOV CX,8FF0H;在80486/DX2/66中取DELAY:LOOP DELAY;循环次数为8FF0HDECBX;循环持续BX次JNZWAIT1MOVAL,AH;写回61H口原值,关闭扬声OUT61H,ALPOPDI;恢复寄存器POPDX POPCXPOPBX POPAXRET;子程序结束返回GENSOUNDENDPCODEENDSEND返回本节2演奏乐曲程序音名CDEFGABCDEFGABC唱名12345671234567i频率(Hz)131147165175196220247262294330349392440492523表6.1 音律与频率对应表程序如下:
12、TITLE MUSIC 乐曲“玛丽有只小羊羔”;汇编过程: MASM MUSIC.ASM 连接过程;LINK MUSIC+GENLOUNDEXTRN GENSOUND:FAR;定义外部调用程序STACKSEGMENT PARA STACK STACKDB 64 DUP(STACK)STACKENDS; 【例6.3】以乐谱“玛丽有只小羊羔”为例编写演奏程序DATA SEGMENT PARA DATAMUS_FREQ DW 330,294,262,294,3 DUP(330);为演奏的乐曲定义一个DW3 DUP(294),330,392,392;频率表DW330,294,262,294,4 DUP
13、(330)DW294,294,330,294,262,-1MUS_TIME DW6 DUP(25*8),50*8;为演奏的乐曲定义一个DW2 DUP(25*8,25*8,50*8);节拍时间表DW12 DUP(25*8),100*8 DATA ENDS; CODESEGMENTPARA CODEASSUME CS:CODE,SS:STACKASSUME DS:DATAMUSICPROCFARPUSHDS SUBAX,AXPUSHAXMOVAX,DATA;指向数据指针MOVDS,AXLEASI,MUS_FREQ;将频率表的偏移地址送入SILEABP,DS:MUS_TIME;将节拍时间表的偏移地址
14、送入BPFREQ:MOVDI,SI;取音符频率CMPDI,-1;结束?JEEND_MUS;是,退出MOVBX,DS:BP;取音符持续时间CALLGENSOUND;调用GENSOUND发音子程序ADDSI,2;频率表指针增2ADDBP,2;时间表指针增2JMPFREQ;继续演奏END_MUS:RET;返回DOSMUSICENDP;CODEENDSENDMUSIC返回本节3定时报警程序图6.3 实时钟中断处理流程图;利用INT 1AH中断实现定时报警,本程序在执行后,若设置成功则首先显示;字符串“Set up all right ”并使扬声器发声,这表明设置成功;1分钟(为定时时间,;读者也可自己
15、设定)后屏幕显示“!”并发声,以示报警。;汇编过程:MASM:ALARM.ASM;连接过程:LINK :ALARM+GENSOUNDEXTRN GENSOUND:FAR;定义外部调用程序【例6.4】TITLE ALARM定时报警程序STACKSEGMENT PARA STACK STACKDB 64 DUP(STACKSTACKENDS;DATASEGMENT PARA PUBLIC DATABJDB Set up all right .DB 13,10,$DATA ENDS; CODE SEGMENT PARA PUBLIC CODEASSUME CS:CODE,SS:STACK,DS:DA
16、TAENTRYPROC FARPUSHDS;保存旧的数据段SUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAL,4AH;读取INT 4AH中断向量上 一 页MOVAH,35H INT 21HPUSHES;入栈保护 PUSHBXSTEP1:MOV AH,7;清除实时钟报警INT1AHJCSTEP1;进位位为1则转移(成功则转移); MOVAL,4AH;设置新的INT 4AH中断向量MOVDX,SEG ALARMMOVDS,DX上 一 页LEADX,ALARM MOVAH,25HINT21H CLI;关中断STEP2:MOVAH,2;利用INT 1AH读当前实时钟时间INT1
17、AH;时、分、秒分别置入CH、CL、DHJCSTEP2;不成功再读MOVAL,CLADDAL,1;增1分钟DAA;调整为BCD码格式CMPAL,60H;是60分吗(BCD数)?上 一 页JLSTEP3;不是,则转移MOVAL,00H;是,改为0分STEP3:MOV CL,AL;得到报警时刻的分值MOVAH,6;CH、DH仍为原值INT1AH;设置报警时刻JCSTEP2;不成功重做STI;开中断MOVCX,12SETUP:MOV AH,2;设置成功发出“嘟嘟”声上 一 页MOVDL,07H;07H是振铃控制码INT21H;用INT 21H 的2号功能实现LOOPSETUP;循环发声MOVAX,D
18、ATAMOVDS,AXMOVDX,OFFSET BJ;显示“Set up all right .”字符串MOVAH,9INT21H;上 一 页MOVDX,32000MAINP1:MOV CX,25500;延时程序段,等待报警MAINP2:LOOPMAINP2DECDXJNEMAINP1RES:POPDX;恢复INT 4AH 原中断向量POPDSMOVAL,4AHMOVAH,35H上 一 页INT21H RET ENTRYENDP;ALARMPROC;报警中断服务程序 PUSHAX PUAHBXPUSHDI STIMOVAH,2;显示字符!MOVDL,!INT21H上 一 页MOVDI,300;
19、发音频率MOVBX,1400;发音延迟时间CALLGENSOUND;调用通用发声子程序POPDI POPBXPOPAX IRETALARMENDPCODEENDS;ENDENTRY;程序结束上 一 页【例6.5】用软中断INT 60H、发声中断服务程序INT 61H以及软中断INT 62H、 INT 63H ,实现字符串“intel 80486 DX2/66 CPU”显示、扬声器发声和变色三角形的显示功能,定时器ICH中断作为计数器使用。;DATASEGMENT PARA DATA;数据段D1DB 0DH,intel 80486 DX2/66 CPU $D3DW 0D20DB ? DATAEN
20、DS;STACSEGMENT PARA STACK STAC;堆栈段STA1DW 100 DUP(?)STACENDS;CODESEGMENT PARA CODE;代码段ASSUME CS:CODE,DS:DATAASSUME SS:STAC,ES:DATASTARPROCFAR;主程序开始上 一 页PUSHDS XOR AX,AXPUSHAX MOV AX,DATAMOVDS,AX MOVES,AXCLI;关中断MOVAL,1CH;保存定时器时钟中断向量MOVAH,35HINT21HPUSHES上 一 页PUSHBX PUSHDSMOVDX,OFFSET RING;设置定时器时钟中断向量MO
21、VAX,SEG RINGMOVDS,AXMOVAL,1CH MOVAH,25HINT21HPOPDS INAL,21H;读IMR中的屏蔽码上 一 页ANDAL,1111110B;开放中断0并保留中断屏蔽设置OUT21H,AL;将新屏蔽码写入IMR中PUSHDS;入栈保护DS寄存器MOVDX,OFFSET I60;取I60的偏移地址MOVAX,SEG I60;取I60的段基地址MOVDS,AXMOVAH,25HMOVAL,60HINT21H上 一 页LEADX,I61;设置61H软中断向量MOVAX,SEG I61MOVDS,AXMOVAH, 25HMOVAL,61HINT21HLEADX,I6
22、2;设置62H软中断向量MOVAX,SEG I62MOVDS,AX上 一 页MOVAH,25H MOVAL,62HINT21HLEADX,I63;设置63H软中断向量MOVAX,SEG I63 MOVDS,AXMOVAH,25H MOVAL,63HINT21H POPDS;DS出栈STI;开中断MOVDI,8000上 一 页DELAY:MOVSI,150INT60H;调用60H中断,使程序进入DELAY1:DECSI;循环状态JNZDELAY1 DECDIJNZDELAYPOPDX;恢复定时器控制(ICH)中断向量POPDS MOVAL,1CHMOVAH,25H INT21HMOVAH, 0;
23、显示器恢复文本状态上 一 页MIVAL,3 INT 10HRET STARENDP;RINGPROCFAR;定时器中断服务程序PUSHDS PUSHAXMOVAX,DATAMOVDS,AX STIINCD20;计数单元加1上 一 页B11:POP AXPOPDSIRET;中断服务结束返回RINGENDP;I60PROCFAR;60H中断服务程序完成对PUSHAX;61H和62H中断的调用PUSHDXLEADX,D1;显示intel 80486 DX上 一 页2/66 CPU MOVAH,9INT21HCMPD20,2;中断延时到否?JNEC11;到,则转置C11MOVD20,0;否则使D20清0INT61H;用发声中断INT 61HINT62H;用延时绘图中断INT 62HC11:POPDXPOPAX上 一 页IRET;中断服务结束返回I60ENDP;I61PROCFAR;声中断:INT 61HPUSHAX PUSHCXPUSHDXMOVDX,140H;置发音持续时间INAL,61H;8255A PB 口内容到ALANDAL,11111100B;L的D1D0位置0上 一 页L1:XORAL,00000010B;L的D1取反OUT61H,AL;L送PB口,控制扬声器发声MOVCX,0F600H;置方波信号频率变换时间常数L2:LO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国科学院青藏高原所“海外优青”项目人才招聘备考题库(北京)含答案详解(典型题)
- 化工行业技术转让合同(含全套附件)
- 国企中级题库及答案
- 2026年上海市青浦区高三二模地理试卷(含答案)
- 金融工程定期报告:转债延续调整可适当配置防守板块
- AI赋能服装生产:智能工艺与实践应用
- 石墨滑石废气资源化利用
- 磁性材料应用
- 2025-2030中国平衡车行业市场全景调研及投资价值评估咨询报告
- 2025-2030清洁化燃煤供暖市场深度分析与发展趋势调研报告
- 2026江苏常州工业职业技术学院招聘人事代理人员11人笔试参考试题及答案解析
- 2026年池州市保险行业协会工作人员招聘备考题库附答案详解(满分必刷)
- 14 赵州桥 课件-2025-2026学年统编版语文三年级下册
- 2026年黑龙江齐齐哈尔高三一模高考生物试卷试题(含答案详解)
- 广东省化工(危险化学品)企业安全隐患排查指导手册(危险化学品仓库企业专篇)
- 2025年医疗卫生系统招聘考试《医学基础知识》真题及详解
- 兽药药品陈列管理制度
- 齐成控股集团招聘笔试题库2026
- 组合分析样送样单
- GB/T 12689.1-2010锌及锌合金化学分析方法第1部分:铝量的测定铬天青S-聚乙二醇辛基苯基醚-溴化十六烷基吡啶分光光度法、CAS分光光度法和EDTA滴定法
- 遥感原理与应用-第2章
评论
0/150
提交评论