信號發(fā)生器功能程序設計_微機原理課程設計報告.doc

上傳人:good****022 文檔編號:116542490 上傳時間:2022-07-05 格式:DOC 頁數(shù):41 大?。?52.33KB
收藏 版權申訴 舉報 下載
信號發(fā)生器功能程序設計_微機原理課程設計報告.doc_第1頁
第1頁 / 共41頁
信號發(fā)生器功能程序設計_微機原理課程設計報告.doc_第2頁
第2頁 / 共41頁
信號發(fā)生器功能程序設計_微機原理課程設計報告.doc_第3頁
第3頁 / 共41頁

下載文檔到電腦,查找使用更方便

20 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《信號發(fā)生器功能程序設計_微機原理課程設計報告.doc》由會員分享,可在線閱讀,更多相關《信號發(fā)生器功能程序設計_微機原理課程設計報告.doc(41頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、微機應用系統(tǒng)設計與綜合實驗 微機原理課程設計報告課題名稱: 信號發(fā)生器功能程序設計學 院: 姓 名: 指導老師: 日 期: 目錄目錄1第一章概要21.1 設計目的21.2 課程設計內(nèi)容及要求21.3 所需芯片及硬件簡介21.3.1 8255A 特性簡介21.3.2 D /A0832功能簡介31.3.3A /D0809功能簡介31.3.4唐都小鍵盤簡介4第二章總體設計方案52.1 設計思想論述52.2 程序流程圖62.3 電路原理圖7第三章典型模塊分析83.1 波形產(chǎn)生模塊83.1.1 方波93.1.2 三角波93.1.3 鋸齒波103.1.4 正弦波123.2 小鍵盤模塊133.3 調(diào)幅調(diào)頻模

2、塊14第四章系統(tǒng)調(diào)試過程及結果16第五章收獲與體會17參考文獻18附錄1 匯編語言源程序代碼19附錄2 C語言源程序代碼33第一章 概要1.1 設計目的 信號發(fā)生器的功能設計結合了軟硬件的知識,這樣的一個課程設計促使我們主動去找尋資料,自主學習更多的知識。尤其重要的是設計本身是一種實踐,將課本知識應用到設計中,驗證并且進一步熟悉它從而獲得新的領悟,這是只啃書本所不能達成的好處。信號發(fā)生器的設計尤其加深我們對信號發(fā)生的理解,對以8086cpu為中心的各芯片功能的了解以及對微機原理和匯編語言編程有了更深的體會。1.2 課程設計內(nèi)容及要求(1)、分別用C語言和匯編語言編程完成硬件接口功能設計;(2)

3、、硬件電路基于80 x86微機的接口電路;(3)、程序功能要求:小鍵盤給定、數(shù)碼管或屏幕顯示,并產(chǎn)生對應信號波形(D/A)輸出(信號波形包括正弦波、三角波、方波、鋸齒波)、輸出信號波形幅度、頻率可調(diào)。(按鍵數(shù)量盡量少)。1.3 所需芯片及硬件簡介1.3.1 8255A 特性簡介(1)具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強,使用靈活,通過它CPU可直接與外設相連(2)8255A在使用前要寫入一個方式控制字,選擇A、B、C三個端口各自的工作方式,共有三種。方式0 :基本的輸入輸出方式,即無須聯(lián)絡

4、就可以直接進行的 I/O方式。其中A、B、C口的高四位或低四位可分別設置成輸入或輸出;方式1 :選通I/O,此時接口和外圍設備需聯(lián)絡信號進行協(xié)調(diào),只有A口和B口可以工作在方式1,此時C口的某些線被規(guī)定為A口或B口與外圍設備的聯(lián)絡信號,余下的線只有基本的I/O功能,即只工作在方式0;方式2: 雙向I/O方式,只有A口可以工作在這種方式,該I/O線即可輸入又可輸出,此時C口有5條線被規(guī)定為A口和外圍設備的雙向聯(lián)絡線,C口剩下的三條線可作為B口方式1的聯(lián)絡線,也可以和B口一起方式0的I/O線。本次設計只用到了三個端口的方式0。1.3.2 D /A0832功能簡介DAC0832是采用CMOS工藝制成的

5、單片電流輸出型8位數(shù) / 模轉換器。DAC0832的引腳功能說明如下:D0D7 :數(shù)字信號輸入端CS:片選信號,低電平有效WR:寫信號1,低電平有效OUT:DAC電流輸出端圖1.1 唐都實驗箱D /A0832接線圖1.3.3 A /D0809功能簡介ADC0809是采樣頻率為8位的、以逐次逼近原理進行模數(shù)轉換的器件。其內(nèi)部有一個8通道多路開關,它可以根據(jù)地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的一個進行A/D轉換。當?shù)刂稟BC=000時,IN0通道被選通。圖1.2 唐都實驗箱A /D0809接線圖1.3.4 唐都小鍵盤簡介唐都實驗箱中提供了4行4列16個按鍵,列選擇信號X1-X4,行掃

