中南大學(xué)微機(jī)原理實驗報告信號發(fā)生器_第1頁
中南大學(xué)微機(jī)原理實驗報告信號發(fā)生器_第2頁
中南大學(xué)微機(jī)原理實驗報告信號發(fā)生器_第3頁
中南大學(xué)微機(jī)原理實驗報告信號發(fā)生器_第4頁
中南大學(xué)微機(jī)原理實驗報告信號發(fā)生器_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 微型計算機(jī)原理與接口技術(shù) 實驗課程設(shè)計課程題目: 信號發(fā)生器 學(xué)院 : 信息科學(xué)與工程學(xué)院專業(yè)班級: 自動化1105學(xué)號 :0909112324姓名 : 樊文躍指導(dǎo)老師: 王擊 李志明 目錄一 、 課程設(shè)計概述二 、 設(shè)計思想與實施方案三 、 典型模塊與編程分析四 、 系統(tǒng)調(diào)試五 、 課程設(shè)計收獲與體會六 、 參考文件七 、 附錄 一 、課程設(shè)計概述1.1 課程設(shè)計目的微型計算機(jī)原理與接口技術(shù)理論課程是一門專業(yè)基礎(chǔ)課程,它的主要內(nèi)容包括微型計算機(jī)體系結(jié)構(gòu)、8086 微處理器和指令系統(tǒng)、匯編語言設(shè)計以及微型計算機(jī)各個組成部分介紹等內(nèi)容。要求學(xué)生對微機(jī)原理中的基本概念有較深入的了解,能夠系統(tǒng)地掌

2、握微型計算機(jī)的結(jié)構(gòu)、8086 微處理器和指令系統(tǒng)、匯編語言程序設(shè)計方法、微機(jī)系統(tǒng)的接口電路設(shè)計及編程方法等,并具有綜合運用所學(xué)知識分析問題和解決問題的能力。本課程設(shè)計,旨在提高同學(xué)匯編語言的編程能力以及對外部硬件(8086,DC0832,74LS138,8255,數(shù)碼管,矩陣鍵盤)的認(rèn)識,掌握各芯片的用法,鍛煉學(xué)生在微機(jī)應(yīng)用方面的實際工作能力,將所學(xué)轉(zhuǎn)化為所用。同學(xué)們應(yīng)該充分利用實驗室現(xiàn)有資源以及微機(jī)原理與接口技術(shù)中的相關(guān)實驗資料,以試驗箱或proteus仿真軟件為工具,以匯編語言或C語言為開發(fā)語言,實現(xiàn)多個模塊的結(jié)合及軟硬結(jié)合,獨立完成給定的任務(wù)。在完成任務(wù)的基礎(chǔ)上,以提升能力為目標(biāo),各位同

3、學(xué)可以嘗試用其他的編程語言實現(xiàn)給定要求,并開動自己的腦經(jīng),完善功能并盡可能多的做到以較簡單的方法實現(xiàn)較為困難的問題,以較少的器件實現(xiàn)較多的功能,并琢磨模塊間的配合實現(xiàn)。1.2 課程設(shè)計的要求(1)分別用C語言或匯編語言編程完成硬件接口功能設(shè)計; (2)硬件電路基于80x86微機(jī)的接口電路; (3)程序功能要求:小鍵盤給定、數(shù)碼管(屏幕)顯示,并產(chǎn)生對應(yīng)信號 波形(D/A)輸出(信號波形包括正弦波、三角波、方波、鋸齒波)、輸出信號波 形幅度、頻率可調(diào)。(注意:按鍵數(shù)量應(yīng)盡量少)。(4)實現(xiàn)遠(yuǎn)程控制 第二章 設(shè)計思想和實施方案2.1 功能分析2.1.1 波形產(chǎn)生結(jié)合微機(jī)原理實驗中關(guān)于波形的顯示,在

4、TDPID平臺上,因為涉及數(shù)字量與模擬量之間的相互轉(zhuǎn)化,所以DAC0832和ADC0809要相互配合使用。在本次課程設(shè)計中,由于在PROTEUS中仿真由數(shù)字信號轉(zhuǎn)換為模擬信號來產(chǎn)生波形,所以結(jié)合一片DAC0832即可實現(xiàn)。通過匯編語言編寫各個波形子程序,由于要顯示波形,控制每輸出一個值,都進(jìn)行一定時間的延時,然后掃描沒有按鍵按下后再輸出下一個值,直到形成一個周期的代碼。利用循環(huán),就可產(chǎn)生連續(xù)波形代碼,再通過8255輸出給DAC0832,將數(shù)字量轉(zhuǎn)換成模擬量輸出,即可得各種波形。 2.1.2 波形的切換 由于設(shè)計要求上提出,小鍵盤給定,所以結(jié)合該題目我們可以通過4*4小鍵盤來實現(xiàn)波形的切換。第一

