




已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
北 華 航 天 工 業(yè) 學(xué) 院課程設(shè)計(jì)報(bào)告(論文) 設(shè)計(jì)名稱: 單片機(jī)技術(shù)課程設(shè)計(jì) 設(shè)計(jì)地點(diǎn): 單片機(jī)實(shí)驗(yàn)室(教7209) 班 級(jí): B09221 姓 名: 學(xué) 號(hào): 指導(dǎo)教 師: 完 成 時(shí) 間: 2012 年 4 月 18 日北華航天工業(yè)學(xué)院電子工程系課程設(shè)計(jì)任務(wù)書姓 名:學(xué)號(hào):班 級(jí):指導(dǎo)教師:職 稱:教授課程設(shè)計(jì)題目:正弦信號(hào)發(fā)生器的設(shè)計(jì)主要課程支撐:模擬電子技術(shù)、數(shù)字電子技術(shù)、微機(jī)原理與接口技術(shù)設(shè)計(jì)目標(biāo):1 熟練掌握單片機(jī)匯編指令的使用方法2 熟練掌握行列式鍵盤、LED顯示器的控制與管理方法3 掌握A/D、/D/A的應(yīng)用4掌握單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)方法、軟硬件調(diào)試方法5熟練使用單片機(jī)仿真軟件基本要求:1完成單片機(jī)綜合設(shè)計(jì)(每人選做一個(gè)題目)2編程實(shí)現(xiàn)題目要求的基本功能,程序運(yùn)行通過。3撰寫課程設(shè)計(jì)報(bào)告(設(shè)計(jì)思路、實(shí)現(xiàn)方法、硬件資源分配、程序流程圖、運(yùn)行結(jié)果分析等),要求用A4紙打印設(shè)計(jì)報(bào)告。所需儀器設(shè)備:偉福Lab6000綜合實(shí)驗(yàn)仿真系統(tǒng)一臺(tái)套微機(jī)一臺(tái)成果驗(yàn)收形式:程序上機(jī)運(yùn)行、現(xiàn)場(chǎng)回答問題參考文獻(xiàn):Lab6000綜合實(shí)驗(yàn)仿真系統(tǒng)說明書時(shí)間安排(1) 8周:完成選題、方案設(shè)計(jì)(2) 第1-4次上機(jī)調(diào)試程序(3) 第5次上機(jī)課題驗(yàn)收(4) 第10周上交實(shí)踐報(bào)告指導(dǎo)教師: 教研室主任: 年 月 日 一、概述 1、設(shè)計(jì)目的 了解單片機(jī)系統(tǒng)中實(shí)現(xiàn)D/A(數(shù)字、模擬)轉(zhuǎn)換的原理及方法 詳細(xì)了解D/A轉(zhuǎn)換芯片0832的性能及編程方法 了解單片機(jī)系統(tǒng)中擴(kuò)展D/A轉(zhuǎn)換的基本原理,了解單片機(jī)如何盡行數(shù)據(jù)采集 掌握DAC0832,AT89C51輸入/輸出接口電路設(shè)計(jì)方法 掌握DAC0832轉(zhuǎn)換實(shí)現(xiàn)的程序設(shè)計(jì)方法 掌握WAVE 軟件的操作,掌握單片機(jī)程序設(shè)計(jì)的流程2、設(shè)計(jì)要求 正弦波頻率范圍:1HZ100HZ,100HZ1000HZ 頻率步進(jìn)值:1HZ100HZ檔步進(jìn)是10HZ,100HZ1000HZ檔步進(jìn)是100HZ 輸出電壓:15V幅值可調(diào)(1V步進(jìn)) 具有顯示輸出波形頻率和幅度的功能 顯示位數(shù):6位 鍵盤設(shè)置頻率值二、方案設(shè)計(jì)與論證(設(shè)計(jì)思路、題目分析、解決方法)1編程語(yǔ)言的選擇進(jìn)行單片機(jī)開發(fā),既可以用C語(yǔ)言,也可以用匯編語(yǔ)言。在本設(shè)計(jì)中選擇合適的語(yǔ)言進(jìn)行設(shè)計(jì)很重要。匯編語(yǔ)言是一種用文字助記符來表示機(jī)器指令的符號(hào)語(yǔ)言。其主要優(yōu)點(diǎn)是占用資源少,執(zhí)行效率高。但是不同的CPU,其匯編語(yǔ)言可能有所差異,所以不易移植。C語(yǔ)言是一種結(jié)構(gòu)化的高級(jí)語(yǔ)言。其優(yōu)點(diǎn)是可讀性好,移植容易,是一種普遍使用的計(jì)算機(jī)語(yǔ)言,缺點(diǎn)是占用資源較多,沒有匯編語(yǔ)言執(zhí)行效率高。對(duì)于目前普遍使用RISC架構(gòu)的8位單片機(jī)來說,其內(nèi)部ROM、 RAM、STACK等資源有限,如果使用C語(yǔ)言編寫,一條C語(yǔ)言編譯后就會(huì)變成很多機(jī)器碼,很容易出現(xiàn)ROM空間不夠、堆棧溢出等問題。而匯編語(yǔ)言,一條指令就對(duì)應(yīng)一條機(jī)器碼,每一步的執(zhí)行動(dòng)作都很清楚,并且程序大小和堆棧條用情況都容易控制,調(diào)試起來也比較方便。就正弦波發(fā)生器設(shè)計(jì)而言,對(duì)程序指令執(zhí)行的精度、時(shí)間要求比較嚴(yán)格,因此本次設(shè)計(jì)采用匯編語(yǔ)言進(jìn)行編程較為合理。2如何利用單片機(jī)進(jìn)行控制輸出-5V+5V電壓-5V+5V為模擬量輸出,單片機(jī)本身并不具備此功能,單片機(jī)只能進(jìn)行數(shù)字量輸出,因此需要用到DAC(數(shù)模轉(zhuǎn)換)芯片DAC0832簡(jiǎn)要介紹DAC轉(zhuǎn)換器是一種將數(shù)字量轉(zhuǎn)換成模擬量的器件,其特點(diǎn)是接受、保持和轉(zhuǎn)換的是數(shù)字信息,不存在溫度和事件的漂移問題,因此電路的抗干擾性能較好。DAC0832是8位分辨率的D/A轉(zhuǎn)換集成芯片,它具有價(jià)格低廉、接口簡(jiǎn)單及轉(zhuǎn)換控制容易等特點(diǎn)。它由8位輸入鎖存器、8位DAC寄存器、8位DIA轉(zhuǎn)換電路及轉(zhuǎn)換控制電路組成,能和CPU數(shù)據(jù)總線直接連接,屬中速轉(zhuǎn)換器,大約在1uS內(nèi)將一個(gè)數(shù)字量轉(zhuǎn)換成模擬量輸出。DAC0832的結(jié)構(gòu)D0D7: 8位數(shù)據(jù)輸入線,TTL電平,有效時(shí)間應(yīng)大于90nS(否則鎖存器的數(shù)據(jù)會(huì)出錯(cuò));ILE:數(shù)據(jù)鎖存允許控制信號(hào)輸入線,高電平有效;CS:片選信號(hào)輸入線(選通數(shù)據(jù)鎖存器),低電平有效;WR1:數(shù)據(jù)鎖存器寫選通輸入線,負(fù)脈沖(賣寬應(yīng)大于500nS)有效。由ILE、CS、WR1的邏輯組合產(chǎn)生LE1,當(dāng)LE1為高電平時(shí),數(shù)據(jù)鎖存器狀態(tài)隨輸入數(shù)據(jù)線變換,LE1的負(fù)跳變時(shí)將輸入數(shù)據(jù)鎖存;XFER: 數(shù)據(jù)傳輸控制信號(hào)輸入線,低電平有效,負(fù)脈沖(脈寬應(yīng)大于500nS)有效;WR2:DAC寄存器選通輸入線,負(fù)脈沖(脈寬應(yīng)大于500nS)有效。由WR1、XFER的邏輯組合產(chǎn)生LE2,當(dāng)LE2為高電平時(shí),DAC寄存器的輸出隨寄存器的輸入而變化,LE2的負(fù)跳變時(shí)將數(shù)據(jù)鎖存器的內(nèi)容打入DAC寄存器并開始D/A轉(zhuǎn)換。IOUT1:電流輸出端1,其值隨DAC寄存器的內(nèi)容線性變化;IOUT2:電流輸出段2,其值與IOUT1值之和為一常數(shù);Rfb:反饋信號(hào)輸入線,改變Rfb端外接電阻值可調(diào)整轉(zhuǎn)換滿量程度;Vcc:電源輸入端,Vcc的范圍為+5V+5V;VREF:基準(zhǔn)電壓輸入線,VREF的范圍為-10V+10V;AGND:模擬信號(hào)地;DGND:數(shù)字信號(hào)地; 0832的引腳圖和內(nèi)部結(jié)構(gòu)圖如圖1、圖2所示圖1 DAC0832引腳圖圖2 DAC0832內(nèi)部結(jié)構(gòu)圖DAC0832的三種工作方式1、直通方式直通方式是使DAC0832內(nèi)部的兩個(gè)寄存器(輸入寄存器和DAC寄存器)處于不鎖存狀態(tài),數(shù)據(jù)一旦到達(dá)輸入端DI7DI0,就直接送入D/A轉(zhuǎn)換器,被轉(zhuǎn)換成模擬量。當(dāng)ILE為高電平,CS和WR1、WR2和XFER端都接數(shù)字帝,這時(shí)鎖存信號(hào)LE1、LE2均為高電平,輸入寄存器和DAC寄存器均處于不鎖存狀態(tài),即直通方式。2、單緩沖方式單緩沖方式就是使兩個(gè)寄存器中的一個(gè)處于緩沖方式,另一個(gè)處于鎖存方式,數(shù)據(jù)只同故宮一級(jí)緩沖器送入D/A轉(zhuǎn)換器。通的做法是將CS和XFER均姐弟,使DAC寄存器處于直通凡事,而把ILE接高電平,接端口地址譯碼信號(hào)。WR1接CPU系統(tǒng)總顯線的IOW信號(hào),是輸入寄存器處于鎖存方式。但換種方式只需執(zhí)行一次寫操作即可完成D/A轉(zhuǎn)換。一般不需要多個(gè)模擬量同時(shí)輸出,可采用單緩沖方式。3、雙緩沖方式雙緩沖方式就是使兩個(gè)寄存器均處于鎖存方式,數(shù)據(jù)要經(jīng)過兩級(jí)鎖存(即兩級(jí)緩沖)后再送入D/A轉(zhuǎn)換器,就是說,要執(zhí)行兩次寫操作才能完成一次D/A轉(zhuǎn)換。只要將ILE接高電平,WR1和WR2接CPU的IOW,CS和XFER分別接兩個(gè)不同的I/O地址譯碼信號(hào)即可。在本設(shè)計(jì)中,令0832工作在單緩沖方式,其片選端接138譯碼器單元的CS1,其地址為0x9000H。DAC0832的輸出方式DAC0832為電流型輸出,若需要電壓輸出可使用運(yùn)算放大器構(gòu)成單極性輸出和雙極性,圖3 中a、b分別為0832的單極性輸出和雙極性輸出的電路連接方式。若采用單極性輸出,則只能產(chǎn)生0V5V電壓,不能得到既有正脈波又有負(fù)脈波的正弦波。因此本設(shè)計(jì)采用DAC0832的雙極性輸出,其輸出電壓為-5+5V;當(dāng)DI0DI7為0000000B時(shí)輸出-5V,為10000000B時(shí)輸出0V,為11111111B是輸出+5V。這樣可以產(chǎn)生既有正脈波又有服脈波的正弦波。圖3 DAC0832的單極性輸出和雙極性輸出3.如何產(chǎn)生正弦波 (a) (b)圖4 正弦波的分解 用單片機(jī)控制DAC0832來產(chǎn)生正弦波有個(gè)問題,就是數(shù)模轉(zhuǎn)換總是有其分辨率的,輸出的電壓并不是連續(xù)變化的。例如:8位DAC輸出為-5V+5V,那么分辨率就是:,所以產(chǎn)生的正弦波會(huì)有一定的誤差。如何利用單片機(jī)控制DAC0832產(chǎn)生正弦波呢?我們可以先把一個(gè)正弦波按橫軸等間距分別為若干個(gè)點(diǎn)(如圖 4分為51個(gè)點(diǎn))。把每個(gè)點(diǎn)電壓幅值所對(duì)應(yīng)的8位二進(jìn)制數(shù)值做成表,放在CPU的ROM中。例如:圖4中左起第一個(gè)點(diǎn)幅值是0V,對(duì)應(yīng)的送給DAC0832的8位二進(jìn)制數(shù)為80H,所以表的第一元素為80H制成下表:(下表中數(shù)據(jù)以十進(jìn)制表示)TAB1: DB 128, 144, 160, 175, 190, 203, 216, 227, 236, 244, 250, 254, 255, 255, 254, 250, 244, 236, 227, 216, 203, 190, 175, 160, 144, 128, 112, 96, 81, 66, 53, 40, 29, 20, 12, 6, 2, 0, 0, 2, 6, 12, 20, 29, 40, 53, 66, 81, 96, 112, 128 先取表中第一個(gè)元素送給0832,0832輸出第一個(gè)電壓0V,再取第二個(gè)數(shù)送給0832輸出下一個(gè)電壓,依次類推,取到表的最后一個(gè)元素時(shí),從頭開始取表的第一個(gè)元素。循環(huán)往復(fù),就輸出了一個(gè)連續(xù)的正弦波形。只產(chǎn)生一個(gè)正弦波是不夠的,我們還要求其頻率和幅值可調(diào)??梢钥匆幌履男┮蛩貢?huì)影響輸出波形的頻率和幅值頻率的影響因素由圖4可知,該正弦波的頻率 (為所取的兩個(gè)點(diǎn)之間的間隔),所以只要改變就可以改變輸出波形的頻率。我采用的方案是:用一個(gè)定時(shí)器,每隔產(chǎn)生一次中斷,在中斷服務(wù)程序里控制DAC0832輸出。如果想要改變只要改變定時(shí)器的時(shí)間就行了。也就改變了輸出波形的頻率。采用這個(gè)方案需要驗(yàn)證兩個(gè)問題: 本設(shè)計(jì)要求輸出頻率在1HZ1000HZ可調(diào),所以定時(shí)器的定時(shí)時(shí)間需要達(dá)到S,即定時(shí)器的定時(shí)時(shí)間要在S之間可調(diào),并且其分辨率滿足要求。經(jīng)驗(yàn)證51單片機(jī)的定時(shí)器0工作在方式1時(shí),其性能滿足要求,故采用定時(shí)器的方案可行。 不可能無限小,假設(shè)單片機(jī)晶振為6MHZ,那么定時(shí)器的分辨率為2S即0.000002S。單片機(jī)執(zhí)行指令是需要時(shí)間的,當(dāng)定時(shí)器溢出產(chǎn)生中斷時(shí),需要執(zhí)行一系列指令,包括對(duì)斷點(diǎn)地址進(jìn)行壓棧、給PC賦值等操作,都是需要占用時(shí)間的,這一部分占用的時(shí)間是不可避免的。除此之外,進(jìn)入中斷服務(wù)子程序中,順序執(zhí)行里面的程序,在執(zhí)行MOVX DPTR,A 給DAC0832送數(shù)據(jù)讓其輸出電壓之前會(huì)有一些必須的程序,包括賦初值給定時(shí)器的TH0和TL0,查表程序等。綜合上面幾個(gè)因素,這時(shí)定時(shí)器的定時(shí)時(shí)間并不是理論上計(jì)算出的時(shí)間,而大于這個(gè)時(shí)間,這樣輸出波形的頻率就會(huì)有誤差。為了減小誤差,第一,盡量減少定時(shí)中斷服務(wù)程序中的指令,以減少其占用的時(shí)間;第二:給TH0,TL0幅值時(shí),減去延時(shí)的時(shí)間,以抵消掉指令占用的時(shí)間。幅值的影響因素從前面介紹的DAC0832的原理可知,只要改變DAC0832數(shù)字量輸入就可以改變其輸出模擬量的幅度。由于產(chǎn)生波形的幅度是在存儲(chǔ)于單片機(jī)內(nèi)部ROM的表中,按順序取出的。因此我們需要從新建立一個(gè)表,這樣定時(shí)中斷服務(wù)程序中,該表所查的表,就改變了輸出波形的幅度。本設(shè)計(jì)要求幅值1V5V可調(diào),因此需要建立5個(gè)表。建立5個(gè)表的時(shí)候如果一個(gè)元素一個(gè)元素的算,未免太麻煩??梢杂肕ATLAB分別算出5個(gè)表,然后粘貼到程序中,稍作修改就可以使用(圖5為輸出幅值為4V時(shí)表的計(jì)算方法算法)。算法: (U為需要得的到的幅值,此時(shí)b數(shù)組就是對(duì)應(yīng)的表)圖5 表的計(jì)算方法(輸出幅值為4V時(shí)) 綜合上面改變頻率和幅值的方法,就可以得到符合本設(shè)計(jì)的設(shè)計(jì)要求的波形。3.頻率與幅值的設(shè)置方案:利用單脈沖發(fā)生器,當(dāng)需要設(shè)置幅值和頻率時(shí),產(chǎn)生中斷,暫停正在工作的定時(shí)器,停止波形輸出,進(jìn)入外部中斷0中斷服務(wù)程序,通過按鍵,對(duì)波形進(jìn)行設(shè)置。按鍵0:頻率/幅值切換;按鍵1:頻率/幅值增加;按鍵2:退出外部中斷,開啟定時(shí)器,輸出波形4.鍵盤與顯示 利用WAVE6000 實(shí)驗(yàn)環(huán)境中的顯示程序和鍵盤掃描電路及程序。改程序提供了三個(gè)子程序:TestKey;GetKey;DispLedBuf。三、硬件設(shè)計(jì)1硬件電路本設(shè)計(jì)由單片機(jī)、D/A轉(zhuǎn)換電路、鍵盤及顯示電路幾個(gè)組成部分,各部分采用的電路形式及主要器件確定如下:(1)單片機(jī)部分選用89C51單片機(jī)作為主機(jī),同時(shí)要設(shè)計(jì)89C51單片機(jī)的晶振電路和復(fù)位電路,具體電路略。(2)D/A轉(zhuǎn)換電路部分直接利用單片機(jī)實(shí)驗(yàn)箱上的D/A轉(zhuǎn)換電路正弦波信號(hào)的輸出。電路如圖6所示。圖6 DAC0832連接電路(3)按鍵與顯示部分 直接利用單片機(jī)試驗(yàn)箱上的按鍵與顯示電路。如圖7、圖8所示 圖7 顯示器電路連接圖圖8 鍵盤電路連接圖四、程序設(shè)計(jì) 1程序流程圖 主程序流程圖:開始初始化(中斷允許、定時(shí)器初始化等)SJMP $ 循環(huán)等待圖9 主程序流程圖 定時(shí)器0中斷服務(wù)程序流程圖:是否開始定時(shí)器重賦初值Mov TH0,CTH0Mov TL0,CTL0表的首地址賦DPTRMov DPH,#CDPHMov DPH,#0根據(jù)R0內(nèi)容進(jìn)行查表把查表的內(nèi)容送到0832INC R0R0等于50?Mov R0,#0圖10定時(shí)器0中斷服務(wù)程序流程圖否開始停止定時(shí)器0的中斷初始化工作F0清零顯示清空調(diào)用顯示程序DisplayLED檢測(cè)有無按鍵TestKey無按鍵有按鍵取鍵值GetKey鍵值為#0?CPL F0 并且根據(jù)F0來顯示U或F是鍵值為#1?鍵值為#2?否否F0為零INC CU否則INC CHZ并把顯示被容送入LEDBuf是允許定時(shí)器0中斷RETI結(jié)束外部中斷0中斷服務(wù)程序流程圖:圖11外部中斷0中斷服務(wù)程序流程圖2程序模塊功能主程序:進(jìn)行一系列初始化后,主程序最后停在SJMP $等待。定時(shí)器0中斷服務(wù)程序:每隔一定時(shí)間按次序查表,把相應(yīng)數(shù)值送給DAC0832進(jìn)行數(shù)模轉(zhuǎn)換,實(shí)現(xiàn)正弦波輸出。外部中斷0中斷服務(wù)程序:配合按鍵掃描程序和數(shù)碼管顯示程序,對(duì)正弦波參數(shù)進(jìn)行設(shè)置。3.硬件資源分配表存儲(chǔ)單元、寄存器用途備注R0定時(shí)器0中斷服務(wù)程序中,用作循環(huán)50個(gè)點(diǎn)的查表每來一次定時(shí)器中斷加1,到50后清0F0標(biāo)志位用來判斷現(xiàn)在調(diào)整頻率還是幅值CU(09H)查表計(jì)數(shù)(用作頻率調(diào)整)每次加1,到21之后清0CHZ(12H)查表計(jì)數(shù)(用作幅值調(diào)整)每次加1,到5之后清0CTH0(10H)存儲(chǔ)調(diào)整后的TH0的初值CTL0(11H)存儲(chǔ)調(diào)整后的TL0的初值CDPH存儲(chǔ)調(diào)整后的DPH的值OUTBIT(08002H)位控制端口OUTSEG(08004H)段控制端口IN(08001H)鍵盤讀入端口LEDBuf(60H)顯示緩沖區(qū)首地址60H65H四、運(yùn)行結(jié)果分析1.軟硬件調(diào)試(出現(xiàn)的問題、如何解決。)搭建PROTEUS仿真電路,進(jìn)行軟件模擬仿真(圖12)圖12 PROTEUS仿真電路此電路和實(shí)際電路有差異,主要用于前期的軟件仿真,基本的波形發(fā)生,測(cè)試MATLAB軟件計(jì)算出的數(shù)值運(yùn)行后是否滿足設(shè)計(jì)要求。此外,我還用此電路測(cè)試了取不同點(diǎn)數(shù)時(shí),波形差異。分別測(cè)試了30點(diǎn)、50點(diǎn)、70點(diǎn)以及100點(diǎn),點(diǎn)數(shù)越多越接近正弦,點(diǎn)數(shù)越少失真越嚴(yán)重。但是點(diǎn)數(shù)過多,所能達(dá)到的頻率最低值越大,不能滿足本設(shè)計(jì)中頻率達(dá)到1000HZ的要求。經(jīng)試驗(yàn),取50點(diǎn)可以達(dá)到最好的效果,是頻率達(dá)到要求,波形又不失真嚴(yán)重。前期仿真完成后,進(jìn)行上機(jī)調(diào)試。起初,加上鍵盤顯示程序時(shí),鍵盤和顯示程序時(shí)鐘程序始終不正常。經(jīng)老師指點(diǎn),改變思路,在進(jìn)行頻率和幅度設(shè)置時(shí),關(guān)掉波形發(fā)生功能。順利完成調(diào)試。2.運(yùn)行結(jié)果系統(tǒng)上電,產(chǎn)生50HZ,-5V+5V正弦波。按單脈沖發(fā)生鍵,進(jìn)入設(shè)置程序,按鍵盤0鍵決定調(diào)節(jié)頻率還是幅值;按1鍵進(jìn)行調(diào)節(jié);按2鍵完成設(shè)置,開始輸出波形。(圖13、圖14、圖15、圖16分別為幾種不同頻率和幅值的輸出波形)圖13 正弦波(100HZ,-5V+5V)圖13 正弦波(100HZ,-4V+4V)圖14 正弦波(200HZ,-4V+4V)五、設(shè)計(jì)總結(jié)本次設(shè)計(jì)題目是正弦信號(hào)發(fā)生器。用到的硬件有按鍵、數(shù)碼管顯示、譯碼電路、DAC0832、8051單片機(jī)。通過這次設(shè)計(jì),進(jìn)一步熟悉了這些硬件的用法。熟悉了WAVE編程軟件的使用。對(duì)匯編語(yǔ)言進(jìn)行單片機(jī)程序設(shè)計(jì)有了更深一步的認(rèn)識(shí)。完成本次設(shè)計(jì)后,學(xué)到了一種新的編程思路:大量的應(yīng)用查表的方式進(jìn)行程序設(shè)計(jì),可以有效的增加程序執(zhí)行的效率,縮短其執(zhí)行時(shí)間,一些對(duì)程序執(zhí)行時(shí)間有嚴(yán)格要求的場(chǎng)合,可以用此思路進(jìn)行設(shè)計(jì)。當(dāng)然,查表方式進(jìn)行程序設(shè)計(jì)亦有其缺點(diǎn):占用大量的內(nèi)部ROM空間,對(duì)于一些內(nèi)部ROM空間不是很充足的單片機(jī),過多的表可能導(dǎo)致ROM空間不足。因此,進(jìn)行程序設(shè)計(jì)時(shí)要將查表方式和算法方式進(jìn)行綜合考慮,選擇效率較高的方式進(jìn)行設(shè)計(jì),也可以將兩種方式有效結(jié)合起來。 此次設(shè)計(jì)能順利完成,要感謝李老師的指導(dǎo),在加入鍵盤和顯示程序時(shí),遇到了困難,是李老師的指導(dǎo),使我走出了泥潭。六、參考資料1 胡宴如. 高頻電子線路M.高教出版社. 2001.9:12-19 2 盧屹. 數(shù)字鎖相環(huán)的參數(shù)設(shè)計(jì)及其應(yīng)用J 通信技術(shù)2001,(9):12-153 涂時(shí)亮等. 單片微機(jī)軟件設(shè)計(jì)技術(shù).重慶:科學(xué)技術(shù)文獻(xiàn)出版社重慶分社,19884 張志良. 單片機(jī)原理及控制技術(shù).北京:機(jī)械工業(yè)出版社,20015 徐君毅等,單片微型計(jì)算機(jī)原理與應(yīng)用.上海:上??茖W(xué)技術(shù)版社,19886 成都木馬科技. 單片機(jī)原理及應(yīng)用.北京:北京希望電子出版社,19887 宋培義等.單片機(jī)原理、接口技術(shù)及應(yīng)用.北京:中國(guó)廣播電視出版社,19998 何利民.I2C總線應(yīng)用系統(tǒng)設(shè)計(jì).北京:北京航空航天大學(xué)出版社,1994附錄:源程序ORG 0000H AJMP MAIN ORG 0003H LJMP WBZD0 ORG 000BH LJMP DSZD0 ORG 0030H CU EQU 09H CTH0 EQU 10H CTL0 EQU 11H CHZ EQU 12H CDPH EQU 13H OUTBIT equ 08002h ; 位控制口 OUTSEG equ 08004h ; 段控制口 IN equ 08001h ; 鍵盤讀入口 LEDBuf equ 60h ; 顯示緩沖MAIN: MOV CHZ,#0 MOV A,#00H MOV DPTR,#09000H MOV TMOD,#11H MOV TH0,#0FFH MOV TL0,#0EDH SETB EA SETB ET0 SETB ET1 SETB EX1 SETB IT0 SETB IT1 MOV CDPH,#09H SETB EX0 MOV CTH0,#0FFH MOV CTL0,#0FH SETB TR0 SJMP $Delay: mov r7, #0DelayLoop: djnz r7, DelayLoop djnz r6, DelayLoop retDisplayLED: mov r0, #LEDBuf mov r1, #6 ; 共6個(gè)八段管 mov r2, #00100000b ; 從左邊開始顯示Loop: mov dptr, #OUTBIT mov a, #0 movx dptr, a ; 關(guān)所有八段管 mov a, r0 mov dptr, #OUTSEG movx dptr, a mov dptr, #OUTBIT mov a, r2 movx dptr, a ; 顯示一位八段管 mov r6, #1 call Delay mov a, r2 ; 顯示下一位 rr a mov r2, a inc r0 djnz r1, Loop retTestKey: mov dptr, #OUTBIT mov a, #0 movx dptr, a ; 輸出線置為0 mov dptr, #IN movx a, dptr ; 讀入鍵狀態(tài) cpl a anl a, #0fh ; 高四位不用 retGetKey: mov dptr, #OUTBIT mov P2, dph mov r0, #Low(IN) mov r1, #00100000b mov r2, #6KLoop: mov a, r1 ; 找出鍵所在列 cpl a movx dptr, a cpl a rr a mov r1, a ; 下一列 movx a, r0 cpl a anl a, #0fh jnz Goon1 ; 該列有鍵入 djnz r2, KLoop mov r2, #0ffh ; 沒有鍵按下, 返回 0ffh sjmp ExitGoon1: mov r1, a ; 鍵值 = 列 X 4 + 行 mov a, r2 dec a rl a rl a mov r2, a ; r2 = (r2-1)*4 mov a, r1 ; r1中為讀入的行值 mov r1, #4LoopC: rrc a ; 移位找出所在行 jc Exit inc r2 ; r2 = r2+ 行值 djnz r1, LoopCExit: mov a, r2 ; 取出鍵碼 mov dptr, #KeyTable movc a, a+dptr mov r2, aWaitRelease: mov dptr, #OUTBIT ; 等鍵釋放 clr a movx dptr, a mov r6, #10 call Delay call TestKey jnz WaitRelease mov a, r2 retKeyTable: ; 鍵碼定義 db 16h, 15h, 14h, 0ffh db 13h, 12h, 11h, 10h db 0dh, 0ch, 0bh, 0ah db 0eh, 03h, 06h, 09h db 0fh, 02h, 05h, 08h db 00h, 01h, 04h, 07h LEDMAP: ; 八段管顯示碼 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hWBZD0 : CLR ET0; ;禁止定時(shí)器中斷,不再產(chǎn)生波形 CLR F0 ; ;flag mov LEDBuf+0, #0h ; 顯示 8.8.8.8. mov LEDBuf+1, #0h mov LEDBuf+2, #0h mov LEDBuf+3, #0h mov LEDBuf+4, #0 mov LEDBuf+5, #0 K1: CALL DisplayLED ; ;顯示程序 call TestKey ;;檢測(cè)按鍵 JZ K1 call GetKey ; ;獲取鍵值 ANL A,#0FH CJNE A,#0,NE1 ;;判斷是否按下0鍵,0鍵功能:輸入頻率還是幅值的轉(zhuǎn)換 CPL F0 JB F0,BB ; ;輸入幅值還是頻率的標(biāo)志 MOV LEDBuf+0, #71H SJMP BB1 BB: MOV LEDBuf+0, #00111110B BB1:LJMP K1 NE1:CJNE A,#1,EE SJMP CC EE:LJMP NE2 CC:JB F0,AF MOV A,CU MOV DPTR,#TABSJH ;CTH0里面內(nèi)容TH0,CTL0里面內(nèi)容TL0 MOVC A,A+DPTR MOV CTH0,A MOV A,CU MOV DPTR,#TABSJL MOVC A,A+DPTR MOV CTL0,A INC CU MOV A,CU CJNE A,#21,S1 MOV CU,#0S1: mov LEDBuf+1, #0h mov LEDBuf+2, #0h mov LEDBuf+3, #0h mov LEDBuf+4, #0 mov LEDBuf+5, #0 MOV A,CU MOV DPTR,#TAB7SEG6 MOVC A,A+DPTR MOV LEDBuf+5,A MOV A,CU MOV DPTR,#TAB7SEG5 MOVC A,A+DPTR MOV LEDBuf+4,A MOV A,CU MOV DPTR,#TAB7SEG4 MOVC A,A+DPTR MOV LEDBuf+3,A MOV A,CU MOV DPTR,#TAB7SEG3 MOVC A,A+DPTR MOV LEDBuf+2,A SJMP K1 AF: INC CHZ MOV A,CHZ CJNE A,#1,MM1 MOV CDPH,#0CH SJMP W1MM1: CJNE A,#2,MM2 MOV CDPH,#0BH SJMP W1MM2: CJNE A,#3,MM3 MOV CDPH,#0AH SJMP W1MM3: CJNE A,#4,MM4 MOV CDPH,#09H SJMP W1MM4: MOV CDPH,#0DH MOV CHZ,#0 SJMP W1 W1: mov LEDBuf+1, #0h mov LEDBuf+2, #0h mov LEDBuf+3, #0h mov LEDBuf+4, #0 mov LEDBuf+5, #0 MOV DPTR,#TAB7SEG1 MOV A,CHZ MOVC A,A+DPTR MOV LEDBuf+5,A LJMP K1 NE2: CJNE A,#2,NE3 SJMP MEND NE3: LJMP K1 MEND: SETB ET0; RETI DSZD0: MOV TH0,CTH0 MOV TL0,CTL0 MOV DPH,CDPH MOV DPL,#0 MOV A,R0 MOVC A,A+DPTR MOV DPTR,#09000H MOVX DPTR,A INC R0 CJNE R0,#50,LL MOV R0,#0 LL: RETITAB7SEG1:DB 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h DB 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hTAB7SEG2:DB 0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0TAB7SEG3:DB 0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,06H,0TAB7SEG4:DB 0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH ,0TAB7SEG5:DB 0H ,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,0TAB7SEG6:DB 06H ,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,0TABSJH:DB 0F8H,0FCH,0FDH,0FEH,0FEH,0FEH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFHTABSJL:DB 30H,18H,65H,0CH,70H,0B2H,0E2H,06H,21H,38H,38H,9cH,0bdH,0ceH,0D8H,0DEH,0E3H,0E7H,0E9H,0ECHORG 0900HTAB1: DB 128, 144, 160, 175, 190, 203, 216, 227, 236, 244, 250, 254, 255, 255, 254, 250, 244
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編版二年級(jí)上冊(cè)第四單元《曹沖稱象》教案
- 色塊構(gòu)圖題目及答案
- 散文閱讀結(jié)構(gòu)題目及答案
- 2024屆貴州省重點(diǎn)高中高三4月聯(lián)考(二模)語(yǔ)文試題(解析版)
- 2024-2025學(xué)年陜西省咸陽(yáng)市部分學(xué)校高三下學(xué)期沖刺檢測(cè)語(yǔ)文試題(解析版)
- 博士應(yīng)聘高校簡(jiǎn)歷
- 高一物理-勻變速直線運(yùn)動(dòng)-位移和速度關(guān)系
- 餐廚垃圾特性分析及資源化處理現(xiàn)狀
- 作業(yè)行業(yè)安全管理制度
- 供養(yǎng)關(guān)系后續(xù)管理制度
- 2024-2025學(xué)年初中英語(yǔ)七年級(jí)下冊(cè)期末考試綜合測(cè)試卷及參考答案
- 2025年山東省濟(jì)南市長(zhǎng)清區(qū)中考二模道德與法治試題(含答案)
- 冠心病的規(guī)范化診培訓(xùn)課件
- 未來中國(guó)檢測(cè)市場(chǎng)發(fā)展趨勢(shì)簡(jiǎn)析(精)
- 2025年AI+賦能中小企業(yè):出海營(yíng)銷的創(chuàng)新與發(fā)展
- 2025年福建省糧食行業(yè)職業(yè)技能競(jìng)賽(糧油保管員)備賽試題庫(kù)(含答案)
- 四川電網(wǎng)新建電源并網(wǎng)服務(wù)指南(2025年)
- 2025安全月查找身邊安全隱患:生產(chǎn)現(xiàn)場(chǎng)實(shí)拍隱患圖解
- 民航危險(xiǎn)品運(yùn)輸分類具有多重危險(xiǎn)性的物質(zhì)物品Dangerou
- 江蘇省淮安市2022年中考化學(xué)真題(解析版)
- 事故隱患內(nèi)部報(bào)告獎(jiǎng)勵(lì)制度
評(píng)論
0/150
提交評(píng)論