6、描信號Y1-Y4。圖1.3 唐都實驗箱小鍵盤接線圖第二章 總體設計方案2.1 設計思想論述(1)波形產(chǎn)生:通過匯編語言編寫各個波形子程序,其中方波和三角波參考了唐都的參考程序。鋸齒波由三角波修改而來,正弦波事先用MATLAB仿真存入各點數(shù)據(jù),產(chǎn)生波形時依次輸出各個數(shù)據(jù)即可。波形子程序中主要是各個波形一個周期的代碼,循環(huán)執(zhí)行,由此產(chǎn)生連續(xù)波形并通過D /A0832將數(shù)字量轉換成模擬量輸出,即可得各種波形。具體方案見第三章3.1節(jié)。(2)波形切換:用小鍵盤輸入進行波形的選擇,按鍵03分別對應方波、三角波、鋸齒波和正弦波。每個波形周期輸出后,調(diào)用鍵盤查詢子程序,判斷有無按鍵按下,沒有則繼續(xù)輸出下一周

7、期,否則轉到相應的波行子程序上??呻S時進行波形間的切換。具體方案見第三章3.2節(jié)。(3)無極調(diào)頻:改變波形子程序中的各個數(shù)據(jù)輸出延時時間,就可改變整個波形的頻率,延時越短頻率越高。而延時時間長短可由外部輸入決定,通過A/D0809將電位計(05V)的模擬量轉化成數(shù)字量(00FF)作為延時時間長短。調(diào)節(jié)電位器即可調(diào)節(jié)延時,進而調(diào)節(jié)頻率。ADC0809芯片分辨率為8位,即可將延時分為256個等級,實現(xiàn)無極調(diào)頻。具體方案見第三章3.3、3.4節(jié)。(4)無極調(diào)幅:改變波形子程序中DA輸出值的大小即可改變幅值,可以在原數(shù)據(jù)基礎上乘以一個增益。而增益可由外部輸入,原理與調(diào)頻相似,通過A/D0809輸入一個

8、數(shù)字量(00FF)。按鍵4用于調(diào)頻/調(diào)幅的切換。當判斷當前為調(diào)幅狀態(tài)時就將這個數(shù)字量存入幅值增益變量中,如果判斷是調(diào)頻狀態(tài)則存入頻率延時變量中。從而實現(xiàn)只用一個電位器分別調(diào)節(jié)頻率和幅度的功能。具體方案見第三章3.3、3.4節(jié)。(5)開始結束:通過掃描小鍵盤,按下5鍵則退出。2.2 程序流程圖開始NYNY結束初始化8255調(diào)用ccscan子程序并判斷,無鍵按下則循環(huán)等待,有鍵按下則消抖鍵盤掃描子程序,鍵值keyKey=5?Key=0?Key=1?Key=2?Key=3?YYYYNNN方波子程序,出口參數(shù):波形標志位=0三角波子程序,出口參數(shù):波形標志位=1鋸齒波子程序,出口參數(shù):波形標志位=2正