5、列從上到下編碼為0,1,2,3,分別對應(yīng)方波、三角波、鋸齒波、正弦波。第二列第一個鍵的鍵值為4,對應(yīng)退出波形,可以重新選擇波形,實現(xiàn)波形切換。當(dāng)沒有輸出波形的時候,也就是輸出為零,選擇0到3就會進(jìn)入相應(yīng)的波形子程序。進(jìn)入波形子程序以后,每一個點輸出之前都會調(diào)用掃描子程序,判斷是否有鍵按下,有則跳轉(zhuǎn)到相應(yīng)的程序斷去執(zhí)行,無則繼續(xù)。由于小鍵盤掃描在程序總是存在的,因此可隨時進(jìn)行波形間的切換。2.1.3 數(shù)碼管顯示數(shù)碼管同步顯示當(dāng)前波形的幅值和頻率。硬件上由8086將數(shù)據(jù)輸出給8255,8255再將輸出送給數(shù)碼管的ADp,顯示相應(yīng)字符。寫入8255的控制字,A,B端口輸出,C端口輸入,通過A和B端口

6、進(jìn)行段碼和位碼的選擇,同時軟件上定義一個緩沖區(qū)存放波形的幅值和頻率,顯示數(shù)碼管時,利用緩沖區(qū)的數(shù)值查找數(shù)碼管鍵值表再輸出對應(yīng)數(shù)值。循環(huán)輸出波形時也循環(huán)輸出緩沖區(qū)內(nèi)容對應(yīng)的值,就可以同步顯示波形的幅值和頻率。利用小鍵盤掃描得到的鍵值進(jìn)行判斷,對緩沖區(qū)內(nèi)的幅值頻率進(jìn)行相應(yīng)的改變,使數(shù)碼管能顯示不同的幅值和頻率。2.1.4 小鍵盤給定 使用實驗箱上4×4鍵盤,可以實現(xiàn)切換波形,調(diào)頻、調(diào)幅和退出波形的控制功能。在Protues輸入keypad關(guān)鍵字,找到虛擬鍵盤。在掃描鍵盤時先在全部列通入低電平,掃描是否有行為低電平,若有,則表示有鍵按下,然后鍵盤矩陣掃描時輪流選通一行,然后從端口處讀取列數(shù)

7、據(jù),如果有按鍵則讀取的數(shù)據(jù)肯定有一位為0,經(jīng)過取反后,應(yīng)有一位為1,然后再根據(jù)選取的列和讀取的行值,確定按的是哪一個鍵,調(diào)用保存函數(shù)將鍵值編碼保存在一個名為key的存儲單元里。當(dāng)有鍵按下時,從key內(nèi)取出鍵值進(jìn)行判斷,就能轉(zhuǎn)入相應(yīng)的子程序進(jìn)行控制,并且鍵盤掃描、獲取鍵值等子程序也能夠很好的嵌入在其他程序中,方便調(diào)用。既方便程序的編寫,也提高了可讀性。 2.1.5 有級調(diào)頻改變波形子程序中的各個數(shù)據(jù)輸出的延時時間,就可改變整個波形的頻率。延時越短周期越長頻率越高。定義三個緩沖區(qū)來存放延時,其中一個存放初始值4,一個存放當(dāng)前波形的延時,還有一個作為中間暫存用。產(chǎn)生波形以后,取出延時初值存入中間暫存

8、緩沖區(qū),再掃描鍵盤:0對應(yīng)減小延時,1對應(yīng)增大延時,無鍵則不改變延時。對暫存區(qū)的數(shù)值進(jìn)行相應(yīng)操作后,將最后的值存入名為tiaopin的緩沖區(qū)內(nèi)作為當(dāng)前波形的延時。也可利用ADC0809用定位器進(jìn)行無級調(diào)節(jié)。 2.1.6 有級調(diào)幅 和有級調(diào)頻類似,有極調(diào)幅也是定義三個緩沖區(qū),功能和有極調(diào)頻類似。幅值緩沖區(qū)存放的是輸出點的值的放大倍數(shù),調(diào)節(jié)放大倍數(shù)也就使幅值改變了。產(chǎn)生波形以后,取出倍數(shù)初值存入中間暫存緩沖區(qū),再掃描鍵盤:2對應(yīng)減小倍數(shù),3對應(yīng)增大倍數(shù),無鍵則不改變倍數(shù)。對暫存區(qū)的數(shù)值進(jìn)行相應(yīng)操作后,將最后的值存入名為tiaofu的緩沖區(qū)內(nèi)作為當(dāng)前波形的幅值放大倍數(shù)。也可利用ADC0809用定位器

