




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第6章 應用系統(tǒng)開發(fā) 6.1 汽車動畫程序開發(fā) 6.2 發(fā)聲系統(tǒng)程序開發(fā)開 始6.1 汽車動畫程序開發(fā) 6.1.1 字符圖形顯示 6.1.2 動畫程序的開發(fā) 返回本章首頁6.1.1 字符圖形顯示字符圖形既可以在顯示器上以簡單的黑白圖形字符顯示,也可以在彩色顯示器上以彩色的圖形字符顯示。通過調(diào)用INT 10H的AH=0,AL=07可設置不同的顯示方式,調(diào)用INT10H的AH=09H,AH=0AH等可顯示字符。返回本節(jié)1動畫顯示的基礎2程序舉例6.1.2 動畫程序的開發(fā) 在屏幕上顯示出動畫的效果,可分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;設置彩色調(diào)板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;調(diào)用顯示屬性POPDX;恢復寄存器上 一 頁POPCXPOPBXPOPAXRET;返回主程序CLEAR_SCREEN ENDP; MOVE_SHAPE PROC NEARPUSHAX;保護寄存器PUSHBX PUSHCXPUSHDX PUSHDI上 一 頁 MOVAH,0FH;
5、取當前顯示方式INT10HSUBCH,CH;清除計數(shù)器CX的高字節(jié)MOVCL,DI;CL放循環(huán)次數(shù)INCDI ;DI指向字符圖形表中的第一個字符MOVCHAR_CNT,CX;保存循環(huán)次數(shù)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;調(diào)用延時子程序CALLERASE;調(diào)用擦除子程序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返回本節(jié)上 一 頁6.2 發(fā)聲系統(tǒng)程序開發(fā) 6.2.1 系統(tǒng)發(fā)聲途徑 6.2.2 發(fā)聲應用程序舉例返回本章首頁6.2.1 系統(tǒng)
8、發(fā)聲途徑18254定時器作為發(fā)聲源28255端口B(PB1位)作為發(fā)聲源返回本章首頁18254定時器作為發(fā)聲源將定時器產(chǎn)生的方波信號同8255的端口B相與來控制揚聲器發(fā)聲的(如圖6.2所示),因此當PB1=1時,才能控制揚聲器的音調(diào)。在系統(tǒng)中8255的B口地址為61H,用指令: INAL,61H ORAL,3 OUT61H,AL圖6.2 控制揚聲器發(fā)聲原理圖ROM BIOS中的發(fā)聲子程序如下: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返回本節(jié)28255端口B(PB1位)作為發(fā)聲源使8255端口B(或相應的等效電路)最低位D0=0,關(guān)閉定時器聲源的輸出,OUT2為常高電位(方式3所致)。又通過使8255端口B(或相應等效電路)的D1位置1或置0(按指定的頻率來編程),便能讓“與”門輸出一周期性變化的方波,使揚聲器發(fā)聲。返回本節(jié)6.2.2 發(fā)聲應用程序舉例1揚聲器發(fā)聲通用子程序2演奏樂曲程序3定時報警程序1揚聲器發(fā)聲通用子程序【例6.2】通用發(fā)聲程序GENSOUND。PUBLICGE
10、NSOUNDCODESEGMENT PARA CODEASSUME CS:CODEGENSOUNDPROCFARPUSHAX;保存將要用到的寄存器PUSHBXPUSHCX PUSHDXPUSHDIMOVAL,0B6H;向8253-5/8254-2計數(shù)器2寫控制字OUT43H,AL;方式3、雙字節(jié)寫和二進制計數(shù)方式寫到控制口MOVDX,12H;設置被除數(shù)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;循環(huán)次數(shù)為8FF0HDECBX;循環(huán)持續(xù)BX次JNZWAIT1MOVAL,AH;寫回61H口原值,關(guān)閉揚聲OUT61H,ALPOPDI;恢復寄存器POPDX POPCXPOPBX POPAXRET;子程序結(jié)束返回GENSOUNDENDPCODEENDSEND返回本節(jié)2演奏樂曲程序音名CDEFGABCDEFGABC唱名12345671234567i頻率(Hz)131147165175196220247262294330349392440492523表6.1 音律與頻率對應表程序如下:
12、TITLE MUSIC 樂曲“瑪麗有只小羊羔”;匯編過程: MASM MUSIC.ASM 連接過程;LINK MUSIC+GENLOUNDEXTRN GENSOUND:FAR;定義外部調(diào)用程序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);節(jié)拍時間表DW12 DUP(25*8),100*8 DATA ENDS; CODESEGMENTPARA CODEASSUME CS:CODE,SS:STACKASSUME DS:DATAMUSICPROCFARPUSHDS SUBAX,AXPUSHAXMOVAX,DATA;指向數(shù)據(jù)指針MOVDS,AXLEASI,MUS_FREQ;將頻率表的偏移地址送入SILEABP,DS:MUS_TIME;將節(jié)拍時間表的偏移地址
14、送入BPFREQ:MOVDI,SI;取音符頻率CMPDI,-1;結(jié)束?JEEND_MUS;是,退出MOVBX,DS:BP;取音符持續(xù)時間CALLGENSOUND;調(diào)用GENSOUND發(fā)音子程序ADDSI,2;頻率表指針增2ADDBP,2;時間表指針增2JMPFREQ;繼續(xù)演奏END_MUS:RET;返回DOSMUSICENDP;CODEENDSENDMUSIC返回本節(jié)3定時報警程序圖6.3 實時鐘中斷處理流程圖;利用INT 1AH中斷實現(xiàn)定時報警,本程序在執(zhí)行后,若設置成功則首先顯示;字符串“Set up all right ”并使揚聲器發(fā)聲,這表明設置成功;1分鐘(為定時時間,;讀者也可自己
15、設定)后屏幕顯示“!”并發(fā)聲,以示報警。;匯編過程:MASM:ALARM.ASM;連接過程:LINK :ALARM+GENSOUNDEXTRN GENSOUND:FAR;定義外部調(diào)用程序【例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;保存舊的數(shù)據(jù)段SUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAL,4AH;讀取INT 4AH中斷向量上 一 頁MOVAH,35H INT 21HPUSHES;入棧保護 PUSHBXSTEP1:MOV AH,7;清除實時鐘報警INT1AHJCSTEP1;進位位為1則轉(zhuǎn)移(成功則轉(zhuǎn)移); MOVAL,4AH;設置新的INT 4AH中斷向量MOVDX,SEG ALARMMOVDS,DX上 一 頁LEADX,ALARM MOVAH,25HINT21H CLI;關(guān)中斷STEP2:MOVAH,2;利用INT 1AH讀當前實時鐘時間INT1
17、AH;時、分、秒分別置入CH、CL、DHJCSTEP2;不成功再讀MOVAL,CLADDAL,1;增1分鐘DAA;調(diào)整為BCD碼格式CMPAL,60H;是60分嗎(BCD數(shù))?上 一 頁JLSTEP3;不是,則轉(zhuǎn)移MOVAL,00H;是,改為0分STEP3:MOV CL,AL;得到報警時刻的分值MOVAH,6;CH、DH仍為原值INT1AH;設置報警時刻JCSTEP2;不成功重做STI;開中斷MOVCX,12SETUP:MOV AH,2;設置成功發(fā)出“嘟嘟”聲上 一 頁MOVDL,07H;07H是振鈴控制碼INT21H;用INT 21H 的2號功能實現(xiàn)LOOPSETUP;循環(huán)發(fā)聲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、發(fā)音頻率MOVBX,1400;發(fā)音延遲時間CALLGENSOUND;調(diào)用通用發(fā)聲子程序POPDI POPBXPOPAX IRETALARMENDPCODEENDS;ENDENTRY;程序結(jié)束上 一 頁【例6.5】用軟中斷INT 60H、發(fā)聲中斷服務程序INT 61H以及軟中斷INT 62H、 INT 63H ,實現(xiàn)字符串“intel 80486 DX2/66 CPU”顯示、揚聲器發(fā)聲和變色三角形的顯示功能,定時器ICH中斷作為計數(shù)器使用。;DATASEGMENT PARA DATA;數(shù)據(jù)段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;關(guān)中斷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;調(diào)用60H中斷,使程序進入DELAY1:DECSI;循環(huán)狀態(tài)JNZDELAY1 DECDIJNZDELAYPOPDX;恢復定時器控制(ICH)中斷向量POPDS MOVAL,1CHMOVAH,25H INT21HMOVAH, 0;
23、顯示器恢復文本狀態(tài)上 一 頁MIVAL,3 INT 10HRET STARENDP;RINGPROCFAR;定時器中斷服務程序PUSHDS PUSHAXMOVAX,DATAMOVDS,AX STIINCD20;計數(shù)單元加1上 一 頁B11:POP AXPOPDSIRET;中斷服務結(jié)束返回RINGENDP;I60PROCFAR;60H中斷服務程序完成對PUSHAX;61H和62H中斷的調(diào)用PUSHDXLEADX,D1;顯示intel 80486 DX上 一 頁2/66 CPU MOVAH,9INT21HCMPD20,2;中斷延時到否?JNEC11;到,則轉(zhuǎn)置C11MOVD20,0;否則使D20清0INT61H;用發(fā)聲中斷INT 61HINT62H;用延時繪圖中斷INT 62HC11:POPDXPOPAX上 一 頁IRET;中斷服務結(jié)束返回I60ENDP;I61PROCFAR;聲中斷:INT 61HPUSHAX PUSHCXPUSHDXMOVDX,140H;置發(fā)音持續(xù)時間INAL,61H;8255A PB 口內(nèi)容到ALANDAL,11111100B;L的D1D0位置0上 一 頁L1:XORAL,00000010B;L的D1取反OUT61H,AL;L送PB口,控制揚聲器發(fā)聲MOVCX,0F600H;置方波信號頻率變換時間常數(shù)L2:LO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六年級下冊數(shù)學教學設計-總復習 雞兔同籠|北師大版
- 三年級下冊數(shù)學教案-6.1 面積的初步認識 丨蘇教版
- 六年級下冊數(shù)學教案-1.2 百分數(shù)和分數(shù)、小數(shù)的互化 ︳西師大版
- 2025年學習雷鋒精神62周年主題活動方案 合計3份
- 2024年槽鋼項目資金需求報告代可行性研究報告
- 2025年河北司法警官職業(yè)學院單招職業(yè)技能測試題庫完美版
- 專題21 信息的傳遞-2025年中考《物理》一輪復習知識清單與解題方法
- 2025年廣西自然資源職業(yè)技術(shù)學院單招職業(yè)傾向性測試題庫參考答案
- 2025年度代養(yǎng)大型豬群養(yǎng)殖基地合作協(xié)議
- 2025年度專業(yè)瓷磚鋪貼班組勞務合同
- 上消化道異物的內(nèi)鏡處理
- 健康教育學全套課件完整版
- 2024年遼寧省中考語文真題含解析
- 農(nóng)產(chǎn)品食品檢驗員二級技師技能理論考試題含答案
- 《財政學》財政及經(jīng)管類專業(yè)全套教學課件
- 質(zhì)量管理體系相關(guān)標準知識講解(一)-質(zhì)量管理-組織的質(zhì)量-實現(xiàn)持續(xù)成功指南-答案
- 《事業(yè)單位工作人員年度考核登記表》
- 物業(yè)管理退場通知書(模板)
- 江蘇省蘇州市2025屆高考仿真模擬歷史試卷含解析
- DL∕T 5210.6-2019 電力建設施工質(zhì)量驗收規(guī)程 第6部分:調(diào)整試驗
- DL∕T 712-2010 發(fā)電廠凝汽器及輔機冷卻器管選材導則
評論
0/150
提交評論