9、弦波子程序,出口參數(shù):波形標志位=3Key=4?鍵盤掃描子程序,鍵值keyNFLAG_FUPIN取反Key=波形標志位顯示調(diào)頻/調(diào)幅狀態(tài)顯示波形信息顯示波形信息顯示波形信息顯示波形信息圖2.1 主程序流程圖2.3 電路原理圖圖2.2 硬件連接電路圖第三章 典型模塊分析3.1 波形產(chǎn)生模塊四個波形子程序結構類似,當子程序被調(diào)用后,進行以下步驟:(1)通過8255的C7位輸出一個低電平來啟動AD0809,并從8255的B口讀入AD輸入的數(shù)字量(00HFFH)。(2)判斷幅頻標志位FLAG_FUPIN,為0則把AD輸入的數(shù)字量存入頻率值空間FRE,否則存入幅值空間AMP。(3)輸出波形的一個周期。(

10、4)調(diào)用子程序CCSCAN,判斷小鍵盤有無按鍵按下,無則繼續(xù)步驟(1),有則返回主程序。流程圖如圖3.1所示。子程序調(diào)用啟動AD0809,讀入數(shù)據(jù)到ALFlag_fupin=0?保存到頻率,F(xiàn)reAL保存到幅值,AmpAL輸出一個周期波形小鍵盤有鍵按下?YNYN延時消抖小鍵盤有鍵按下?NY子程序返回圖3.1 波形子程序流程圖3.1.1 方波 方波的產(chǎn)生先向DA0832輸出一個低電平(00H),并延時一段時間。再輸出一個高電平(此處直接用AMP的值作為高電平,AMP是外部AD輸入的幅值增益),延時一段相同時間,就是矩形波的一個周期。 (1)一個周期波形的代碼: NEXT1_1: MOV DX,D

11、A0832 ;寫00H,輸出低電平 MOV AL,00H OUT DX,AL CALL DELAY1;延時 MOV DX,DA0832 ;寫 AMP,輸出高電平 MOV AL,AMP ;AMP=00HFFH,默認值 7FH OUT DX,AL CALL DELAY1;延時(2)延時子程序代碼: DELAY1 PROC NEAR ;軟件延時子程序 PUSH CX PUSH AX MOV CH,FRE ;讀取頻率值,F(xiàn)RE=00HFFH AND CH,0F0H ADD CH,0FH ;CH的值受FRE的控制,改變FRE則改變延時時間 MOV CL,0FFH DD1: MOV AX,0FF00H D

12、D2: DEC AX JNZ DD2 LOOP DD1 POP AX POP CX RET DELAY1 ENDP3.1.2 三角波三角波從最小值開始逐漸上升,到達最大值之后再逐漸減小到最小。因此先將最小值(00H)放到BL,輸出并延時,對BL加一,再輸出并延時,達到最大值后就對BL依次減一,輸出并延時,直到BL=00H,則為一個周期波形。因此三角波有兩個過程。一個周期波形的代碼如下: NEXT1_2: MOV BL,00H ;BL賦最小值00H UP1: MOV AL,AMP ;AL幅值增益AMP, AMP=00HFFH AND AL,0F0H SHR AL,4 ; AL=00H0FHMUL

13、 BL ; ALBL*AL MOV DX,DA0832 ;啟動D/A轉換 OUT DX,AL ;輸出AL CALL DELAY2 INC BL ;BL加一 CMP BL,25H ;判斷BL是否加到最大值了 JNE UP1 DOWN: MOV AL,AMP ;AL幅值增益AMP ,AMP=00HFFH AND AL,0F0H SHR AL,4 ; AL=00H0FHMUL BL; ALBL*ALMOV DX,DA0832 OUT DX,AL CALL DELAY2 DEC BL ;BL減一 CMP BL,00H;判斷BL是否減到最小值了 JNE DOWN延時子程序與方波類似,此處不再贅述。局部流