9、進(jìn)行無級調(diào)節(jié)。2.1.7 結(jié)束退出當(dāng)鍵盤掃描到的鍵值等于4時,無論在什么時候,它就會無條件跳出程序,返回起始狀態(tài),等待選擇波形,同時數(shù)碼管顯示零。 2.2 所用芯片功能簡介2.2.1 8086功能簡介8086 CPU是由總線接口部件BIU和執(zhí)行部件EU這兩大部分構(gòu)成??偩€接口部件BIU是8086 CPU在存儲器和I/O設(shè)備之間的接口部件,負(fù)責(zé)對全部引腳的操作,即8086對存儲器和I/O設(shè)備的所有操作都是由BIU完成的。所有對外部總線的操作都必須有正確的地址和適當(dāng)?shù)目刂菩盘?,BIU中的各部件主要是圍繞這個目標(biāo)設(shè)計的。它提供了16位雙向數(shù)據(jù)總線、20位地址總線和若干條控制總線。其具體任務(wù)是:負(fù)責(zé)從

10、內(nèi)存單元中預(yù)取指令,并將它們送到指令隊列緩沖器暫存。CPU執(zhí)行指令時,總線接口單元要配合執(zhí)行單元,從指定的內(nèi)存單元或I/O端口中取出數(shù)據(jù)傳送給執(zhí)行單元,或者把執(zhí)行單元的處理結(jié)果傳送到指定的內(nèi)存6 單元或I/O端口中。 執(zhí)行單元EU中包含1個16位的運算器ALU、8個16位的寄存器、1個16位標(biāo)志寄存器FR、1個運算暫存器和執(zhí)行單元的控制電路。這個單元進(jìn)行所有指令的解釋和執(zhí)行,同時管理上述有關(guān)的寄存器。EU對指令的執(zhí)行是從取指令操作碼開始的,它從總線接口單元的指令隊列緩沖器中每次取一個字節(jié)。如果指令隊列緩沖器中是空的,那么EU就要等待BIU通過外部總線從存儲器中取得指令并送到EU,通過譯碼電路分

11、析,發(fā)出相應(yīng)控制命令,控制ALU數(shù)據(jù)總線中數(shù)據(jù)的流向。 8086管腳圖如下: 2.2.2 8255功能簡介 8255A具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強(qiáng),使用靈活,通過它CPU可直接與外設(shè)相連。 8255A在使用前要寫入一個方式控制字,選擇A、B、C三個端口各自的工作方式,共有三種。方式0 :基本的輸入輸出方式,即無須聯(lián)絡(luò)就可以直接進(jìn)行的 I/O方式。其中A、B、C口的高四位或低四位可分別設(shè)置成輸入或輸出;方式1 :選通I/O,此時接口和外圍設(shè)備需聯(lián)絡(luò)信號進(jìn)行協(xié)調(diào),只有A口和B口可以工作

12、在方式1,此時C口的某些線被規(guī)定為A口或B口與外圍設(shè)備的聯(lián)絡(luò)信號,余下的線只有基本的I/O功能,即只工作在方式0;方式2: 雙向I/O方式,只7 有A口可以工作在這種方式,該I/O線即可輸入又可輸出,此時C口有5條線被規(guī)定為A口和外圍設(shè)備的雙向聯(lián)絡(luò)線,C口剩下的三條線可作為B口方式1的聯(lián)絡(luò)線,也可以和B口一起方式0的I/O線。8255 管腳分布如下: 2.2.3 DAC0832功能簡介 DAC0832是采用CMOS工藝制成的單片電流輸出型8位數(shù) / 模轉(zhuǎn)換器。它由倒T型R-2R電阻網(wǎng)絡(luò)、模擬開關(guān)、運算放大器和參考電壓VREF四大部分組成。電路有極好的溫度跟隨性,使用了COMS電流開關(guān)和控制邏輯

13、而獲得低功耗、低輸出的泄漏電流誤差。集成電路內(nèi)有兩級輸入寄存器,使DAC0832芯片具備雙緩沖、單緩沖和直通三種輸入方式,以便適于各種電路的需要. DAC0832有8個輸入端(其中每個輸入端是8位二進(jìn)制數(shù)的一位),有一個模擬輸出端。輸入可有2的8次方,即256個不同的二進(jìn)制組態(tài),輸出為256個電壓之一,即輸出電壓不是整個電壓范圍內(nèi)任意值,而只能是256個可能值。 D/A轉(zhuǎn)換結(jié)果采用電流形式輸出。若需要相應(yīng)的模擬電壓信號,可通過一個高輸入阻抗的線性運算放大器實現(xiàn)。運放的反饋電阻可通過RFB端引用片內(nèi)固有電阻,也可外接。DAC0832邏輯輸入滿足TTL電平,可直接與TTL電路或微機(jī)電路連接。DAC

