




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與綜合實(shí)驗(yàn)課程設(shè)計(jì)信號(hào)發(fā)生器功能程序設(shè)計(jì)專業(yè)班級(jí)學(xué)生姓名學(xué)生學(xué)號(hào)指導(dǎo)老師第一章 設(shè)計(jì)課題概述 1.1 課程設(shè)計(jì)目的本學(xué)期開設(shè)的微型計(jì)算機(jī)原理與接口技術(shù)理論課程是一門專業(yè)基礎(chǔ)課程,它的主要內(nèi)容包括微型計(jì)算機(jī)體系結(jié)構(gòu)、8086 微處理器和指令系統(tǒng)、匯編語(yǔ)言設(shè)計(jì)以及微型計(jì)算機(jī)各個(gè)組成部分介紹等內(nèi)容。要求學(xué)生對(duì)微機(jī)原理中的基本概念有較深入的了解,能夠系統(tǒng)地掌握微型計(jì)算機(jī)的結(jié)構(gòu)、8086 微處理器和指令系統(tǒng)、匯編語(yǔ)言程序設(shè)計(jì)方法、微機(jī)系統(tǒng)的接口電路設(shè)計(jì)及編程方法等,并具有綜合運(yùn)用所學(xué)知識(shí)分析問題和解決問題的能力。微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與綜合實(shí)驗(yàn)(實(shí)踐)課程設(shè)計(jì),讓學(xué)生對(duì)微機(jī)系統(tǒng)有一個(gè)較全面的理
2、解,掌握常規(guī)的芯片使用方法、掌握簡(jiǎn)單的微型計(jì)算機(jī)應(yīng)用系統(tǒng)軟硬件的設(shè)計(jì)方法,對(duì)典型數(shù)字接口電路的應(yīng)用技術(shù)有一個(gè)較深入的掌握,并對(duì)應(yīng)用系統(tǒng)進(jìn)行硬件原理和軟件編程進(jìn)行分析、設(shè)計(jì)和調(diào)試,達(dá)到基本掌握簡(jiǎn)單微型計(jì)算機(jī)應(yīng)用系統(tǒng)軟硬件的設(shè)計(jì)方法,提高項(xiàng)目開發(fā)能力的目的。課程中要求學(xué)生根據(jù)課程設(shè)計(jì)指導(dǎo)書來(lái)選擇課題,并且獨(dú)立完成課題,寫出課程設(shè)計(jì)說(shuō)明書,畫出電路原理圖,說(shuō)明工作原理,畫出電路板圖,編寫程序以及程序流程圖。針對(duì)信號(hào)發(fā)生器功能程序設(shè)計(jì)這一課題,主要涉及到硬件的連接(主要用到芯片有:8086CPU,DAC0832,8255,74LS273,74LS138,運(yùn)放等)以及數(shù)碼管,鍵盤矩陣硬件,示波器等連接原
3、理圖,程序的編寫(主要涉及到顯示波形,數(shù)碼管顯示以及通過小鍵盤來(lái)對(duì)波形進(jìn)行選擇控制)以及各個(gè)子程序或程序段的程序流程等, 通過課程設(shè)計(jì)不僅可以鍛煉學(xué)生在微機(jī)應(yīng)用方面的實(shí)際工作能力,將所學(xué)轉(zhuǎn)化為所用,更是一個(gè)鍛煉解決實(shí)際問題能力的很好機(jī)會(huì)。1.2 課程設(shè)計(jì)要求(1)、分別用C語(yǔ)言和匯編語(yǔ)言編程完成硬件接口功能設(shè)計(jì);(2)、硬件電路基于80x86微機(jī)的接口電路;(3)、程序功能要求:小鍵盤給定、數(shù)碼管(屏幕)顯示,并產(chǎn)生對(duì)應(yīng)信號(hào)波形(D/A)輸出(信號(hào)波形包括正弦波、三角波、方波、鋸齒波)、輸出信號(hào)波形幅度、頻率可調(diào)。(注意:按鍵數(shù)量應(yīng)盡量少)。· 實(shí)現(xiàn)技術(shù)指標(biāo)(1)、完全用小鍵盤控制各
4、波形間的切換和頻率和幅值的調(diào)節(jié)以及退出。(2)、實(shí)現(xiàn)正弦波、三角波、方波和鋸齒波信號(hào)的產(chǎn)生。(3)、數(shù)碼管同步顯示當(dāng)前工作波形的頻率和幅值。(4)、實(shí)現(xiàn)頻率的1到5倍可調(diào)。(5)、實(shí)現(xiàn)幅值的1到5倍可調(diào)。· 使用說(shuō)明(1)、小鍵盤第一列對(duì)應(yīng)03,第二列對(duì)應(yīng)47。(2)、開始選擇03分別對(duì)應(yīng)方波,三角波,鋸齒波,正弦波。同時(shí)數(shù)碼管會(huì)顯示當(dāng)前波形的幅值和頻率。(3)、有波形產(chǎn)生以后,再調(diào)節(jié)幅值和頻率。0對(duì)應(yīng)增大頻率,1對(duì)應(yīng)減小頻率,2對(duì)應(yīng)減小幅值,3對(duì)應(yīng)增大幅值。(4)、頻率和幅值可以實(shí)現(xiàn)1到5倍可調(diào),同時(shí)數(shù)碼管會(huì)顯示當(dāng)前波形的幅值和頻率的倍數(shù)(15)。(5)、任何時(shí)候4都對(duì)應(yīng)退出,回到
5、最開始的選擇波形狀態(tài),數(shù)碼管歸零。第二章 設(shè)計(jì)思想和實(shí)施方案2.1功能分析2.1.1波形產(chǎn)生由于要由數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)來(lái)產(chǎn)生波形,因此要由D/A轉(zhuǎn)換芯片DAC0832來(lái)完成此項(xiàng)任務(wù)。通過匯編語(yǔ)言編寫各個(gè)波形子程序,由于要顯示波形,所以每輸出一個(gè)值,都要進(jìn)行一定時(shí)間的延時(shí),掃描沒有按鍵按下后再輸出下一個(gè)值,直到形成一個(gè)周期的代碼。利用循環(huán),就可產(chǎn)生連續(xù)波形代碼,再通過8255輸出給DAC0832,將數(shù)字量轉(zhuǎn)換成模擬量輸出,即可得各種波形。具體方案在后面有分析。2.1.2波形切換波形的選擇和調(diào)節(jié)由小鍵盤控制。第一列從上到下編碼為0,1,2,3,分別對(duì)應(yīng)方波、三角波、鋸齒波、正弦波。第二列第一個(gè)
6、鍵的鍵值為4,對(duì)應(yīng)退出波形,可以重新選擇波形,實(shí)現(xiàn)波形切換。當(dāng)沒有輸出波形的時(shí)候,也就是輸出為零,選擇0到3就會(huì)進(jìn)入相應(yīng)的波形子程序。進(jìn)入波形子程序以后,每一個(gè)點(diǎn)輸出之前都會(huì)調(diào)用掃描子程序,判斷是否有鍵按下,有則跳轉(zhuǎn)到相應(yīng)的程序斷去執(zhí)行,無(wú)則繼續(xù)。由于小鍵盤掃描在程序總是存在的,因此可隨時(shí)進(jìn)行波形間的切換。2.1.3 數(shù)碼管顯示數(shù)碼管同步顯示當(dāng)前波形的幅值和頻率。硬件上由8086將數(shù)據(jù)輸出給8255,8255再將輸出送給數(shù)碼管的ADp,顯示相應(yīng)字符。軟件上定義一個(gè)緩沖區(qū)存放波形的幅值和頻率,顯示數(shù)碼管時(shí),利用緩沖區(qū)的數(shù)值查找數(shù)碼管鍵值表再輸出對(duì)應(yīng)數(shù)值。循環(huán)輸出波形時(shí)也循環(huán)輸出緩沖區(qū)內(nèi)容對(duì)應(yīng)的值
7、,就可以同步顯示波形的幅值和頻率。利用小鍵盤掃描得到的鍵值進(jìn)行判斷,對(duì)緩沖區(qū)內(nèi)的幅值頻率進(jìn)行相應(yīng)的改變,使數(shù)碼管能顯示不同的幅值和頻率。2.1.4小鍵盤控制使用實(shí)驗(yàn)箱上4×4鍵盤,可以實(shí)現(xiàn)切換波形,調(diào)頻、調(diào)幅和退出波形的控制功能。Protues內(nèi)的鍵盤矩陣掃描時(shí)輪流選通一行,然后從端口處讀取列數(shù)據(jù),如果有按鍵則讀取的數(shù)據(jù)肯定有一位為0,經(jīng)過取反后,盡有一位為1,然后再根據(jù)選取的列和讀取的行值,確定按的是哪一個(gè)鍵,然后將鍵值編碼保存在一個(gè)名為keyass的存儲(chǔ)單元里。當(dāng)有鍵按下時(shí),從keyass內(nèi)取出鍵值進(jìn)行判斷,就能轉(zhuǎn)入相應(yīng)的子程序進(jìn)行控制,并且鍵盤掃描、獲取鍵值等子程序也能夠很好的
8、嵌入在其他程序中,方便調(diào)用。2.1.5有極調(diào)頻改變波形子程序中的各個(gè)數(shù)據(jù)輸出時(shí)間,即延時(shí),就可改變整個(gè)波形的頻率。延時(shí)越短頻率越高。定義三個(gè)緩沖區(qū)來(lái)存放延時(shí),其中一個(gè)存放初始值3,一個(gè)存放當(dāng)前波形的延時(shí),還有一個(gè)作為中間暫存用。產(chǎn)生波形以后,取出延時(shí)初值存入中間暫存緩沖區(qū),再掃描鍵盤:0對(duì)應(yīng)減小延時(shí),1對(duì)應(yīng)增大延時(shí),無(wú)鍵則不改變延時(shí)。對(duì)暫存區(qū)的數(shù)值進(jìn)行相應(yīng)操作后,將最后的值存入名為tiaopin的緩沖區(qū)內(nèi)作為當(dāng)前波形的延時(shí)。2.1.6有極調(diào)幅和有級(jí)調(diào)頻類似,有極調(diào)幅也是定義三個(gè)緩沖區(qū),功能和有極調(diào)頻類似。幅值緩沖區(qū)存放的是輸出點(diǎn)的值的放大倍數(shù),調(diào)節(jié)放大倍數(shù)也就使幅值改變了。產(chǎn)生波形以后,取出倍
9、數(shù)初值存入中間暫存緩沖區(qū),再掃描鍵盤:2對(duì)應(yīng)減小倍數(shù),3對(duì)應(yīng)增大倍數(shù),無(wú)鍵則不改變倍數(shù)。對(duì)暫存區(qū)的數(shù)值進(jìn)行相應(yīng)操作后,將最后的值存入名為tiaofu的緩沖區(qū)內(nèi)作為當(dāng)前波形的幅值放大倍數(shù)。2.1.6開始結(jié)束用小鍵盤第二列第一個(gè)也就是4來(lái)結(jié)束波形,無(wú)論在什么時(shí)候只在小鍵盤掃描到了4鍵,它就會(huì)無(wú)條件跳出程序,返回起始狀態(tài),等待選擇波形,同時(shí)數(shù)碼管顯示零。22所用芯片功能簡(jiǎn)介2.2.1 8086功能簡(jiǎn)介8086 CPU是由總線接口部件BIU和執(zhí)行部件EU這兩大部分構(gòu)成。總線接口部件BIU是8086 CPU在存儲(chǔ)器和I/O設(shè)備之間的接口部件,負(fù)責(zé)對(duì)全部引腳的操作,即8086對(duì)存儲(chǔ)器和I/O設(shè)備的所有操作
10、都是由BIU完成的。所有對(duì)外部總線的操作都必須有正確的地址和適當(dāng)?shù)目刂菩盘?hào),BIU中的各部件主要是圍繞這個(gè)目標(biāo)設(shè)計(jì)的。它提供了16位雙向數(shù)據(jù)總線、20位地址總線和若干條控制總線。 其具體任務(wù)是:負(fù)責(zé)從內(nèi)存單元中預(yù)取指令,并將它們送到指令隊(duì)列緩沖器暫存。CPU執(zhí)行指令時(shí),總線接口單元要配合執(zhí)行單元,從指定的內(nèi)存單元或I/O端口中取出數(shù)據(jù)傳送給執(zhí)行單元,或者把執(zhí)行單元的處理結(jié)果傳送到指定的內(nèi)存單元或I/O端口中。執(zhí)行單元EU中包含1個(gè)16位的運(yùn)算器ALU、8個(gè)16位的寄存器、1個(gè)16位標(biāo)志寄存器FR、1個(gè)運(yùn)算暫存器和執(zhí)行單元的控制電路。這個(gè)單元進(jìn)行所有指令的解釋和執(zhí)行,同時(shí)管理上述有關(guān)的寄存器。E
11、U對(duì)指令的執(zhí)行是從取指令操作碼開始的,它從總線接口單元的指令隊(duì)列緩沖器中每次取一個(gè)字節(jié)。如果指令隊(duì)列緩沖器中是空的,那么EU就要等待BIU通過外部總線從存儲(chǔ)器中取得指令并送到EU,通過譯碼電路分析,發(fā)出相應(yīng)控制命令,控制ALU數(shù)據(jù)總線中數(shù)據(jù)的流向。管腳圖如下:2.2.2 8255A功能簡(jiǎn)介8255A具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強(qiáng),使用靈活,通過它CPU可直接與外設(shè)相連。8255A在使用前要寫入一個(gè)方式控制字,選擇A、B、C三個(gè)端口各自的工作方式,共有三種。方式0 :基本的輸入輸出方式
12、,即無(wú)須聯(lián)絡(luò)就可以直接進(jìn)行的 I/O方式。其中A、B、C口的高四位或低四位可分別設(shè)置成輸入或輸出;方式1 :選通I/O,此時(shí)接口和外圍設(shè)備需聯(lián)絡(luò)信號(hào)進(jìn)行協(xié)調(diào),只有A口和B口可以工作在方式1,此時(shí)C口的某些線被規(guī)定為A口或B口與外圍設(shè)備的聯(lián)絡(luò)信號(hào),余下的線只有基本的I/O功能,即只工作在方式0;方式2: 雙向I/O方式,只有A口可以工作在這種方式,該I/O線即可輸入又可輸出,此時(shí)C口有5條線被規(guī)定為A口和外圍設(shè)備的雙向聯(lián)絡(luò)線,C口剩下的三條線可作為B口方式1的聯(lián)絡(luò)線,也可以和B口一起方式0的I/O線。管腳圖如下:2.2.3 DAC0832功能簡(jiǎn)介DAC0832是采用CMOS工藝制成的單片電流輸出
13、型8位數(shù) / 模轉(zhuǎn)換器。它由倒T型R-2R電阻網(wǎng)絡(luò)、模擬開關(guān)、運(yùn)算放大器和參考電壓VREF四大部分組成。電路有極好的溫度跟隨性,使用了COMS電流開關(guān)和控制邏輯而獲得低功耗、低輸出的泄漏電流誤差。集成電路內(nèi)有兩級(jí)輸入寄存器,使DAC0832芯片具備雙緩沖、單緩沖和直通三種輸入方式,以便適于各種電路的需要. DAC0832有8個(gè)輸入端(其中每個(gè)輸入端是8位二進(jìn)制數(shù)的一位),有一個(gè)模擬輸出端。輸入可有2的8次方,即256個(gè)不同的二進(jìn)制組態(tài),輸出為256個(gè)電壓之一,即輸出電壓不是整個(gè)電壓范圍內(nèi)任意值,而只能是256個(gè)可能值。D/A轉(zhuǎn)換結(jié)果采用電流形式輸出。若需要相應(yīng)的模擬電壓信號(hào),可通過一個(gè)高輸入阻
14、抗的線性運(yùn)算放大器實(shí)現(xiàn)。運(yùn)放的反饋電阻可通過RFB端引用片內(nèi)固有電阻,也可外接。DAC0832邏輯輸入滿足TTL電平,可直接與TTL電路或微機(jī)電路連接。DAC0832的管腳圖如下:2.2.4 74LS273功能簡(jiǎn)介地址鎖存器就是一個(gè)暫存器,它根據(jù)控制信號(hào)的狀態(tài),將總線上地址代碼暫存起來(lái)。8086/8088數(shù)據(jù)和地址總線采用分時(shí)復(fù)用操作方法,即用同一總線既傳輸數(shù)據(jù)又傳輸?shù)刂?。?dāng)微處理器與存儲(chǔ)器交換信號(hào)時(shí),首先由CPU發(fā)出存儲(chǔ)器地址,同時(shí)發(fā)出允許鎖存信號(hào)ALE給鎖存器,當(dāng)鎖存器接到該信號(hào)后將地址/數(shù)據(jù)總線上的地址鎖存在總線上,隨后才能傳輸數(shù)據(jù)。地址鎖存器74LS273是帶清除端的八D觸發(fā)器,只有清
15、除端為高電平時(shí)才具有鎖存功能,鎖存控制端為11腳CLK,在上升沿鎖存。8086的ALE端輸出的鎖存控制信號(hào)必須經(jīng)反相器后才能連到74LS273的CLK端,以滿足CLK在上升沿鎖存的要求。74LS273的引腳1D8D為數(shù)據(jù)輸入端,1Q8Q為數(shù)據(jù)輸出端,WR:主清除端,低電平觸發(fā),即當(dāng)為低電平時(shí),芯片被清除,輸出全為0。CP(CLK):觸發(fā)端,上升沿觸發(fā),即當(dāng)CP從低到高電平時(shí),D0D7的數(shù)據(jù)通過芯片,為0時(shí)將數(shù)據(jù)鎖存,D0D7的數(shù)據(jù)不變。由于8086有20位物理地址,所以需要用3片74LS273級(jí)聯(lián)。74LS273的管腳圖如右:2.3 實(shí)施方案2.3.1系統(tǒng)總體設(shè)計(jì)方案該設(shè)計(jì)包括硬件設(shè)計(jì)和軟件設(shè)
16、計(jì)兩部分。1.硬件上要求以8086CPU為核心進(jìn)行電路設(shè)計(jì)。完全用小鍵盤對(duì)波形進(jìn)行控制。小鍵盤作為產(chǎn)生波形、波形切換、調(diào)節(jié)頻率,調(diào)節(jié)幅值、退出波形的控制端口。8255A芯片完成對(duì)小鍵盤掃描,獲取鍵值編碼以及輸出到數(shù)碼管。通過DAC0832將數(shù)字量轉(zhuǎn)換成模擬量輸出,再由轉(zhuǎn)換電路將電流輸出轉(zhuǎn)換為電壓輸出產(chǎn)生各種波形,通過虛擬示波器顯示出波形。由于8255A的A,B,C端口都已使用,所以采用鍵盤控制進(jìn)行幅值和頻率的有極調(diào)節(jié)。2.軟件方面要設(shè)計(jì)方波,三角波,鋸齒波,正弦波何時(shí)產(chǎn)生,如何產(chǎn)生,何時(shí)退出,并且還要設(shè)計(jì)如何通過對(duì)按鍵的判斷,對(duì)頻率和幅值進(jìn)行調(diào)節(jié)。方波比較簡(jiǎn)單,先掃描鍵盤,無(wú)鍵按下時(shí)輸出零,保
17、持一個(gè)延時(shí),再掃描鍵盤,無(wú)鍵按下時(shí)輸出20H的倍數(shù),該倍數(shù)就是我定義的幅值,再延時(shí),循環(huán)該周期就可得到方波。如果有鍵按下就會(huì)轉(zhuǎn)入相應(yīng)子程序。三角波分為兩段,因它的上升斜坡和下降斜坡都是線性關(guān)系,所以只要由數(shù)字量的增減來(lái)控制就可以了。產(chǎn)生上升斜坡時(shí)讓輸出值從零開始逐漸遞增,其上升的最大值是30乘以放大倍數(shù),相反,產(chǎn)生下降斜坡時(shí),讓輸出值從最大值逐漸遞減到零。為簡(jiǎn)單起見 ,這里采用的是查表法,在數(shù)據(jù)段定義了三角波函數(shù)表,規(guī)律如上。其幅值由放大倍數(shù)控制,頻率是由輸出點(diǎn)之間的延時(shí)來(lái)控制。 鋸齒波截取三角波的上升斜坡部分,到達(dá)最大值后就跳回最低值0,方法與三角波相同,也采用查表法。先定義了鋸齒波的函數(shù)表
18、,輸出時(shí)只要按著函數(shù)表一個(gè)一個(gè)往下輸出,當(dāng)顯示到最大值即一個(gè)周期內(nèi)的最后一個(gè)值再將指針指向表的首地址就開始了新的周期。其幅值由放大倍數(shù)控制,頻率是由輸出點(diǎn)之間的延時(shí)來(lái)控制。正弦波也是用的查表法。該方法的優(yōu)點(diǎn)是速度快,但在精度高的情況下要求的存儲(chǔ)器容量也要增大,所以此種方法應(yīng)用在對(duì)精度要求不高的場(chǎng)合。本程序中制造了一張正弦數(shù)字量表,即查函數(shù)表得到的值轉(zhuǎn)換成十進(jìn)制數(shù)填表。一個(gè)周期內(nèi),采樣點(diǎn)越多,精度越高,本實(shí)驗(yàn)中采樣點(diǎn)為40點(diǎn)/周期。正弦數(shù)字量表中的值為參考值,對(duì)于不同幅值的正弦波可以通過把表中的每個(gè)值乘以相同的倍數(shù)得到,其頻率由改變輸出點(diǎn)之間的延時(shí)來(lái)實(shí)現(xiàn)。 頻率和幅值的調(diào)節(jié)由每個(gè)點(diǎn)的延時(shí)和幅值的
19、放大倍數(shù)決定。在各個(gè)波形輸出之前,先讀取頻率和幅值的初值,若要增加(減?。╊l率,則使延時(shí)減(加)1;若要增大(減?。┓?,則使原幅值基礎(chǔ)值得放大倍數(shù)加(減)1。然后再將改變后的幅值頻率送給原波形進(jìn)行輸出,同時(shí),幅值和頻率的值作為偏移量查找數(shù)碼管顯示表,然后送給對(duì)應(yīng)的數(shù)碼管顯示。2.3.2系統(tǒng)設(shè)計(jì)方框圖第三章 典型程序模塊及編程技巧分析3.1鍵盤掃描模塊小鍵盤工作原理:(1)初始化8255的工作方式:A,B口作為輸出,C口低四位作為輸入。矩陣的X1X4接到輸出端口PA0PA3上,用程序控制4條行線的輸出。4條列線Y1Y4連接到輸入端口C的PC0PC3。用讀指令讀取C口狀態(tài)時(shí),可讀取鍵盤的列號(hào)。(
20、2)在無(wú)鍵按下的時(shí)候,由于接到+5V上的上拉電阻的作用,列線被置成高電平。壓下某一個(gè)鍵所在的行線和列線接通。這時(shí),如果向被壓下的鍵所在的行線上輸出一個(gè)低電平信號(hào),則對(duì)應(yīng)的列線也呈現(xiàn)低電平。當(dāng)從C口讀取列線信號(hào)時(shí),便能檢測(cè)到該列線上的低電平。(3)掃描鍵盤時(shí),A口輸出全0,讀C口,取低四位再取反,若為0則無(wú)鍵輸入,若不為零則轉(zhuǎn)獲取鍵值子程序。獲取鍵值時(shí),對(duì)X1到X4輪流選中,即輪流輸出0。先把第一行賦0,讀C口檢測(cè)是不是第一行,不是再繼續(xù)第二行,沒有的話總共循環(huán)4次跳出循環(huán),這樣根據(jù)選中的行和讀入的列狀態(tài)中低電平的位置,便能確定哪個(gè)鍵被按下了。檢測(cè)到按鍵后,對(duì)壓下的鍵進(jìn)行編碼,將該鍵的行列信號(hào)轉(zhuǎn)
21、化成16進(jìn)制碼,將鍵值存入緩沖區(qū),以便以后利用進(jìn)行判斷比較。接著繼續(xù)掃描按鍵,等待按鍵釋放。具體的實(shí)現(xiàn)如下: CCSCAN掃描按鍵是否有鍵按下:CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序 MOV AL,00H MOV DX,MY8255_A ;將4列全選通,X1X4置0 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)入到按鍵處理子程序模
22、塊執(zhí)行, 如果沒有,則返回主程序循環(huán)。具體的實(shí)現(xiàn)代碼如下:GETKEY1 PROC NEAR ;獲取鍵值子程序 CALL DIS ;顯示刷新 CALL DALLY ;延時(shí) CALL DALLY ;延時(shí) CALL CLEAR ;清屏 CALL CCSCAN ;再次掃描按鍵 JNZ GETKEY2 ;有鍵按下則跳置GETKEY2 JMP BEGIN1 ;否則跳回開始繼續(xù)循環(huán) GETKEY2: MOV CH,0FEH MOV CL,00H ;設(shè)置當(dāng)前檢測(cè)的是第幾列 COLUM: MOV AL,CH ;選取一列,將X1X4中一個(gè)置0 MOV DX,MY8255_A OUT DX,AL MOV DX,M
23、Y8255_C ;讀Y1Y4,用于判斷哪一行按鍵閉合 IN AL,DX L1: TEST AL,01H ;是否為第1行 JNZ L2 ;不是則繼續(xù)判斷 MOV AL,00H ;設(shè)置第1行第1列的對(duì)應(yīng)的鍵值 JMP KCODE L2: TEST AL,02H ;是否為第2行 JNZ L3 ;不是則繼續(xù)判斷 MOV AL,04H ;設(shè)置第2行第1列的對(duì)應(yīng)的鍵值 JMP KCODE L3: TEST AL,04H ;是否為第3行 JNZ L4 ;不是則繼續(xù)判斷 MOV AL,08H ;設(shè)置第3行第1列的對(duì)應(yīng)的鍵值 JMP KCODE L4: TEST AL,08H ;是否為第4行 JNZ NEXT
24、;不是則繼續(xù)判斷 MOV AL,0CH ;設(shè)置第4行第1列的對(duì)應(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 NEXT: INC CL ;當(dāng)前檢測(cè)的列數(shù)遞增 MOV AL,CH TEST AL,08H ;檢測(cè)是否掃描到第4列 JZ KERR ;是則跳回到開始處 ROL AL,1 ;沒檢測(cè)到第4列則準(zhǔn)備檢測(cè)下一列 MOV CH,
25、AL JMP COLUM KERR: RET GETKEY1 ENDPPUTBUF PROC NEAR ;保存鍵值子程序 MOV DI,OFFSET KEY MOV DI,AL CMP DI,2FFFH JNZ GOBACK MOV DI,3004H GOBACK: RET PUTBUF ENDP3.2數(shù)碼管顯示模塊4個(gè)數(shù)碼管的X端為選通端,將小鍵盤的X1X4對(duì)應(yīng)接到數(shù)碼管,這樣掃描小鍵盤的時(shí)候,也就選中了數(shù)碼管,當(dāng)調(diào)用getkey1獲取鍵值子程序的時(shí)候,數(shù)碼管輪流選中,也就可以控制哪個(gè)數(shù)碼管顯示什么內(nèi)容。通過對(duì)8255寫入數(shù)據(jù),由B口輸出給數(shù)碼管的ADp,當(dāng)沒有波形輸入時(shí),數(shù)碼管顯示0數(shù)碼管
26、;定義兩個(gè)緩沖區(qū)存放幅值和頻率,有波形輸出時(shí),同步顯示該波形的幅值和頻率。先在數(shù)據(jù)段定義一個(gè)緩沖區(qū)存放數(shù)碼管顯示0F的段位值表:DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71H因?yàn)橐恢憋@示數(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 AGAIN:
27、PUSH DX MOV DX,MY8255_A OUT DX,AL ;設(shè)置X1X4,選通一個(gè)數(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 ;取下一個(gè)鍵值 POP DX MOV AL,DL TEST AL,01H ;判斷是否顯示完? JZ OUT1 ;顯示完,返回 ROR AL,1 MOV DL,AL JMP AGAIN ;未顯示
28、完,跳回繼續(xù) OUT1: POP AX RET DIS ENDP3.3有級(jí)調(diào)頻調(diào)幅判斷及控制模塊改變波形產(chǎn)生子程序中的各個(gè)數(shù)據(jù)輸出時(shí)間,及延時(shí),就可改變整個(gè)波形的頻率。改變波形產(chǎn)生子程序中的每次輸出數(shù)值的放大倍數(shù),就可以改變整個(gè)波形的幅值。而實(shí)現(xiàn)有級(jí)變化的初值是在數(shù)據(jù)段預(yù)先定義的數(shù)據(jù)表。在選擇波形以后,才能調(diào)節(jié)頻率和幅值,頻率和幅值的調(diào)節(jié)由小鍵盤控制。在3000H和3001H的緩沖區(qū)內(nèi)存放了幅值和頻率的初值3,在每個(gè)波形輸出之前先掃描鍵盤,鍵值存在KEY里,對(duì)KEY值進(jìn)行判斷后,取出緩沖區(qū)的初值做相應(yīng)改變:0選擇增大頻率,1選擇減小頻率,2選擇減小幅值,3選擇增大幅值,4退出波形,返回開始狀態(tài)
29、。具體的實(shí)現(xiàn)代碼如下: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 ;第五個(gè)鍵就退出 JZ TRI10 JZ TRI5 CMP AL,0 ;第一個(gè)鍵減少周期 JNZ TRI2 MOV DI,3001H ;取延時(shí)初值 MOV BL,DI CMP BL,01H JE TRI5 DEC BL MO
30、V DI,BL JMP TRI5 TRI2: CMP AL,1 ;第二個(gè)鍵增加周期 JNZ TRI3 MOV DI,3001H ;取延時(shí)初值 MOV BL,DI CMP BL,05H JE TRI5 INC BL MOV DI,BL JMP TRI5 TRI3: CMP AL,2 ;第三個(gè)鍵減少幅度 JNZ TRI4 MOV DI,3000H MOV BL,DI ;取幅值初值 CMP BL,01H JE TRI5 DEC BL MOV DI,BL JMP TRI5 TRI4: CMP AL,3 ;第四個(gè)鍵增加幅度 JNZ TRI5 MOV DI,3000H MOV BL,DI ;取幅值初值 C
31、MP BL,05H JE TRI5 INC BL MOV DI,BL JMP TRI5 TRI10: JMP FAR PTR BEGIN0 TRI5: RET AMPLFENC ENDP3.4 波形切換及基本控制模塊這個(gè)模塊是本次設(shè)計(jì)的主程序,它控制了波形的輸出和切換。它是根據(jù)對(duì)小鍵盤的操作來(lái)實(shí)現(xiàn)的,不同按鍵對(duì)應(yīng)的編碼轉(zhuǎn)入不同模塊(0:方波,1:三角波,2:鋸齒波,3:正弦波,4:退出波形)。先掃描鍵盤是否有鍵按下,若無(wú)循環(huán)等待,若有則將鍵值保存再比較,然后實(shí)現(xiàn)相應(yīng)操作。為使程序可循環(huán)使用,不至于顯示一次波形就退出,在執(zhí)行完子程序返回時(shí),不退出系統(tǒng),而是返回到開始等待輸入狀態(tài),這樣就能切換波形
32、。具體的實(shí)現(xiàn)代碼如下:BEGIN0: MOV SI,3000H ; 把數(shù)碼管清0 MOV AL,00H ; 先初始化鍵值為0 MOV SI,AL 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,ALBEGIN1: CALL DIS ;顯示刷新 CALL CCSCAN ;再次掃描按鍵 JNZ LBEGIN0 ;有鍵按下則跳置LBEGIN0 JMP BEGIN1 ;不是按下第一或二鍵就繼續(xù)等待輸入 LBEGIN0: CALL GETKEY
33、1 ;第二個(gè)菜單等待輸入 CALL DIS MOV SI,OFFSET KEY MOV AL,SI CMP AL,4 ;第5個(gè)鍵退出 JZ BEGIN0 CMP AL,0 ;第1個(gè)鍵到squ(方波)函數(shù) JZ LBEGIN1 CMP AL,1 ;第2個(gè)鍵到tri(三角波)函數(shù) JZ LBEGIN2 CMP AL,2 ;第3個(gè)鍵到rec(鋸齒)函數(shù) JZ LBEGIN3 CMP AL,3 ;第4個(gè)鍵到sin(正弦)函數(shù) JZ LBEGIN4 JMP BEGIN1 ; 其他鍵則跳到繼續(xù)等待輸入 LBEGIN1: CALL SQUREW ;SQUARE JMP BEGIN0 LBEGIN2: CAL
34、L TRIW ;TRIANGLE JMP BEGIN0 LBEGIN3: CALL RCTW ; RECANGLE JMP BEGIN0 LBEGIN4: CALL SINW ;SIN JMP BEGIN0 ;執(zhí)行完輸出波形之后 回到開始狀態(tài) JMP BEGIN03.5波形產(chǎn)生模塊3.5.1方波方波的產(chǎn)生只要使DAC0832輸出一個(gè)較大值(此處用20H),并延時(shí)一段時(shí)間,再輸出一個(gè)較小值(此處用00F),延時(shí)一段相同時(shí)間,就是方波的一個(gè)周期。但因?yàn)閷?shí)現(xiàn)過程中結(jié)合了數(shù)碼管的顯示以及頻率幅值的調(diào)節(jié)所以并不那么簡(jiǎn)單。先將幅值和頻率的初值放入暫存緩沖區(qū),使數(shù)碼管顯示,掃描鍵盤,無(wú)鍵按下則繼續(xù),有鍵按下
35、則先判斷是否為0到3,是則調(diào)節(jié)頻率幅值,是4則退出波形。執(zhí)行相應(yīng)操作后刷新數(shù)碼管,將新的幅值和頻率存在TIAOFU和TIAOPIN的緩沖區(qū)內(nèi),把低電平的值乘以TIAOFU輸出,延遲時(shí)間乘以TIAOPIN,使該值持續(xù)一段時(shí)間,輸出高電平的過程與低電平相同,循環(huán)該周期就得到連續(xù)方波。具體的實(shí)現(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 AL,DI MOV SI,3001H MOV SI,AL SQUR1: C
36、ALL AMPLFENC ;調(diào)節(jié)幅值頻率子程序,有鍵按下是調(diào)節(jié)幅值頻率 MOV SI,OFFSET KEY ;按下第五個(gè)鍵就退出 MOV AL,4 CMP SI,AL JZ SQUA CALL DIS ;刷新數(shù)碼管 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 CALL DIS ;刷新 PUSH CX PUSH
37、 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 MOV DX,DA0832 ;輸出高電平 OUT DX,AL CALL DIS ;刷
38、新 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 ;沒按鍵時(shí)繼續(xù)輸出波形 SQUA: RET SQUREW ENDP3.5.2三角波三角波理論上有兩段,上升和下降,上升時(shí)從最低值開始自增,直到最大值,然后再自減至最低。本設(shè)計(jì)中,因?yàn)閷?duì)波形精度要求不是很高,所以采用按列表輸出的方式,即先在數(shù)據(jù)段定義了一段三角波一個(gè)周期內(nèi)的采樣值的數(shù)字量表,采樣頻率為60點(diǎn)/周期。數(shù)字量表中的值為參考值,輸出三角波時(shí)通過把表中的每個(gè)值乘以相同的倍數(shù),該倍數(shù)為我們?cè)O(shè)定的幅值。波形輸出方式都相同,這里簡(jiǎn)要說(shuō)明:先將幅值和頻率的初值放入暫存緩沖區(qū),使數(shù)碼管顯示,掃描鍵盤,執(zhí)行相應(yīng)操作后刷新數(shù)碼管,將新的幅值和頻率存
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度美容院轉(zhuǎn)讓合同附帶美容院供應(yīng)鏈優(yōu)化與成本控制
- 二零二五年度蔬菜配送中心與餐飲企業(yè)合作協(xié)議
- 2025年度橋梁施工環(huán)境保護(hù)與生態(tài)修復(fù)合同
- 二零二五年度鏈家房屋買賣定金協(xié)議模板及簽訂指南
- 二零二五年度銀行賬戶監(jiān)管協(xié)議:金融機(jī)構(gòu)賬戶監(jiān)管與反洗錢合作協(xié)議
- 二零二五年度家政服務(wù)用工協(xié)議書(家庭廚師及護(hù)理)
- 二零二五年度果園農(nóng)產(chǎn)品品牌授權(quán)轉(zhuǎn)讓協(xié)議
- 2025年度項(xiàng)目經(jīng)理內(nèi)部承包責(zé)任制與合同履行進(jìn)度合同
- 二零二五年度綠色建筑抵押貸款合作協(xié)議范本
- 2025年度新能源項(xiàng)目股權(quán)合作協(xié)議
- 民法典解讀之婚姻家庭編
- 2025年菏澤醫(yī)學(xué)??茖W(xué)校高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 2025年漯河職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- Unit 2 What time is it?-A Let's spell(課件)-2024-2025學(xué)年人教PEP版英語(yǔ)四年級(jí)下冊(cè)
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)下冊(cè)第二單元百分?jǐn)?shù)(二)(含答案)
- 創(chuàng)新教案:《歌唱二小放牛郎》在2025年音樂教學(xué)中的應(yīng)用
- 祖沖之的平生與貢獻(xiàn)
- 2025年版護(hù)理法律法規(guī)
- DB3305T 261-2023 湖州湖羊種羊等級(jí)評(píng)定
- 房屋市政工程生產(chǎn)安全重大事故隱患排查表(2024版)
- 《心力衰竭護(hù)理》課件
評(píng)論
0/150
提交評(píng)論