14、程圖如圖3.2所示。3.1.3 鋸齒波 鋸齒波與三角波類似,只是鋸齒波到達最大值之后,直接跳到最小值。因此鋸齒波只有對BL依次加一的過程。一個周期波形的代碼如下:NEXT1_3: MOV BL,00H ;BL賦最小值00H UP2: MOV AL,AMP ;AL幅值增益AMP, AMP=00HFFH AND AL,0F0H SHR AL,4 ; AL=00H0FH MUL BL; ALBL*AL MOV DX,DA0832 ;啟動D/A轉換 OUT DX,AL;輸出AL CALL DELAY2 INC BL;BL加一 CMP BL,25H;判斷BL是否加到最大值了 JNE UP2 MOV BL

15、,00H;BL加到最大之后直接賦給最小值00H MOV AL,AMP AND AL,0F0H SHR AL,4 MUL BL; ALBL*AL MOV DX,DA0832 OUT DX,AL CALL DELAY2延時子程序與方波類似,此處不再贅述。局部流程圖如圖3.3所示。BL已到最大?延時BL*增益AL,輸出ALBL=00HBL加一NYBL已到最???延時BL*增益AL,輸出ALBL減一NY圖3.2 三角波一周期流程圖BL=00H延時BL*增益AL,輸出ALBL*增益AL,輸出ALBL=00H延時BL加一BL已到最大?NY圖3.3 鋸齒波一周期流程圖3.1.4 正弦波正弦波是利用正弦表(見附

16、錄 代碼段)輸出的,即將正弦表中的數(shù)值一一輸出并延時。一個周期波形的代碼: NEXT1_4: LEA SI,SIN ;指向正弦表中的第一個數(shù)據(jù) MOV CX,255 UP: MOV BL,AMP ;BL幅值增益AMP, AMP=00HFFH AND BL,0F0H SHR BL,4 ;AMP=00HFFH ,BL=00H0F MOV AL,SI ;讀取正弦表中的一個數(shù)據(jù) SHR AL,2 MUL BL ; AL AL* BL MOV DX,DA0832 ;啟動D/A轉換 OUT DX,AL ;輸出AL CALL DELAY3 INC SI ;指向表中的下一個數(shù)據(jù) LOOP UP延時子程序與方波

17、類似,此處不再贅述。局部流程圖如圖3.4所示。延時讀表中的一個數(shù)據(jù)到AL取正弦表首地址AL*增益AL,輸出AL表地址加一已到表末?NY圖3.4 正弦波一周期流程圖3.2 小鍵盤模塊小鍵盤用到兩個子程序(ccscan和scan)。(1) ccscan子程序只是一個輔助程序,用于判斷當前小鍵盤是否有鍵按下,有則全零標志位ZF=0(運算結果不為0),無鍵按下則ZF=1(運算結果為0)。子程序代碼如下: CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序 MOV AL,00H MOV DX,MY8255_A ;將4列全選通,X1X4置0 OUT DX,AL MOV DX,MY8255_C I

18、N AL,DX ;讀Y1Y4 NOT AL AND AL,0FH ;取出Y1Y4的反值 RET CCSCAN ENDP(2) scan功能為當確定小鍵盤有鍵按下則一列一列掃描鍵盤,判斷是哪一列哪一行的鍵被按下了,并把鍵值保存到數(shù)據(jù)段的key空間去。子程序代碼如下: SCAN PROC NEAR MOV CH,0FEH MOV CL,00H ;設置當前檢測的是第幾列 COLUM: MOV AL,CH ;選取一列,將X1X4中一個置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;讀Y1Y4,用于判斷是哪一行按鍵閉合 IN AL,DX L1: TEST AL

19、,01H ;是否為第1行 JNZ L2 ;不是則繼續(xù)判斷 MOV AL,00H ;設置第1行第1列的對應的鍵值 JMP KCODE L2: TEST AL,02H ;是否為第2行 JNZ L3 ;不是則繼續(xù)判斷 MOV AL,04H ;設置第2行第1列的對應的鍵值 JMP KCODE L3: TEST AL,04H ;是否為第3行 JNZ L4 ;不是則繼續(xù)判斷 MOV AL,08H ;設置第3行第1列的對應的鍵值 JMP KCODE L4: TEST AL,08H ;是否為第4行 JNZ NEXT ;不是則繼續(xù)判斷 MOV AL,0CH ;設置第4行第1列的對應的鍵值 JMP KCODE N