14、0832管腳分布如下: 2.2.4 74LS273功能簡介 地址鎖存器就是一個暫存器,它根據(jù)控制信號的狀態(tài),將總線上地址代碼暫存起來。8086/8088數(shù)據(jù)和地址總線采用分時復(fù)用操作方法,即用同一總線既傳輸數(shù)據(jù)又傳輸?shù)刂?。?dāng)微處理器與存儲器交換信號時,首先由CPU發(fā)出存儲器地址,同時發(fā)出允許鎖存信號ALE給鎖存器,當(dāng)鎖存器接到該信號后將地址/數(shù)據(jù)總線上的地址鎖存在總線上,隨后才能傳輸數(shù)據(jù)。 地址鎖存器74LS273是帶清除端的八D觸發(fā)器,只有清除端為高電平時才具有鎖存功能,鎖存控制端為11腳CLK,在上升沿鎖存。8086的ALE端輸出的鎖存控制信號必須經(jīng)反相器后才能連到74LS273的CLK端

15、,以滿足CLK在上升沿鎖存的要求。74LS273的引腳1D8D為數(shù)據(jù)輸入端,1Q8Q為數(shù)據(jù)輸出端,WR:主清除端,低電平觸發(fā),即當(dāng)為低電平時,芯片被清除,輸出全為0。CP(CLK):觸發(fā)端,上升沿觸發(fā),即當(dāng)CP從低到高電平時,D0D7的數(shù)據(jù)通過芯片,為0時將數(shù)據(jù)鎖存,D0D7的數(shù)據(jù)不變。由于8086有20位物理地址,所以需要用3片74LS273級聯(lián)。 74LS273管腳分布如下圖: 2.2.5 74LS138功能簡介(1) 當(dāng)一個選通端(E1)為高電平,另兩個選通端((/E2)和/(E3))為低電平時,可將地址端(A0、A1、A2)的二進(jìn)制編碼在Y0至Y7對應(yīng)的輸出端以低電平譯出。比如:A2A

16、1A0=110時,則Y6輸出端輸出低電平信號。(2) (2)利用 E1、E2和E3可級聯(lián)擴(kuò)展成 24 線譯碼器;若外接一個反相器還可級聯(lián)擴(kuò)展成 32 線譯碼器。(3)若將選通端中的一個作為數(shù)據(jù)輸入端時,74LS138還可作數(shù)據(jù)分配器。(4)可用在8086的譯碼電路中,擴(kuò)展內(nèi)存。 74LS138管腳如下: 2.3 實施方案2.3.1系統(tǒng)總體方案 該設(shè)計包括硬件設(shè)計和軟件設(shè)計兩部分。 1.硬件上要求以8086CPU為核心進(jìn)行電路設(shè)計。完全用小鍵盤對波形進(jìn)行控制。小鍵盤作為產(chǎn)生波形、波形切換、調(diào)節(jié)頻率,調(diào)節(jié)幅值、退出波形的控制端口。8255A芯片完成對小鍵盤掃描,獲取鍵值編碼以及輸出到數(shù)碼管。通過D

17、AC0832將數(shù)字量轉(zhuǎn)換成模擬量輸出,再由轉(zhuǎn)換電路將電流輸出轉(zhuǎn)換為電壓輸出產(chǎn)生各種波形,通過虛擬示波器顯示出波形。由于8255A的A,B,C端口都已使用,所以采用鍵盤控制進(jìn)行幅值和頻率的有極調(diào)節(jié)。 2.軟件方面要設(shè)計方波,三角波,鋸齒波,正弦波何時產(chǎn)生,如何產(chǎn)生,何時退出,并且還要設(shè)計如何通過對按鍵的判斷,對頻率和幅值進(jìn)行調(diào)節(jié)。 方波比較簡單,先掃描鍵盤,無鍵按下時輸出零,保持一個延時,再掃描鍵盤,無鍵按下時輸出20H的倍數(shù),該倍數(shù)就是我定義的幅值,再延時,循環(huán)該周期就可得到方波。如果有鍵按下就會轉(zhuǎn)入相應(yīng)子程序。 三角波分為兩段,因它的上升斜坡和下降斜坡都是線性關(guān)系,所以只要由數(shù)字量的增減來控

