|
畢業(yè)設(shè)計(jì)
題 目 基于單片機(jī)控制的函數(shù)信號(hào)發(fā)生器
英文題目 microcontroller-based function signal generator
二零一二 年 月
摘 要
信號(hào)發(fā)生器,它是一種用于產(chǎn)生標(biāo)準(zhǔn)信號(hào)的電子儀器,隨著科學(xué)技術(shù)的發(fā)展,對(duì)它的要求越來(lái)越高。在工業(yè)生產(chǎn)和科研中利用信號(hào)發(fā)生器輸出的信號(hào),可以對(duì)元器件的性能及參數(shù)進(jìn)行測(cè)量,還可以對(duì)電工和電子產(chǎn)品進(jìn)行指數(shù)驗(yàn)證、參數(shù)調(diào)整及性能鑒定。常用的信號(hào)發(fā)生器絕大部分都是由模擬電路構(gòu)成的,當(dāng)這種模擬信號(hào)發(fā)生器用于低頻信號(hào)輸出往往需要的RC值很大,這樣不但參數(shù)準(zhǔn)確度難于保證,而且體積和功耗都很大,而由數(shù)字電路構(gòu)成的低頻信號(hào)發(fā)生器,雖然其低頻性能好但體積較大,價(jià)格較貴,因此,高精度,寬調(diào)幅,低價(jià)格將成為數(shù)字量信號(hào)發(fā)生器的發(fā)展趨勢(shì)。
本設(shè)計(jì)核心任務(wù)是:以89C51為核心,結(jié)合DAC0832實(shí)現(xiàn)程序控制產(chǎn)生正弦波、鋸齒波及方波等常用的低頻信號(hào)。可以通過(guò)鍵盤選擇波形及增減頻率。
關(guān)鍵詞:波形發(fā)生器; 單片機(jī)80C51;數(shù)模轉(zhuǎn)換器件DAC0832
ABSTRACT
Signal generator, it is a widely used sourse, with the scientific and the technological development,increasing its demands. industrial production and scientific research in the use of signal generator output signal generator output signal, the performance of components and parameters measured, but also the electrical and electronic products for authentication, and adjust parameters of identificatiaon. The signal generator used by the vast majority of Analog circuit components, such as analog signal generator for the low-frequency signals often require output value of the RC great, it will not only difficult to ensure the accuracy of parameters, but also have great size and power consumption. Digital components of low-frequency signal generator, although the low-frequency performance good but larger, more expensive price, therefore, high accuracy, wide-AM, will become a low-cost digital signal generator trend of development.
The graduation project core task is to design:89c51 as the microcontroller, unifies DAC0832 to realize the programmed control to have the sine wave, the sawtooth wave and the square wave three commonly used low-frequency signals. Can choose the waveform and frequency by the keyboard.
Key word: 89C51; DAC0832; signal generator
目 錄
緒論 1
1.1本課題的目的及意義 1
1.2 本課題的研究現(xiàn)狀 1
1.3 設(shè)計(jì)的基本要求 2
1.4 本課題研究?jī)?nèi)容 2
2. 方案的設(shè)計(jì)與選擇 4
2.1 總體設(shè)計(jì)方案 4
2.2 方案的比較 4
2.3 單片機(jī)的選擇 5
2.4 顯示方案選擇 5
2.5 鍵盤方案選擇 5
3. 硬件設(shè)計(jì) 6
3.1 ATC89C51單片機(jī) 6
3.2數(shù)模轉(zhuǎn)換器件DAC0832 10
3.3 顯示模塊 1602液晶器件 14
4. 軟件系統(tǒng)設(shè)計(jì) 15
4.1主程序流程圖 15
4.2定時(shí)中斷程序流程圖 16
4.3外部中斷按鍵子程序流程圖 17
4.4正弦波子程序流程圖 18
4.5三角波子主程序流程圖 19
4.6方波子程序流程圖 20
4.7初始顯示子程序流程圖 20
5. 仿真 21
結(jié) 論 25
致 謝 26
參考資料 27
附錄 28
附錄1:程序 28
附錄2:硬件原理圖 36
附錄3:仿真用圖 37
緒論
1.1 本課題的目的及意義
信號(hào)發(fā)生器是一種經(jīng)常使用的設(shè)備,有純粹物理器件構(gòu)成的傳統(tǒng)的設(shè)計(jì)方法存在許多弊端,如體積較大、重量較沉、移動(dòng)不方便、信號(hào)失真較大、波形種類過(guò)于單一、波形形狀調(diào)節(jié)過(guò)于死板,無(wú)法滿足用戶對(duì)精度、便捷性、穩(wěn)定性等要求,研究設(shè)計(jì)出一種具有頻率穩(wěn)定、準(zhǔn)確、波形質(zhì)量好、輸出頻率范圍寬、便捷性好等特點(diǎn)的波形發(fā)生器具有較好的市場(chǎng)前景,以滿足軍事和民用領(lǐng)域?qū)π盘?hào)源的要求。
本次設(shè)計(jì)的主要目標(biāo) 是學(xué)習(xí)和運(yùn)用單片機(jī)的C語(yǔ)言和匯編語(yǔ)言,實(shí)現(xiàn)利用單片機(jī)89c51和8位D/A轉(zhuǎn)換芯片DAC0832共同實(shí)現(xiàn)正弦波,方波,鋸齒波這三種常見(jiàn)波形的發(fā)生,并可以顯示波形種類和頻率大小。本次設(shè)計(jì)準(zhǔn)備在成本較低廉的前提下完成,主要單片機(jī)89C51和8位D/A轉(zhuǎn)換芯片DAC0832,性能指數(shù)都不是很高。通過(guò)該課題的設(shè)計(jì)掌握函數(shù)發(fā)生器系統(tǒng)的設(shè)計(jì)流程;培養(yǎng)我們綜合運(yùn)用所學(xué)的基本知識(shí)、基本理論和基本技能的能力,學(xué)習(xí)解決一般工程技術(shù)和有關(guān)專業(yè)問(wèn)題的能力,學(xué)習(xí)工程設(shè)計(jì)和科學(xué)研究的基本方法,完成對(duì)所學(xué)的知識(shí)的綜合訓(xùn)練。
1.2 本課題的研究現(xiàn)狀
信號(hào)發(fā)生器既可以構(gòu)成獨(dú)立的信號(hào)源,也可以是高性能網(wǎng)絡(luò)分析儀、頻譜儀及其它自動(dòng)測(cè)試設(shè)備的組成部分。美國(guó)生產(chǎn)的33250A型函數(shù)/任意波形發(fā)生器,可以產(chǎn)生穩(wěn)定、精確和低失真的任意波形,其輸出頻率范圍為1μHZ ~80MHZ,而輸出幅度為10mVpp~10Vpp;該公司生產(chǎn)的8648D射頻信號(hào)發(fā)生器的頻率覆蓋范圍更可高達(dá)9kHz~4GHz。國(guó)產(chǎn)SG1060數(shù)字合成信號(hào)發(fā)生器能雙通道同時(shí)輸出高分辨率、高精度、高可靠性的各種波形,頻率覆蓋范圍為1μHZ ~60MHZ;國(guó)產(chǎn)S1000型數(shù)字合成掃頻信號(hào)發(fā)生器通過(guò)采用新技術(shù)、新器件實(shí)現(xiàn)高精度、寬頻帶的掃頻源,同時(shí)應(yīng)用DDS和鎖相技術(shù),使頻率范圍從1MHZ ~1024MHZ能精確地分辨到100hz,它既是一臺(tái)高精度的掃頻源,同時(shí)也是一臺(tái)高精度的標(biāo)準(zhǔn)信號(hào)發(fā)生器。還有很多其他類型的信號(hào)發(fā)生器,他們各有各的優(yōu)點(diǎn),但是信號(hào)發(fā)生器總的趨勢(shì)將向著款頻率覆蓋、高精度、多功能、多用途、自動(dòng)化和智能化方向發(fā)展。
目前,市場(chǎng)上的信號(hào)發(fā)生器多種多樣,一般按頻率帶分為以下幾種;
超高頻:頻率范圍1MHz以上,可達(dá)幾十兆赫茲。
高頻:幾百赫茲到幾赫茲。
低頻:頻率范圍為幾十赫茲到幾百赫茲。
超低頻:頻率范圍為零點(diǎn)幾赫茲到幾百赫茲。
超高頻信號(hào)發(fā)生器,產(chǎn)生波形一般為用LC振蕩電路。
高頻、低頻和超低頻信號(hào)發(fā)生器,大多使用文氏橋振蕩電路,即RC振蕩電路,通過(guò)改變電容和電阻值,改變頻率。
用以上原理設(shè)計(jì)的信號(hào)發(fā)生器,其輸出波形一般只有兩種,即正弦波和脈沖波,其零點(diǎn)不可調(diào),而且價(jià)格也比較貴,一般在幾百元左右。在實(shí)際應(yīng)用中,超低頻波和高頻波一般是不用的,一般用中頻,即幾十赫茲到幾十千赫茲。用單片機(jī)AT89C51,加上一片DAC0832,就可以做成一個(gè)簡(jiǎn)單的信號(hào)發(fā)生器,其頻率受單片機(jī)運(yùn)行的程序控制。我們可以把產(chǎn)生各種波形的程序燒寫進(jìn)單片機(jī)ROM中,用戶可以通過(guò)鍵盤和液晶顯示,按照自己的意愿選擇波形頻率可調(diào)的多功能信號(hào)發(fā)生器,這樣的系統(tǒng)價(jià)格便宜,耗電少,頻率適中,便于攜帶。
1.3 設(shè)計(jì)的基本要求
本設(shè)計(jì)采用單片機(jī)控制技術(shù)了,開(kāi)發(fā)、設(shè)計(jì)函數(shù)發(fā)生器。在條件許可情況下模擬調(diào)試成功。設(shè)計(jì)要求:
(1)系統(tǒng)能產(chǎn)生方波、鋸齒及正弦信號(hào)
(2)能提供信號(hào)的頻率的顯示
(3)系統(tǒng)硬件電路設(shè)計(jì)
(4)有必要的數(shù)據(jù)計(jì)算及元器件的選擇
(5)軟件系統(tǒng)設(shè)計(jì)
1.4 本課題研究?jī)?nèi)容
本文是做基于單片機(jī)的信號(hào)發(fā)生器的設(shè)計(jì),將采用編程的方法來(lái)實(shí)現(xiàn)鋸齒波、方波、正弦波的發(fā)生。根據(jù)設(shè)計(jì)的要求,對(duì)各種波形的頻率顯示,并將所寫程序裝入單片機(jī)的程序存儲(chǔ)器中。在程序運(yùn)行中,當(dāng)接收到來(lái)自外界的命令,需要輸出某種波形時(shí)再調(diào)用相應(yīng)的波形發(fā)生程序,經(jīng)電路的D/A轉(zhuǎn)換器和運(yùn)算放大器處理后,從信號(hào)發(fā)生器的輸出端口輸出。本設(shè)計(jì)采用89C51單片機(jī)機(jī)及其外圍擴(kuò)展系統(tǒng),軟件方面主要是應(yīng)用c語(yǔ)言程序。系統(tǒng)以89C51為核心,配置相應(yīng)的外設(shè)及接口電路,運(yùn)用c語(yǔ)言開(kāi)發(fā),組成一個(gè)多功能信號(hào)發(fā)生系統(tǒng)。該系統(tǒng)的軟件可運(yùn)行于window環(huán)境下,硬件電路系統(tǒng)設(shè)計(jì)具有典型性。同時(shí),本系統(tǒng)中任何一部分模塊均可移植實(shí)用開(kāi)發(fā)系統(tǒng)設(shè)計(jì)中,電路設(shè)計(jì)具有實(shí)用性。
2. 方案的設(shè)計(jì)與選擇
2.1 總體設(shè)計(jì)方案
數(shù)字信號(hào)可以通過(guò)數(shù)/模轉(zhuǎn)換器轉(zhuǎn)換成模擬信號(hào),因此可通過(guò)產(chǎn)生數(shù)字信號(hào)再轉(zhuǎn)換成模擬信號(hào)的方法來(lái)獲得所需要的波形。89C51單片機(jī)本身就是一個(gè)完整的微型計(jì)算機(jī),具有組成微型計(jì)算機(jī)的各部分部件:中央處理器CPU、隨機(jī)存取存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、I/O接口電路、定時(shí)器/計(jì)數(shù)器以及串行通訊接口等,只要將89C51再配置鍵盤及其接口、顯示器及其接口、數(shù)模轉(zhuǎn)換及波形輸出、指示燈及其接口等四部分,即可構(gòu)成所需的波形發(fā)生器,其信號(hào)發(fā)生器構(gòu)成原理框圖如圖2-1所示。
圖2-1 硬件原理框圖
2.2 方案的比較
方案一:采用單片機(jī)函數(shù)發(fā)生器(如8038),8038可同時(shí)產(chǎn)生正弦波、方波等,而且方法簡(jiǎn)單易行,用D/A轉(zhuǎn)換器的輸出來(lái)改變調(diào)制電壓,也可以實(shí)現(xiàn)數(shù)控調(diào)整頻率,但產(chǎn)生信號(hào)的頻率穩(wěn)定度不高。
方案二:采用鎖相式頻率合成器,利用鎖相環(huán),將壓控振蕩器(VCO)的輸出頻率定在所需頻率上,該方案性能良好,但難以達(dá)到輸出頻率覆蓋系數(shù)的要求,且電路復(fù)雜。
方案三:采用單片機(jī)編程的方法來(lái)實(shí)現(xiàn)。該方案可以通過(guò)編程的方法來(lái)控制信號(hào)波形的頻率,而且在硬件電路不變的情況下,通過(guò)改變程序來(lái)實(shí)現(xiàn)頻率的變換。此外,由于通過(guò)編程的方法產(chǎn)生數(shù)字信號(hào),所以信號(hào)的精度可以做的較高。
2.3 單片機(jī)的選擇
方案一:AT89C51單片機(jī)是一種高性能的8位單片微型計(jì)算機(jī)。它把構(gòu)成計(jì)算機(jī)的中央處理器CPU、存儲(chǔ)器、寄存器、I/O接口制作在一塊集成電路芯片中,從而構(gòu)成較為完整的計(jì)算機(jī),而且價(jià)格便宜。
方案二:C8051F005單片機(jī)是完全集成混合信號(hào)系統(tǒng)及芯片,具有與8051兼容的微控制器內(nèi)核,與MCS-51指令集完全兼容,除了具有標(biāo)準(zhǔn)8052的數(shù)字外設(shè)部件,片內(nèi)還集成了數(shù)據(jù)采集和控制系統(tǒng)中常用的模擬部件和其他數(shù)字外設(shè)及功能部件,而且執(zhí)行速度較快,但其價(jià)格較貴。
綜合考慮價(jià)格和性能決定選用AT89C51單片機(jī)
2.4 顯示方案選擇
方案一:采用LED數(shù)碼管。LED數(shù)碼管由8個(gè)發(fā)光二極管組成,每只數(shù)碼管輪流顯示各自的字符。由于人眼具有視覺(jué)特性,當(dāng)每只數(shù)碼管顯示的時(shí)間間隔小于1/16時(shí)人眼感覺(jué)不到閃動(dòng),看到的是每只數(shù)碼管常亮。使用數(shù)碼管顯示編程較易,但本系統(tǒng)中要顯示的內(nèi)容較多,而且數(shù)碼管只能顯示少數(shù)幾個(gè)字母。
方案二:采用LCD液晶顯示器1602.。其功率小,效果明顯,顯示變成容易控制,可以分行顯示,能夠很方面的顯示波形種類和頻率。
以上兩種方案綜合考慮,選擇LCD液晶顯示器作為系統(tǒng)顯示終端。
2.5 鍵盤方案選擇
方案一:矩陣式鍵盤。矩陣式鍵盤的按鍵觸點(diǎn)接于由行、列母線構(gòu)成的矩陣電路的交叉處。當(dāng)鍵盤上沒(méi)有鍵閉合時(shí),所有的行線和列線都斷開(kāi),行線都呈高電平。當(dāng)某一個(gè)鍵閉合時(shí),該鍵所對(duì)應(yīng)的行線和列線被短路。
方案二:編碼式鍵盤。編碼式鍵盤的按鍵觸點(diǎn)接于74ls148輸出。當(dāng)鍵盤上沒(méi)有閉合時(shí),所有鍵都斷開(kāi),當(dāng)某一鍵閉合時(shí),該鍵對(duì)應(yīng)的編碼由74ls148輸出。
方案三:獨(dú)立式鍵盤。獨(dú)立式鍵盤指各個(gè)按鍵的輸入相互獨(dú)立,每一個(gè)按鍵都單獨(dú)接一根輸入數(shù)據(jù)線。
經(jīng)過(guò)比較以上三種方案,鑒于本系統(tǒng)所用鍵盤比較少,所以選擇獨(dú)立式鍵盤。
3. 硬件設(shè)計(jì)
3.1 ATC89C51單片機(jī)
AT89C51 是美國(guó) ATMEL 公司生產(chǎn)的低電壓,高性能 CMOS8 位單片機(jī),片內(nèi)含 4k bytes 的可反復(fù)擦寫的只讀程序存儲(chǔ)器(PEROM)和 128 bytes 的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用 ATMEL 公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn) MCS-51 指令系統(tǒng),片內(nèi)置通用 8 位中央處理器(CPU)和 Flash 存儲(chǔ)單元,功能強(qiáng)大 AT89C51 單片機(jī)可為您提供許多高性價(jià)比的應(yīng)用場(chǎng)合,可靈活應(yīng)用于各種控制領(lǐng)域。AT89C51 提供以下標(biāo)準(zhǔn)功能:4k 字節(jié) Flash 閃速存儲(chǔ)器,128 字節(jié)內(nèi)部 RAM,32 個(gè) I/O 口線,兩個(gè) 16 位定時(shí)/計(jì)數(shù)器,一個(gè) 5 向量?jī)杉?jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),AT89C51 可降至 0Hz 的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式。空閑方式停止 CPU 的工作,但允許 RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存 RAM 中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。
圖3-1 proteus中的ATC89C51
圖3-2 ATC89C51方框圖
引腳功能說(shuō)明:
Vcc:電源電壓
GND:地
P0 口:P0 口是一組 8 位漏極開(kāi)路型雙向 I/O 口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng) 8 個(gè) TTL 邏輯門電路,對(duì)端口寫“1”可作為高阻抗輸入端用。在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低 8 位)和數(shù)據(jù)總線復(fù)用,在訪問(wèn)期間激活內(nèi)部上拉電阻。在 FIash 編程時(shí),P0 口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。
P1 口:P1 是一個(gè)帶內(nèi)部上拉電阻的 8 位雙向 I/O 口,P1 的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè) TTL 邏輯門電路。對(duì)端口寫“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。FIash 編程和程序校驗(yàn)期間,P1 接收低 8 位地址。
P2 口:P2 是一個(gè)帶有內(nèi)部上拉電阻的 8 位雙向 I/O 口,P2 的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè) TTL 邏輯門電路。對(duì)端口寫“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。在訪問(wèn)外部程序存儲(chǔ)器或 16 位地址的外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行 MOVX@DPTR 指令)時(shí),P2 口送出高 8 位地址數(shù)據(jù)。在訪問(wèn) 8 位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行 MOVX@RI 指令)時(shí),P2 口線上的內(nèi)容(也即特殊功能寄存器(SFR)區(qū)中 R2 寄存器的內(nèi)容),在整個(gè)訪問(wèn)期間不改變。Flash 編程或校驗(yàn)時(shí),P2 亦接收高位地址和其它控制信號(hào)。
P3 口:P3 口是一組帶有內(nèi)部上拉電阻的 8 位雙向 I/O 口。P3 口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè) TTL邏輯門電路。對(duì) P3 口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。作輸入端時(shí),被外部拉低的 P3 口將用上拉電阻輸出電流(IIL)。
P3 口除了作為一般的 I/O 口線外,更重要的用途是它的第二功能,如下表所示:
表3-1 P3 口第二功能
端口引腳 第二功能
P3.0 RXD(串行輸入口)
P3.1 TXD(串行輸出口)
P3.2 /INT0(外中斷 0)
P3.3 /INT1(外中斷 1)
P3.4 T0(定時(shí)/計(jì)數(shù)器 0 外部輸入)
P3.5 T1(定時(shí)/計(jì)數(shù)器 1 外部輸入)
P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)
P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)
P3 口還接收一些用于 Flash 閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。
RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST 引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。
ALE/PROG: 當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低 8 位字節(jié)。即使不訪問(wèn)外部存儲(chǔ)器,ALE 仍以時(shí)鐘振蕩頻率的 1/6 輸出固定的正脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過(guò)一個(gè) ALE 脈沖。對(duì) Flash 存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過(guò)對(duì)特殊功能寄存器(SFR)區(qū)中的 8EH 單元的 DO 位置位,可禁止 ALE 操作。該位置位后,只有一條 MOVX 和 MOVC 指令 ALE 才會(huì)被激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置 ALE 無(wú)效。PSEN:程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng) AT89C51 由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。在此期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,這兩次有效的PSEN信號(hào)不出現(xiàn)。
/EA/VPP:外部訪問(wèn)允許。欲使 CPU 僅訪問(wèn)外部程序存儲(chǔ)器(地址為 0000H—FFFFH),EA 端必須保持低電平(接地)。需注意的是:如果加密位 LB1 被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存 EA 端狀態(tài)。如 EA 端為高電平(接 VCC 端),CPU 則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。Flash 存儲(chǔ)器編程時(shí),該引腳加上+12V 的編程允許電源 Vpp,當(dāng)然這必須是該器件是使用 12V 編程電壓 Vpp。
XTAL1:振蕩器反相放大器的及內(nèi)部時(shí)鐘發(fā)生器的輸入端。
XTAL2:振蕩器反相放大器的輸出端。
時(shí)鐘振蕩器:AT89C5l 中有一個(gè)用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳 XTAL1 和 XTAL2 分別是該放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構(gòu)成自激振蕩器,振蕩電路參見(jiàn)圖3-3。外接石英晶體(或陶瓷諧振器)及電容 C1、C2 接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。對(duì)外接電容 C1、C2 雖然沒(méi)有十分嚴(yán)格的要求,但電容容量的大小會(huì)輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程序及溫度穩(wěn)定性,如果使用石英晶體,我們推薦電容使用 30pF±10pF,而如使用陶瓷諧振器建議選擇 40pF±10F。用戶也可以采用外部時(shí)鐘。采用外部時(shí)鐘的電路如圖 3-3所示。這種情況下,外部時(shí)鐘脈沖接到 XTAL1 端,即內(nèi)部時(shí)鐘發(fā)生器的輸入端,XTAL2 則懸空。
圖3-3 晶振電路
3.2數(shù)模轉(zhuǎn)換器件DAC0832
DAC0832是8分辨率的D/A轉(zhuǎn)換集成芯片。與微處理器完全兼容。這個(gè)DA芯片以其價(jià)格低廉、接口簡(jiǎn)單、轉(zhuǎn)換控制容易等優(yōu)點(diǎn),在單片機(jī)應(yīng)用系統(tǒng)中得到廣泛的應(yīng)用。D/A轉(zhuǎn)換器由8位輸入鎖存器、8位DAC寄存器、8位D/A轉(zhuǎn)換電路及轉(zhuǎn)換控制電路構(gòu)成。
圖3-4 DAC0832數(shù)模轉(zhuǎn)換器件
管腳說(shuō)明:
DI0~DI7:數(shù)據(jù)輸入線,TLL電平。
ILE:數(shù)據(jù)鎖存允許控制信號(hào)輸入線,高電平有效。
CS:片選信號(hào)輸入線,低電平有效。
WR1:為輸入寄存器的寫選通信號(hào)。
XFER:數(shù)據(jù)傳送控制信號(hào)輸入線,低電平有效。
WR2:為DAC寄存器寫選通輸入線。
Iout1:電流輸出線。當(dāng)輸入全為1時(shí)Iout1最大。
Iout2: 電流輸出線。其值與Iout1之和為一常數(shù)。
Rfb:反饋信號(hào)輸入線,芯片內(nèi)部有反饋電阻.
Vcc:電源輸入線 (+5v~+15v)
Vref:基準(zhǔn)電壓輸入線 (-10v~+10v)
AGND:模擬地,摸擬信號(hào)和基準(zhǔn)電源的參考地.
DGND:數(shù)字地,兩種地線在基準(zhǔn)電源處共地比較好.
圖3-5 DAC0832部分內(nèi)部結(jié)構(gòu)
D/A轉(zhuǎn)換器DAC0832是采用CMOS工藝制成的單片直流輸出型8位數(shù)/模轉(zhuǎn)換器。如圖3-6所示,它由倒T型R-2R電阻網(wǎng)絡(luò)、模擬開(kāi)關(guān)、運(yùn)算放大器和參考電壓VREF四大部分組成。運(yùn)算放大器輸出的模擬量V0為
(3-1)
由上式可見(jiàn),輸出的模擬量與輸入的數(shù)字量成正比,這就實(shí)現(xiàn)了從數(shù)字量到模擬量的轉(zhuǎn)換。 一個(gè)8位D/A轉(zhuǎn)換器有8個(gè)輸入端(其中每個(gè)輸入端是8位二進(jìn)制數(shù)的一位),有一個(gè)模擬輸出端。輸入可有28=256個(gè)不同的二進(jìn)制組態(tài),輸出為256個(gè)電壓之一,即輸出電壓不是整個(gè)電壓范圍內(nèi)任意值,而只能是256個(gè)可能值。
DAC0832的工作方式:
DAC0832引腳功能電路應(yīng)用原理圖DAC0832是采樣頻率為八位的D/A轉(zhuǎn)換芯片,集成電路內(nèi)有兩級(jí)輸入寄存器,使DAC0832芯片具備雙緩沖、單緩沖和直通三種輸入方式,以便適于各種電路的需要(如要求多路D/A異步輸入、同步轉(zhuǎn)換等)。D/A轉(zhuǎn)換結(jié)果采用電流形式輸出。若需要相應(yīng)的模擬電壓信號(hào),可通過(guò)一個(gè)高輸入阻抗的線性運(yùn)算放大器實(shí)現(xiàn)。運(yùn)放的反饋電阻可通過(guò)RFB端引用片內(nèi)固有電阻,也可外接。DAC0832邏輯輸入滿足TTL電平,可直接與TTL電路或微機(jī)電路連接。
根據(jù)對(duì)DAC0832的輸入鎖存器和DAC寄存器的不同的控制方式,DAC0832有三種工作方式:直通方式、單緩沖方式和雙緩沖方式。本方案采用單緩沖方式,即使DAC寄存器處于直通狀態(tài),輸入寄存器處于鎖存狀態(tài)。
放大電路:
放大電路由TL082雙運(yùn)算放大器組成,其特點(diǎn)有:較低的輸入偏置電壓和偏移電流;輸出設(shè)有短路保護(hù);輸入級(jí)具有較高的輸入阻抗;內(nèi)建頻率補(bǔ)償電路;較高的壓擺率。最大工作電壓:VCCmax=+18V。
TL082引腳功能如下表3-2:
表3-2 TL082引腳功能圖
腳號(hào) 腳名 功能 腳號(hào) 腳名 功能
1 Output 1 輸出1 5 Non-inverting input 2 反向輸入2
2 Inverting input 1 反向輸入1 6 Inverting input 2 正向輸入2
3 Non-inverting input 1 正向輸入2 7 Output 2 輸出2
4 VCC 電源 8 VCC+ 電源+
圖3-6 放大電路
DAC0832與反相比例放大器相連,實(shí)現(xiàn)電流到電壓的轉(zhuǎn)換,因此輸出模擬信號(hào)的極性與參考電壓的極性相反,數(shù)字量與模擬量的轉(zhuǎn)換關(guān)系為
(3-2)
若D/A轉(zhuǎn)換器輸出為雙極性,如圖3-6所示。運(yùn)算放大器B的作用是把運(yùn)算放大器A的單向輸出電壓轉(zhuǎn)換成雙向輸出電壓。其原理是將B的反向輸入端通過(guò)電阻R2與參考電壓VREF相連,VREF經(jīng)R2向B提供一個(gè)偏流I1,其電流方向與I2相反,因此運(yùn)算放大器B的輸入電流為I1、I2的代數(shù)和。則D/A轉(zhuǎn)換器的總輸出電壓為:
(3-3)
因R5= R6=2 R7,所以
(3-4)
3.3 顯示模塊 1602液晶器件
引腳功能:
表3-3 LM1602液晶顯示各引腳功能
編號(hào) 符號(hào) 引腳說(shuō)明 編號(hào) 符號(hào) 引腳說(shuō)明
1 VSS 電源地 9 D2 Date I/O
2 VDD 電源正極 10 D3 Date I/O
3 VL 液晶顯示偏壓信號(hào) 11 D4 Date I/O
4 R5 數(shù)據(jù)/命令選擇端 12 D5 Date I/O
5 R/W 讀/寫選擇端 13 D6 Date I/O
6 E 使能信號(hào) 14 D7 Date I/O
7 D0 Date I/O 15 BLA 背光源正極
8 D1 Date I/O 16 BLK 背光源負(fù)極
圖3-8顯示仿真
4. 軟件系統(tǒng)設(shè)計(jì)
本設(shè)計(jì)方案采用 C51程序語(yǔ)言編寫,整個(gè)程序包含主程序、延時(shí)、液晶顯示模塊、定時(shí)中斷、外部中斷及三種波形輸出函數(shù)組成。
4.1 主程序流程圖
主程序主要設(shè)置了D/A轉(zhuǎn)換器件DAC0832的工作模式,定義了DAC0832數(shù)據(jù)端口。調(diào)用了顯示初始子程序,設(shè)置了定時(shí)器工作模式及定時(shí)中斷和外部中斷。
4.2 定時(shí)中斷程序流程圖
否
是
否
是
圖4-2 定時(shí)器中斷子程序
定時(shí)中斷的作用是用來(lái)改變相應(yīng)波形的頻率,通過(guò)改變TH,TL的值就可以改變定時(shí)時(shí)間,從而改變相應(yīng)波形的頻率。Waveform的值代表不同的波形,Waveform=0代表正弦波,Waveform=1代表鋸齒波,Waveform=2代表方波,根據(jù)Waveform值調(diào)用對(duì)應(yīng)的波形輸出子程序。
4.3 外部中斷按鍵子程序流程圖
否
是 否
是
是
圖4-3按鍵外部中斷子程序
外部中斷是由按鍵引起的P3.2引腳下降沿觸發(fā)的,波形切換、頻率增減都是通過(guò)外部中斷和定時(shí)中斷相結(jié)合完成的,外部中斷程序中只是改變了相應(yīng)的參數(shù)或中間值(如波形形式waveform及相應(yīng)波形頻率wavefreq[waveform]和定時(shí)器0的定時(shí)初值寄存器的中間值T_temp)另外外部中斷程序還對(duì)波形的頻率做了數(shù)據(jù)處理并送到液晶屏顯示。
4.4 正弦波子程序流程圖
否
是
圖4-5正弦波子程序
正弦波主要是通過(guò)單片機(jī)向D/A轉(zhuǎn)換器DAC0832輸送8位二進(jìn)制數(shù)產(chǎn)生的,本方案選取的256個(gè)8位二進(jìn)制數(shù)存放在數(shù)組sine_tab[],中wavecount的作用就是抽點(diǎn)計(jì)數(shù)范圍是0~255,本方案中DAC0832工作在單緩沖狀態(tài),DAC寄存器處于直通狀態(tài),只要在相應(yīng)的時(shí)間打開(kāi)和關(guān)閉輸入寄存器就能完成數(shù)據(jù)輸送。
4.5 三角波子主程序流程圖
否
是
圖4-5 三角波子程序
三角波的產(chǎn)生方法以正弦波類似都是通過(guò)取點(diǎn)來(lái)產(chǎn)生的,本方案取了64個(gè)點(diǎn),全部存放在sawtooth_tab[Wavecount]中。
4.6 方波子程序流程圖
否
是
圖4-6 方波子程序
4.7 初始顯示子程序流程圖
圖4-7初始顯示子程序
5. 仿真
圖5.1液晶顯示圖
圖5.2鋸齒波
圖5.3方波
圖5.4正弦波
圖5.5 200Hz方波
系統(tǒng)可以改變頻率的大小,方波的頻率區(qū)間為200Hz至2000Hz,鋸齒波的頻率區(qū)間是10Hz至100Hz,正弦波的頻率區(qū)間為10Hz至100Hz,利用定時(shí)中斷并改變相應(yīng)的定時(shí)時(shí)間即可改變頻率的大小。
圖5.6 10Hz鋸齒波
圖5.4 20Hz鋸齒波
圖5.4 10Hz正弦波
結(jié) 論
通過(guò)半年的研究設(shè)計(jì)和調(diào)試,實(shí)現(xiàn)系統(tǒng)的正常工作并且基本上達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)這樣一個(gè)過(guò)程,使我學(xué)到了很多知識(shí),積累了許多寶貴的經(jīng)驗(yàn),鍛煉了自己的獨(dú)立思考能力和實(shí)際動(dòng)手能力,學(xué)會(huì)了如何綜合實(shí)施一個(gè)工程項(xiàng)目的研究與設(shè)計(jì)。
畢業(yè)論文課題是基于單片機(jī)控制函數(shù)信號(hào)發(fā)生器。在這次設(shè)計(jì)過(guò)程中我與邱寒同學(xué)共同完成此課題,由于我們專業(yè)知識(shí)不是很扎實(shí),我們遇到很多問(wèn)題,還好在涂緒堅(jiān)老師的多次指導(dǎo)下我們才能完成這次畢業(yè)論文。在這過(guò)程中我深刻體會(huì)到專業(yè)知識(shí)的欠缺和知識(shí)的重要性。
雖然本方案設(shè)計(jì)的系統(tǒng)基本上符合課題的要求但是還有一些不足之處如下
(1)鋸齒波的產(chǎn)生是根據(jù)數(shù)組表產(chǎn)生的而不是通過(guò)自增或者自減產(chǎn)生。
(2)正弦波的頻率不夠精準(zhǔn)誤差較大等等
致 謝
為此要感謝教研室的諸位老師四年來(lái)對(duì)我細(xì)心的培養(yǎng),教給了我專業(yè)知識(shí)為我們學(xué)生進(jìn)入社會(huì)打下堅(jiān)實(shí)的基礎(chǔ)。
做畢業(yè)設(shè)計(jì)的過(guò)程中老師給出了不少指導(dǎo)意見(jiàn),讓我少走了不少的彎路,比如說(shuō)在畫程序流程圖的時(shí)候,開(kāi)始我沒(méi)掌握正確的規(guī)律,后來(lái)在老師的指導(dǎo)下才順利的完成了。感謝這篇論文所涉及到的各位學(xué)者。本文引用了數(shù)位學(xué)者的研究文獻(xiàn),如果沒(méi)有各位學(xué)者的研究成果的幫助和啟發(fā),我將很難完成本篇論文的寫作。
感謝我的同學(xué)和朋友,在我寫論文的過(guò)程中給予我了很多你問(wèn)素材,還在論文的撰寫和排版等過(guò)程中提供熱情的幫助。
參考資料
[1]朱兆優(yōu)、陳堅(jiān)、王海濤、鄧文娟. 《單片機(jī)原理與應(yīng)用》. 電子工業(yè)出版社. 2010
[2]徐慧民 . 《微機(jī)原理與接口技術(shù)》 .高等教育出版社.2007
[3]余修武. 《單片機(jī)原理與應(yīng)用》. 電子科技大學(xué)出版社.2008
[4]劉文濤. 《單片機(jī)培訓(xùn)教程:(C51版)》.電子工業(yè)出版社.2005
[5]閻石 . 《數(shù)字電子技術(shù)基礎(chǔ)》.高等教育出版社.2009
[6]童詩(shī)白. 《模擬電子技術(shù)基礎(chǔ)》.高等教育出版社.2009
[7] AT89C51 DATA SHEEP Philips Semiconductors 1999.dec
[8]Yang. Y., Yi. J., Woo, Y.Y., and Kim. B.: ‘Optimum design for linearityand efficiency of microwave Doherty amplifier using a new loadmatching technique’, Microw. J., 2001, 44, (12), pp. 20–36
[9] Vizimuller, P.: ‘RF design guide-systems, circuits, and equations’ (ArtechHouse, Boston, MA, 1995)
附錄
附錄1:程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define DAdata P0
sbit DA_S1= P2^0;
sbit DA_S2= P2^1;
sbit key= P3^2;
uchar wavecount;
uchar THtemp,TLtemp;
uchar judge=1;
uchar waveform;
uchar code freq_unit[3]={10,50,200};
uchar idata wavefreq[3]={1,1,1};
uchar code lcd_hang1[]={"Sine Wave " "sawtooth Wave " "Square Wave " "Select Wave: " "press No.1 key! "};
uchar idata lcd_hang2[16]={"f= Hz "};
uchar code waveTH[]={
0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xf9,0xfc,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,
0xf6,0xfb,0xfd,0xfb,0xfe,0xff,0xff,0xff,0xff,0xff};
uchar code waveTL[]={
0x79,0x3d,0x7e,0x9e,0xbe,0xbf,0xc8,0xcf,0xd4,0xd9, //正弦波頻率調(diào)整中間值
0xe8,0xf4,0xf8,0x7a,0xc7,0xfc,0x23,0x3d,0x53,0x64, //鋸齒波頻率調(diào)整中間值
0x3c,0x1e,0x8f,0x32,0xc7,0x63,0xb1,0xd8,0xec,0xf6}; //方波頻率調(diào)整中間值
uchar code sawtooth_tab[]={
0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c,0x20,0x24,0x28,0x2c,0x30,0x34,0x38,0x3c,0x40,
0x44,0x48,0x4c,0x50,0x54,0x58,0x5c,0x60,0x64,0x68,0x6c,0x70,0x74,0x78,0x7c,
0x80,0x84,0x88,0x8c,0x90,0x94,0x98,0x9c,0xa0,0xa4,0xa8,0xac,0xb0,0xb4,0xb8,0xbc,0xc0,
0xc4,0xc8,0xcc,0xd0,0xd4,0xd8,0xdc,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,
};
uchar code sine_tab[256]={
0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,
0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,
0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,
0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,
0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,
0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,
0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,
0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,
0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,
0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};
void delay(uchar z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*void sawtooth_out()
{ uchar i;
for(i=255;i>0;i--)
{DAdata=i;
DA_S1=0;
DA_S1=1;
}
}*/
void sawtooth_out()
{
DAdata=sawtooth_tab[wavecount++];
if(wavecount>64) wavecount=0;
DA_S1=0;
DA_S1=1; }
void sine_out()
{
DAdata=sine_tab[wavecount++];
DA_S1=0;
DA_S1=1;
}
void square_out()
{
judge=~judge;
if(judge==1) DAdata=0xff;
else DAdata=0x00;
DA_S1=0;
DA_S1=1;
}
/************1602液晶的相關(guān)函數(shù)*************/
#define lcd_ports P1
sbit rs=P2^2;
sbit rw=P2^3;
sbit lcden=P2^4;
void write_com(uchar com)
{
rs=0; //置零,表示寫指令
lcden=0;
lcd_ports=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
rs=1; //置1,表示寫數(shù)據(jù)(在指令所指的地方寫數(shù)據(jù))
lcden=0;
lcd_ports=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void disp_lcd(uchar addr,uchar *temp1)
{
uchar num;
write_com(addr);
delay(1); //延時(shí)一會(huì)兒???
for(num=0;num<16;num++)
{
write_date(temp1[num]);//或者這樣寫write_date(*(temp1+num));
delay(1);
}
}
void init_lcd()
{
lcden=0;
rw=0; //初始化一定要設(shè)置為零,表示寫數(shù)據(jù)
write_com(0x38); //使液晶顯示點(diǎn)陣,為下面做準(zhǔn)備
write_com(0x0c); //初始設(shè)置
write_com(0x06); //初始設(shè)置
write_com(0x01); //清零
write_com(0x80); //使指針指向第一行第一格
disp_lcd(0x80,&lcd_hang1[3*16]); //在第一行顯示
disp_lcd(0xc0,&lcd_hang1[4*16]); //在第二行顯示
}
/********************1602液晶函數(shù)聲明結(jié)束*********************/
void main()
{
DA_S2=0;
DAdata=0;
DA_S1=1;
init_lcd();
waveform=0;
TMOD=0x01; //設(shè)置定時(shí)器0方式1為16位工作方式
IT0=1; //設(shè)置外部中斷0為下降沿觸發(fā)
ET0=1; //開(kāi)定時(shí)器中斷
EX0=1;
EA=1;
while(1)
{
}
}
void timer0() interrupt 1
{
TH0=THtemp;
TL0=TLtemp;
if(waveform==0) sine_out();
else if(waveform==1) sawtooth_out();
else if(waveform==2) square_out();
}
void key_int0() interrupt 0
{
uchar keytemp;
uint total_freq; //總頻率
EA=0; TR0=0; //關(guān)總中斷與定時(shí)器
delay(10); //延時(shí)夠嗎???
if(key==0) //確實(shí)有按鍵按下而引發(fā)中斷
{
keytemp=P3&0xf0; //獲取P3口高四位的值
switch(keytemp)
{
case 0xe0: //選擇波形
waveform++;
if(waveform>2) waveform=0;
break;
case 0xd0: //頻率按規(guī)定單位依次增加
wavefreq[waveform]++;
if(wavefreq[waveform]>10) wavefreq[waveform]=1; // /*這邊要用">10",因?yàn)樗?quot;=11"可靠
break; // 性更高,使加數(shù)有個(gè)上限,不會(huì)一直加下去*/
case 0xb0: //頻率按規(guī)定單位依次衰減
wavefreq[waveform]--;
if(wavefreq[waveform]<1) wavefreq[waveform]=10; //這邊要用"<1",因?yàn)樗?quot;=0"可靠性更高
break;
}
THtemp=waveTH[waveform*10+(wavefreq[waveform]-1)]; //方括號(hào)中選取第幾個(gè)數(shù)后,并把該值賦給T_temp
TLtemp=waveTL[waveform*10+(wavefreq[waveform]-1)];
total_freq= wavefreq[waveform] * freq_unit[waveform]; //求輸出頻率(個(gè)數(shù)*單位)
lcd_hang2[5]=total_freq%10+0x30; //在液晶中顯示個(gè)位,(0x30 在液晶顯示中表示數(shù)字0)
total_freq/=10; lcd_hang2[4]=total_freq%10+0x30; //在液晶中顯示時(shí)十位
total_freq/=10; lcd_hang2[3]=total_freq%10+0x30; //在液晶中顯示時(shí)百位
total_freq/=10; lcd_hang2[2]=total_freq%10+0x30; //在液晶中顯示時(shí)千位
disp_lcd(0x80,&lcd_hang1[waveform*16]); //在第一行顯示
disp_lcd(0xc0,lcd_hang2); //在第二行顯示
}
EA=1; TR0=1; //開(kāi)啟總中斷與定時(shí)器
}
附錄2:硬件原理圖
附錄3:仿真用圖
|
|