20、EXT: INC CL ;當前檢測的列數(shù)遞增 MOV AL,CH TEST AL,08H ;檢測是否掃描到第4列 JZ KERR ;是則跳回到開始處 ROL AL,1 ;沒檢測到第4列則準備檢測下一列 MOV CH,AL JMP COLUM KCODE: ADD AL,CL ;將第1列的值加上當前列數(shù),確定按鍵值 MOV KEY,AL ;保存按鍵值到key空間 KERR: RET SCAN ENDP3.3 調(diào)幅調(diào)頻模塊系統(tǒng)只使用了一個電位計可以分別調(diào)節(jié)頻率和幅值。波形子程序中每個循環(huán)周期啟動一次A/D轉換,啟動信號由C7口輸出,將讀入的數(shù)據(jù)放到特定的存儲單元FRE(或AMP)中,供延時(或幅值

21、輸出)時使用。本次實驗ADC 0809芯片的輸出八位數(shù)據(jù)線連到了8255端口B,通過端口B讀入。模擬輸入量Vin通過電位計從05V無極可調(diào),對應的數(shù)字輸出量N從00HFFH變化。調(diào)頻:改變波形子程序中的各個數(shù)據(jù)輸出延時時間,就可改變整個波形的頻率。延時時間由AD0809讀入的數(shù)據(jù)控制。調(diào)幅:在波形子程序中給DA輸出值乘以一個增益,改變增益的大小即可改變幅值。增益由AD0809讀入的數(shù)據(jù)控制。調(diào)頻/調(diào)幅切換:主程序設了一個幅頻標志位FLAG_FUPIN,當小鍵盤的4鍵按下時,使FLAG_FUPIN取反(默認標志位=0)。波形子程序中通過判斷幅頻標志位FLAG_FUPIN的狀態(tài),可以選擇是調(diào)頻還是

22、調(diào)幅。部分代碼如下:(1)主程序中的切換部分 GETKEY3: CALL SCAN ;有鍵按下,調(diào)用鍵盤掃描子程序 MOV AL,KEY CMP AL,08H ;判斷是否為調(diào)幅 /調(diào)頻鍵 JNE LOOP1 ;不是則返回判斷波形或退出 NOT BYTE PTRFLAG_FUPIN ;是,則將幅頻標志位取反 CMP FLAG_FUPIN,0 JNE TIAOFU MOV DX,OFFSET MES5 ;屏幕顯示切換到調(diào)頻狀態(tài) MOV AH,09H INT 21H JMP JIXU TIAOFU: MOV DX,OFFSET MES6 ; 屏幕顯示切換到調(diào)幅狀態(tài) MOV AH,09H INT 21

23、H JIXU: MOV BL,FLAG_BOXING MOV KEY,BL ;將波形對應的鍵值存回 KEY中 JMP LOOP1 ;返回判斷波形(2)波形子程序部分 MOV DX,MY8255_MODE ; 通過8255的C7口發(fā)出一個低電平 MOV AL,00001110B OUT DX,AL;啟動AD0809 MOV DX,MY8255_B ;讀8255B口數(shù)據(jù) IN AL,DX MOV BL,FLAG_FUPIN ;判斷幅頻標志位,默認為0 CMP BL,0 JE PIN_1 ; 為0則跳轉到PIN_1 MOV AMP,AL ; 不為0則存為振幅值 JMP NEXT1_1 PIN_1:

24、MOV FRE,AL; 為0則存為頻率值流程圖見圖2.1和圖3.1第四章 系統(tǒng)調(diào)試過程及結果此次設計波形發(fā)生器是我們在學習匯編以來接觸到的比較大的程序。無論用何種程序書寫,理清思路是關鍵。因此,從拿到題目開始,我們花了很多時間來對設計波形發(fā)生器的硬件和軟件進行了分析與思考,從中選出最好的解決方法。在系統(tǒng)調(diào)試的過程中,我們用到的一個很重要的分析過程就是先易后難,先局部后整體,先將各個波形的子程序寫出來,一一進行測試。無誤后再寫主程序將各個子程序整合起來。設計的過程是由易到難的,我們從實現(xiàn)最簡單的波形產(chǎn)生功能開始,逐步添加波形切換功能、小鍵盤輸入功能、無極調(diào)頻功能、無極調(diào)幅功能,整個系統(tǒng)由簡至繁逐