18、制就可以了。產(chǎn)生上升斜坡時讓輸出值從零開始逐漸遞增,其上升的最大值是30乘以放大倍數(shù),相反,產(chǎn)生下降斜坡時,讓輸出值從最大值逐漸遞減到零。為簡單起見 ,這里采用的是查表法,在數(shù)據(jù)段定義了三角波函數(shù)表,規(guī)律如上。其幅值由放大倍數(shù)控制,頻率是由輸出點之間的延時來控制。 鋸齒波截取三角波的上升斜坡部分,到達(dá)最大值后就跳回最低值0,方法與三角波相同,也采用查表法。先定義了鋸齒波的函數(shù)表,輸出時只要按著函數(shù)表一個一個往下輸出,當(dāng)顯示到最大值即一個周期內(nèi)的最后一個值再將指針指向表的首地址就開始了新的周期。其幅值由放大倍數(shù)控制,頻率是由輸出點之間的延時來控制。 正弦波也是用的查表法。該方法的優(yōu)點是速度快,但

19、在精度高的情況下要求的存儲器容量也要增大,所以此種方法應(yīng)用在對精度要求不高的場合。本程序中制造了一張正弦數(shù)字量表,即查函數(shù)表得到的值轉(zhuǎn)換成十進(jìn)制數(shù)填表。一個周期10 內(nèi),采樣點越多,精度越高,本實驗中采樣點為40點/周期。正弦數(shù)字量表中的值為參考值,對于不同幅值的正弦波可以通過把表中的每個值乘以相同的倍數(shù)得到,其頻率由改變輸出點之間的延時來實現(xiàn)。 頻率和幅值的調(diào)節(jié)由每個點的延時和幅值的放大倍數(shù)決定。在各個波形輸出之前,先讀取頻率和幅值的初值,若要增加(減?。╊l率,則使延時減(加)1;若要增大(減?。┓?,則使原幅值基礎(chǔ)值得放大倍數(shù)加(減)1。然后再將改變后的幅值頻率送給原波形進(jìn)行輸出,同時,幅

20、值和頻率的值作為偏移量查找數(shù)碼管顯示表,然后送給對應(yīng)的數(shù)碼管顯示。2.3.2 系統(tǒng)流程圖 開始 讀取波形選擇值 減小幅值 增加幅值減小頻率增加頻率 正弦波 鋸齒波 三角波 方波鍵盤按鍵? 初始化8255A N40123 鍵盤按鍵?N Y 讀取頻率幅度選擇值12401 23 N 第三章 典型模塊與編程分析3.1鍵盤掃描模塊 小鍵盤工作原理:(1) 初始化8255的工作方式:A,B口作為輸出,C口低四位作為輸入。矩陣的X1X4接到輸出端口PA0PA3上,用程序控制4條行線的輸出。4條列線Y1Y4連接到輸入端口C的PC0PC3。用讀指令讀取C口狀態(tài)時,可讀取鍵盤的列號。 (2) 在無鍵按下的時候,由

21、于接到+5V上的上拉電阻的作用,列線被置成高電平。壓下某一個鍵所在的行線和列線接通。這時,如果向被壓下的鍵所在的行線上輸出一個低電平信號,則對應(yīng)的列線也呈現(xiàn)低電平。當(dāng)從C口讀取列線信號時,便能檢測到該列線上的低電平。(3) 掃描鍵盤時,A口輸出全0,讀C口,取低四位再取反,若為0則無鍵輸入,若不為零則轉(zhuǎn)獲取鍵值子程序。獲取鍵值時,對X1到X4輪流選中,即輪流輸出0。先把第一行賦0,讀C口檢測是不是第一行,不是再繼續(xù)第二行,沒有的話總共循環(huán)4次跳出循環(huán),這樣根據(jù)選中的行和讀入的列狀態(tài)中低電平的位置,便能確定哪個鍵被按下了。檢測到按鍵后,對壓下的鍵進(jìn)行編碼,將該鍵的行列信號轉(zhuǎn)化成16進(jìn)制碼,將鍵值

22、存入緩沖區(qū),以便以后利用進(jìn)行判斷比較。接著繼續(xù)掃描按鍵,等待按鍵釋放。CCSCAN掃描是否有按鍵按下: CCSCAN PROC NEAR 掃描是否有按鍵閉合子序 MOV AL,00H MOV DX,MY8255_A ;將4列全選通,X1X40 OUT DX,AL MOV DX,MY8255_C IN AL,DX ;讀Y1Y4 NOT AL AND AL,0FH ;取出Y1Y4的反值 RET CCSCAN ENDP 如果有按鍵,就獲取按鍵碼的功能,4×4鍵盤的編碼, 從上到下,從左到右,依次編碼為0F, 如果有按鍵, 則轉(zhuǎn)入到按鍵處理子程序模塊執(zhí)行, 如果沒有,則返回主程序循環(huán)。 具體

23、的實現(xiàn)代碼如下:GETKEY1 PROC NEAR ;獲取鍵值子程序 CALL DIS ;顯示刷新 CALL DALLY ;延時 CALL DALLY ;延時 CALL CLEAR ;清屏 13 CALL CCSCAN ;再次掃描按鍵 JNZ GETKEY2 ;有鍵按下則跳置GETKEY2 JMP BEGIN1 ;否則跳回開始繼續(xù)循環(huán) GETKEY2: MOV CH,0FEH MOV CL,00H;設(shè)置當(dāng)前檢測的是第幾列 COLUM: MOV AL,CH ;選取一列,將X1X4中一個置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;讀Y1Y4,用于判斷

24、哪一行按鍵閉合 IN AL,DX L1: TEST AL,01H ;是否為第1行 JNZ L2 ;不是則繼續(xù)判斷 MOV AL,00H ;設(shè)置第1行第1列的對應(yīng)的鍵值 JMP KCODE L2: TEST AL,02H ;是否為第2行 JNZ L3 ;不是則繼續(xù)判斷 MOV AL,04H ;設(shè)置第2行第1列的對應(yīng)的鍵值 JMP KCODE L3: TEST AL,04H ;是否為第3行 JNZ L4 ;不是則繼續(xù)判斷 MOV AL,08H ;設(shè)置第3行第1列的對應(yīng)的鍵值 JMP KCODE L4: TEST AL,08H ;是否為第4行 JNZ NEXT ;不是則繼續(xù)判斷 MOV AL,0CH

25、 ;設(shè)置第4行第1列的對應(yīng)的鍵值 KCODE: ADD AL,CL ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值 CALL PUTBUF ;保存按鍵值 PUSH AX KON: CALL DIS ;顯示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;掃描按鍵,判斷按鍵是否彈起 JNZ KON ;未彈起則繼續(xù)循環(huán)等待彈起 POP AX 14 NEXT: INC CL ;當(dāng)前檢測的列數(shù)遞增 MOV AL,CH TEST AL,08H ;檢測是否掃描到第4列 JZ KERR ;是則跳回到開始處 ROL AL,1 ;沒檢測到第4列則準(zhǔn)備檢測下一列 MOV CH,AL JMP COLUM KER

26、R: RET GETKEY1 ENDP PUTBUF PROC NEAR ;保存鍵值子程序 MOV DI,OFFSET KEY MOV DI,AL CMP DI,2FFFH JNZ GOBACK MOV DI,3004H GOBACK: RET PUTBUF ENDP 3.2 數(shù)碼管顯示模塊 4個數(shù)碼管的X端為選通端,將小鍵盤的X1X4對應(yīng)接到數(shù)碼管,這樣掃描小鍵盤的時候,也就選中了數(shù)碼管,當(dāng)調(diào)用getkey1獲取鍵值子程序的時候,數(shù)碼管輪流選中,也就可以控制哪個數(shù)碼管顯示什么內(nèi)容。通過對8255寫入數(shù)據(jù),由B口輸出給數(shù)碼管的ADp,當(dāng)沒有波形輸入時,數(shù)碼管顯示0數(shù)碼管;定義兩個緩沖區(qū)存放幅值

27、和頻率,有波形輸出時,同步顯示該波形的幅值和頻率。 先在數(shù)據(jù)段定義一個緩沖區(qū)存放數(shù)碼管顯示0F的段位值表: DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H 因為要一直顯示數(shù)碼管,所以將顯示部分作為子程序,方便經(jīng)常調(diào)用。顯示程序代碼如下: DIS PROC NEAR ;顯示鍵值子程序 PUSH AX ;以緩沖區(qū)存放的鍵值為鍵值表偏移找到鍵值并顯示 MOV SI,3000H ;緩沖區(qū)3000H內(nèi)存放了當(dāng)前波形的 幅值,3001H存放了頻率。 MOV DL,0F7H MOV AL,DL AGAI

28、N: PUSH DX MOV DX,MY8255_A OUT DX,AL ;設(shè)置X1X4,選通一個數(shù)碼管 MOV AL,SI ;取出緩沖區(qū)中存放鍵值 MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,BX;將鍵值作為偏移和鍵值基地址相加到相應(yīng)的鍵值 MOV DX,MY8255_B OUT DX,AL ;寫入數(shù)碼管ADp CALL DALLY INC SI ;取下一個鍵值 POP DX MOV AL,DL TEST AL,01H ;判斷是否顯示完? JZ OUT1 ;顯示完,返回 ROR AL,1 MOV DL,AL JMP AGAIN ;未顯

29、示完,跳回繼續(xù) OUT1: POP AX RET DIS ENDP 3.3 有級調(diào)頻調(diào)幅判斷及控制模塊 改變波形產(chǎn)生子程序中的各個數(shù)據(jù)輸出時間,及延時,就可改變整個波形的頻率。改變波形產(chǎn)生子程序中的每次輸出數(shù)值的放大倍數(shù),就可以改變整個波形的幅值。而實現(xiàn)有級變化的初值是在數(shù)據(jù)段預(yù)先定義的數(shù)據(jù)表。 在選擇波形以后,才能調(diào)節(jié)頻率和幅值,頻率和幅值的調(diào)節(jié)由小鍵盤控制。在3000H和3001H的緩沖區(qū)內(nèi)存放了幅值和頻率的初值3,在每個波形輸出之前先掃描鍵盤,鍵值存在KEY里,對KEY值進(jìn)行判斷后,取出緩沖區(qū)的初值做相應(yīng)16 改變:0選擇增大頻率,1選擇減小頻率,2選擇減小幅值,3選擇增大幅值,4退出波

30、形,返回開始狀態(tài)。 調(diào)頻調(diào)幅程序代碼如下: AMPLFENC PROC NEAR ;調(diào)節(jié)幅值頻率子程序 CALL DIS ;刷新 CALL CCSCAN ;再次掃描按鍵 JNZ TRI1 ;有鍵按下則跳置tri1 JMP TRI5 ;沒按鍵按下就跳出該子程序 TRI1: CALL DIS ;刷新 CALL GETKEY1 MOV SI,OFFSET KEY MOV AL,SI CMP AL,4 ;第五個鍵就退出 JZ TRI10 JZ TRI5 CMP AL,0 ;第一個鍵減少周期 JNZ TRI2 MOV DI,3001H ;取延時初值 MOV BL,DI CMP BL,01H JE TRI

31、5 DEC BL MOV DI,BL JMP TRI5 TRI2: CMP AL,1 ;第二個鍵增加周期 JNZ TRI3 MOV DI,3001H ;取延時初值 MOV BL,DI CMP BL,05H JE TRI5 INC BL MOV DI,BL JMP TRI5 TRI3: CMP AL,2 ;第三個鍵減少幅度 17 JNZ TRI4 MOV DI,3000H MOV BL,DI ;取幅值初值 CMP BL,01H JE TRI5 DEC BL MOV DI,BL JMP TRI5 TRI4: CMP AL,3 ;第四個鍵增加幅度 JNZ TRI5 MOV DI,3000H MOV

32、BL,DI ;取幅值初值 CMP BL,05H JE TRI5 INC BL MOV DI,BL JMP TRI5 TRI10: JMP FAR PTR BEGIN0 TRI5: RET AMPLFENC ENDP 3.4波形切換及基本控制模塊 這個模塊是本次設(shè)計的主程序,它控制了波形的輸出和切換。它是根據(jù)對小鍵盤的操作來實現(xiàn)的,不同按鍵對應(yīng)的編碼轉(zhuǎn)入不同模(0:方波,1:三角波,2:鋸齒波,3:正弦波,4:退出波形)。先掃描鍵盤是否有鍵按下,若無循環(huán)等待,若有則將鍵值保存再比較,然后實現(xiàn)相應(yīng)操作。為使程序可循環(huán)使用,不至于顯示一次波形就退出,在執(zhí)行完子程序返回時,不退出系統(tǒng),而是返回到開始等

33、待輸入狀態(tài),這樣就能切換波形。 具體的實現(xiàn)代碼如下: 波形切換程序代碼如下: BEGIN0: MOV SI,3000H ; 把數(shù)碼管清0 MOV AL,00H ; 先初始化鍵值為0 MOV SI,AL 18 MOV AL,00H MOV SI+1,AL MOV AL,00H MOV SI+2,AL MOV AL,00H MOV SI+3,AL MOV SI,OFFSET KEY MOV AL,00H MOV SI,AL BEGIN1: CALL DIS ;顯示刷新 CALL CCSCAN ;再次掃描按鍵 JNZ LBEGIN0 ;有鍵按下則跳置LBEGIN0 JMP BEGIN1 ;不是按下第

34、一或二鍵就繼續(xù)等待輸LBEGIN0: CALL GETKEY1 ;第二個菜單等待輸入 CALL DIS MOV SI,OFFSET KEY MOV AL,SI CMP AL,4 ;第5個鍵退出 JZ BEGIN0 CMP AL,0 ;第1個鍵到squ(方波)函數(shù) JZ LBEGIN1 CMP AL,1 ;第2個鍵到tri(三角波)函數(shù) JZ LBEGIN2 CMP AL,2 ;第3個鍵到rec(鋸齒)函數(shù) JZ LBEGIN3 CMP AL,3 ;第4個鍵到sin(正弦)函數(shù) JZ LBEGIN4 JMP BEGIN1 ; 其他鍵則跳到繼續(xù)等待輸入 LBEGIN1: CALL SQUREW ;

35、SQUARE JMP BEGIN0 LBEGIN2: CALL TRIW ;TRIANGLE JMP BEGIN0 LBEGIN3: CALL RCTW ; RECANGLE JMP BEGIN0 LBEGIN4: CALL SINW ;SIN JMP BEGIN0 ;執(zhí)行完輸出波形之后 回到開始狀態(tài) JMP BEGIN0 3.5波形產(chǎn)生模塊3.51 方波產(chǎn)生 方波的產(chǎn)生只要使DAC0832輸出一個較大值(此處用20H),并延時一段時間,再輸出一個較小值(此處用00F),延時一段相同時間,就是方波的一個周期。但因為實現(xiàn)過程中結(jié)合了數(shù)碼管的顯示以及頻率幅值的調(diào)節(jié)所以并不那么簡單。先將幅值和頻率的

36、初值放入暫存緩沖區(qū),使數(shù)碼管顯示,掃描鍵盤,無鍵按下則繼續(xù),有鍵按下則先判斷是否為0到3,是則調(diào)節(jié)頻率幅值,是4則退出波形。執(zhí)行相應(yīng)操作后刷新數(shù)碼管,將新的幅值和頻率存在TIAOFU和TIAOPIN的緩沖區(qū)內(nèi),把低電平的值乘以TIAOFU輸出,延遲時間乘以TIAOPIN,使該值持續(xù)一段時間,輸出高電平的過程與低電平相同,循環(huán)該周期就得到連續(xù)方波。 具體的實現(xiàn)代碼如下: SQUREW PROC NEAR ;方波發(fā)生子程序 MOV DI,OFFSET FENC ;初始化顯示管的值為3 MOV AL,DI MOV SI,3000H MOV SI,AL MOV DI,OFFSET AMPL MOV A

37、L,DI MOV SI,3001H MOV SI,AL SQUR1: CALL AMPLFENC;調(diào)節(jié)幅值頻率子程序 MOV SI,OFFSET KEY ;按下第五個鍵就退出 MOV AL,4 CMP SI,AL JZ SQUA CALL DIS ;刷新數(shù)碼管 20 MOV SI,3000H MOV BL,SI MOV DI,OFFSET TIAOFU MOV DI,BL MOV SI,3001H MOV AL,SI MOV SI,OFFSET TIAOPIN MOV SI,AL TRILOOP1: MOV DX,DA0832 ;輸出低電平 輸出方波形 MOV AL,00H OUT DX,AL

38、 CALL DIS ;刷新 PUSH CX PUSH AX MOV CL,TIAOPIN MOV CH,00H D11: MOV AX,00FFH D21: DEC AX PUSH AX PUSH CX CALL DIS CALL CCSCAN ;再次掃描按鍵 JNZ SQUR1 ;有鍵按下則跳置squr1, POP CX POP AX JNZ D21 LOOP D11 POP AX POP CX CALL CCSCAN ;再次掃描按鍵 JNZ SQUR1 ;有鍵按下則跳置squr1,改變幅值頻率 MOV BL,TIAOFU MOV AL,20H MUL BL 21 MOV DX,DA0832

39、 ;輸出高電平 OUT DX,AL CALL DIS ;刷新 PUSH CX PUSH AX MOV CL,TIAOPIN MOV CH,00H D12: MOV AX,00FFH D22: DEC AX PUSH AX PUSH CX CALL DIS CALL CCSCAN ;再次掃描按鍵 JNZ SQUR1 ;有鍵按下則跳置tri1 POP CX POP AX JNZ D22 LOOP D12 POP AX POP CX JZ TRILOOP1 ;沒按鍵時繼續(xù)輸出波形 SQUA: RET SQUREW ENDP 3.5.2 三角波 三角波理論上有兩段,上升和下降,上升時從最低值開始自增,直到最大值,然后再自減至最低。本設(shè)計中,因為對波形精度要求不是很高,所以采用按列表輸出的方式,即先在數(shù)據(jù)段定義了一段三角波一個周期內(nèi)的采樣值的數(shù)字量表,采樣頻率為60點/周期。數(shù)字量表中的值

溫馨提示

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

最新文檔

評論

0/150

提交評論