25、步完善。最先遇到的比較大的困難是小鍵盤的輸入,前后試過兩個方案,最終以唐都提供的參考程序為基礎,進過修改得到了現(xiàn)在使用的鍵盤掃描子程序,效果很好。整個過程中最難的是實現(xiàn)無級調(diào)頻和無極調(diào)幅,開始時一直無法調(diào)頻,經(jīng)過對各個部位的仔細調(diào)試分析,是0809模數(shù)轉換的問題。0809需要一個啟動信號,且轉換需要一定時間。于是我們用C口每周期輸出一啟動信號進行轉換。最終達到理想效果。實現(xiàn)了調(diào)頻之后,對整個程序的結構稍加改進,引入了幅頻標志位,實現(xiàn)了小鍵盤控制調(diào)頻/調(diào)幅的切換,從而只用一個電位計和一個小鍵盤按鍵實現(xiàn)了無極調(diào)頻和無極調(diào)幅的功能。不足和改進:1所產(chǎn)生的頻率范圍較窄。應盡量減少延時拓寬頻率。2幅值調(diào)

26、節(jié)范圍不夠大。3產(chǎn)生的波形不是理想狀態(tài)。特別是方波,上下跳變時,總會有斷點。波形有噪聲,不是理想的波形。4由于波形每周期之后要讀端口,與下一個周期之間有一定延時誤差。第五章 收獲與體會本次課程設計的要求雖然不多,但整個設計過程是問題不斷,一波三折。整個課程設計完成之后,我在整體設計思路、硬件連結和匯編語言編程等方面得到了很大的收獲。設計的過程是由易到難的,我們從實現(xiàn)最簡單的波形產(chǎn)生功能開始,逐步添加波形切換功能、小鍵盤輸入功能、無極調(diào)頻功能、無極調(diào)幅功能,整個系統(tǒng)由簡至繁逐步完善。而程序總體流程也是三易其稿,其中有借鑒了別人的一些設計思路。第一個方案實在缺乏設計的智慧,在得到正確的指標后就被拋

27、棄了。第二個方案時,我們把控制波形轉換的功能寄希望于用中斷實現(xiàn),而調(diào)頻變化在延時子程序中進行,最后證實這樣子的程序流程圖將很復雜冗長,條理不清晰,而且用中斷實現(xiàn)時缺乏所需的硬件。最后一個方案即為當前選擇的方案,條理清晰,程序簡單,代碼也短,但是能很好實現(xiàn)所有功能。硬件連結的問題主要在使用第二個方案時出現(xiàn)的。第二個方案的中斷控制需要手動輸入一個中斷脈沖,然后結果總是有差,最后討論得出結論是我們很難保證這個手動輸入脈沖的合格,這個脈沖可能不夠標準。后面做最終方案時,波形發(fā)生顫抖,檢查發(fā)現(xiàn)是控制波形選擇的開關處不穩(wěn)定,也算是硬件連結的問題。而波形特別是矩形波輸出時,在中間總是一個斷痕,反復檢查軟件設

28、計后也歸結為硬件內(nèi)部延時所產(chǎn)生誤差。做軟件設計時遇到的關鍵點也是難點集中到了調(diào)頻電路的選擇。第二方案時,我們把調(diào)頻參數(shù)的讀取放置在延時程序,主程序不循環(huán),每一個波形都是無限循環(huán)的波形。后來得到高人指點,我們忽略了主程序循環(huán)所會帶來的延時對波形的影響,以主程序無限循環(huán),每輸出一個周期波形讀一次調(diào)頻參數(shù)的方式進行調(diào)頻。結果很完美。實現(xiàn)了調(diào)頻之后,對整個程序的結構稍加改進,引入了幅頻標志位,實現(xiàn)了小鍵盤控制調(diào)頻/調(diào)幅的切換,從而只用一個電位計和一個小鍵盤按鍵實現(xiàn)了無極調(diào)頻和無極調(diào)幅的功能。參考文獻1周荷琴,吳秀清.微型計算機原理與接口技術.合肥:中國科學技術大學出版社,2008.62唐都科教儀器開發(fā)

29、有限公司. 32位微機原理與接口技術實驗教程.3陳明義.數(shù)字電子技術基礎.長沙.中南大學出版社,2008.9附錄1 匯編語言源程序代碼 ;*根據(jù)查看端口資源修改下列符號值* IOY0 EQU 0E400H ;片選IOY0對應的端口始地址 IOY1 EQU 0E440H ;片選IOY1對應的端口始地址;* DA0832 EQU IOY0+00H*4 ;DA0832的端口地址 MY8255_A EQU IOY1+00H*4 ;8255的A口地址 MY8255_B EQU IOY1+01H*4 ;8255的B口地址 MY8255_C EQU IOY1+02H*4 ;8255的C口地址 MY8255_

30、MODE EQU IOY1+03H*4 ;8255的控制寄存器地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT STR1 DB DA0832: Please choose Wave,0AH,0DH,$ ;定義顯示的字符串 MES1 DB SHOW A SQUARE,0AH,0DH,$ MES2 DB SHOW A SANJIAO,0AH,0DH,$ MES3 DB SHOW A JUCHI,0AH,0DH,$ MES4 DB SHOW A SINE,0AH,0DH,$ MES5 DB CHANGE THE Freque

31、nce,0AH,0DH,$ MES6 DB CHANGE THE Amplitude,0AH,0DH,$ KEY DB? FLAG_BOXING DB ? FLAG_FUPIN DB 0 FRE DB 7FH AMP DB 7FH SIN DB 100, 102, 105, 107, 110, 112, 115, 117, 120, 122 DB 124, 127, 129, 132, 134, 136, 139, 141, 143, 145 DB 147, 150, 152, 154, 156, 158, 160, 162, 164, 166 DB 168, 169, 171, 173, 1

32、75, 176, 178, 179, 181, 182 DB 184, 185, 186, 187, 189, 190, 191, 192, 193, 194 DB 194, 195, 196, 197, 197, 198, 198, 199, 199, 199 DB 200, 200, 200, 200, 200, 200, 200, 200, 199, 199 DB 199, 198, 198, 197, 197, 196, 195, 194, 194, 193 DB 192, 191, 190, 189, 187, 186, 185, 184, 182, 181 DB 179, 178,

33、 176, 175, 173, 171, 169, 168, 166, 164 DB 162, 160, 158, 156, 154, 152, 150, 147, 145, 143 DB 141, 139, 136, 134, 132, 129, 127, 124, 122, 120 DB 117, 115, 112, 110, 107, 105, 102, 100, 98, 95 DB 93, 90, 88, 85, 83, 80, 78, 76, 73, 71 DB 68, 66, 64, 61, 59, 57, 55, 53, 50, 48 DB 46, 44, 42, 40, 38,

34、 36, 34, 32, 31, 29 DB 27, 25, 24, 22, 21, 19, 18, 16, 15, 14 DB 13, 11, 10, 9, 8, 7, 6, 6, 5, 4 DB 3, 3, 2, 2, 1, 1, 1, 0, 0, 0 DB 0, 0, 0, 0, 0, 1, 1, 1, 2, 2 DB 3, 3, 4, 5, 6, 6, 7, 8, 9, 10 DB 11, 13, 14, 15, 16, 18, 19, 21, 22, 24 DB 25, 27, 29, 31, 32, 34, 36, 38, 40, 42 DB 44, 46, 48, 50, 53,

35、 55, 57, 59, 61, 64 DB 66, 68, 71, 73, 76, 78, 80, 83, 85, 88 DB 90, 93, 95, 98, 100 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET STR1 ;顯示提示選擇界面 MOV AH,9 INT 21H MOV DX,OFFSET MES5 ;show message MOV AH,09H INT 21H MOV DX,MY8255_MODE ;初始化8255工作方式 MOV AL,100

36、00011B ;方式0,A口、C口高四位輸出, OUT DX,AL ; B口、C口低4位輸入;無鍵按下則循環(huán)等待,有鍵按下則消抖KEYBEGIN: CALL CCSCAN ;掃描按鍵 JNZ GETKEY1 ;有鍵按下則跳置GETKEY1 JMP KEYBEGIN ;無按鍵則繼續(xù)循環(huán)等待 GETKEY1: CALL DELAY_SCAN ;有鍵壓下,延時消抖 CALL DELAY_SCAN CALL CCSCAN ;再次掃描按鍵 JNZ GETKEY2 ;有鍵按下則跳置GETKEY2 JMP KEYBEGIN ;否則跳回開始繼續(xù)循環(huán) GETKEY2: CALL SCAN LOOP1: MOV

37、AL,KEY CMP AL,0CH JE A0 CMP AL,0DH JE A1 CMP AL,0EH JE A2 CMP AL,0FH JE A3 CMP AL,9H JE QUIT JMP KEYBEGIN A0: MOV DX,OFFSET MES1 ;show message MOV AH,09H INT 21H CALL SQUARE MOV FLAG_BOXING,0CH JMP GETKEY3 A1: MOV DX,OFFSET MES2 ;show message MOV AH,09H INT 21H CALL SANJIAO MOV FLAG_BOXING,0DH JMP G

38、ETKEY3 A2: MOV DX,OFFSET MES3 ;show message MOV AH,09H INT 21H CALL JUCHI MOV FLAG_BOXING,0EH JMP GETKEY3 A3: MOV DX,OFFSET MES4 ;show message MOV AH,09H INT 21H CALL SINE MOV FLAG_BOXING,0FH JMP GETKEY3 GETKEY3: CALL SCAN ;有鍵按下,調(diào)用鍵盤掃描子程序 MOV AL,KEY;判斷是否為調(diào)幅 /調(diào)頻鍵 CMP AL,08H ;不是則返回判斷波形或退出 JNE LOOP1 NO

39、T BYTE PTRFLAG_FUPIN ;是,則改變幅頻標志位 CMP FLAG_FUPIN,0 JNE TIAOFU MOV DX,OFFSET MES5 ;show message MOV AH,09H INT 21H JMP JIXU TIAOFU: MOV DX,OFFSET MES6 ;show message MOV AH,09H INT 21H JIXU: MOV BL,FLAG_BOXING MOV KEY,BL ;將波形對應的鍵值存回 KEY中 JMP LOOP1 ;返回判斷波形 QUIT: MOV AX,4C00H ;返回到DOS INT 21H SCAN PROC NE

40、AR MOV CH,0FEH MOV CL,00H ;設置當前檢測的是第幾列 COLUM: MOV AL,CH ;選取一列,將X1X4中一個置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;讀Y1Y4,用于判斷是哪一行按鍵閉合 IN AL,DX L1: TEST AL,01H ;是否為第1行 JNZ L2 ;不是則繼續(xù)判斷 MOV AL,00H ;設置第1行第1列的對應的鍵值 JMP KCODE L2: TEST AL,02H ;是否為第2行 JNZ L3 ;不是則繼續(xù)判斷 MOV AL,04H ;設置第2行第1列的對應的鍵值 JMP KCODE L3: TEST AL,04H ;是否為第3行 JNZ L4 ;不是則繼續(xù)判斷 MOV AL,08H ;設置第3行第1列的對應的鍵值 JMP KCODE L4: TEST AL,08H ;是否為第4行 JNZ NEXT ;不是則繼續(xù)判斷 MOV AL,0CH ;設置第4行第1列的對應的鍵值 JMP KCODE NEXT: INC CL ;當前檢測的列數(shù)遞增 MOV AL,CH TEST AL,08H ;檢測是否掃描到第4列 JZ KERR ;是則跳回到開始處 ROL AL,1 ;沒檢測到第4列則準備檢測下一列 MOV

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!