論文--信號發(fā)生器_第1頁
論文--信號發(fā)生器_第2頁
論文--信號發(fā)生器_第3頁
論文--信號發(fā)生器_第4頁
論文--信號發(fā)生器_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機系統(tǒng)實訓(xùn) (論文)說明書題 目: 信號發(fā)生器 院 (系): 信息與通信學(xué)院 專 業(yè): 電子信息工程 學(xué)生姓名: 蘇勇堅 學(xué) 號: 1101120424 指導(dǎo)教師: 符強 2012 年 12 月 31 日1摘 要本文以STC89C52單片機為核心設(shè)計了一個低頻函數(shù)信號發(fā)生器。信號發(fā)生器采用數(shù)字波形合成技術(shù),通過硬件電路和軟件程序相結(jié)合,DAC0832可輸出自定義波形,如正弦波、方波、三角波、三角波,波形的頻率和幅度在一定范圍內(nèi)可任意改變。波形和頻率的改變通過軟件控制,幅度的改變通過硬件與軟件實現(xiàn)。介紹了波形的生成原理、硬件電路和軟件部分的設(shè)計原理。本系統(tǒng)可以產(chǎn)生最高頻率20HZ的波形。該信

2、號發(fā)生器具有體積小、價格低、性能穩(wěn)定、功能齊全的優(yōu)點。關(guān)鍵詞: 低頻信號發(fā)生器;單片機STC89S52;D /A轉(zhuǎn)換;AbstractThis paper STC89C52 single-chip microcomputer as the core design a low frequency function signal generator. Signal generator with digital waveform synthesis technology, through the hardware circuit and software program, combining can

3、 output custom waveform, such as sine, square wave, triangle wave, triangle wave, wave frequency and amplitude in a certain range can be arbitrary change. Waveform and frequency change through the software control, amplitude change through the hardware and software realization. Introduces the wavefo

4、rm generation principle, hardware circuit and software part of the design principle. This system can produce the highest frequency and hz waveform. The signal generator has small volume, low price, stable performance, fully functional advantages.Key words: Low frequency signal generator; SCM STC89S5

5、2; D/A conversion;2目 錄緒論錯誤!未定義書簽。1 系統(tǒng)硬件介紹11.1 硬件主控芯片概述及功能介紹11.1.1主控芯片STC89S5211.1.2 STC89S52特性11.1.3 STC89S52參數(shù)11.2 硬件電路21.2.1STC89S52主控部分21.2.2LCD1602顯示部分31.2.3DAC0832模-數(shù)轉(zhuǎn)換部分42 系統(tǒng)軟件設(shè)計52.1細分程序的設(shè)計52.1.1主函數(shù)流程圖62.1.2主函數(shù)程序62.1.3按鍵程序流程圖82.1.4按鍵程序82.1.5顯示程序流程圖102.1.6顯示程序113 硬件制作與調(diào)試113.1 系統(tǒng)PCB板的設(shè)計113.2 系統(tǒng)硬

6、件調(diào)試123.3 軟件及聯(lián)機調(diào)試123.4 主控程序調(diào)試124 實訓(xùn)心得體會13謝 辭14參考文獻15附 錄1623緒論隨著電子的快速發(fā)展,人們所需要的測量儀器也越來越多,精度也要求越來越高,而波形發(fā)生器就是這些重要儀器中的一種,一下設(shè)計便是初步對波形發(fā)生器的了解所設(shè)計的,其目的是對波發(fā)生器有一定的了解。1 系統(tǒng)硬件介紹1.1硬件主控芯片概述及功能介紹STC89S52是基于一個低功耗、高性能CMOS8位微控制器,并帶有8kB的嵌入的高速Flash 存儲器。128 位寬度的存儲器接口和獨特的加速結(jié)構(gòu)使8 位代碼能夠在最大時鐘速率下運行。 1.1.1主控芯片STC89S52STC89S52是一種低

7、功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標準功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,2個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口。另外 STC89C52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)

8、工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止。最高運作頻率35MHz,6T/12T可選。1.1.2 STC89S52特性8K字節(jié)程序存儲空間,512字節(jié)數(shù)據(jù)存儲空間,內(nèi)帶2K字節(jié)EEPROM存儲空間,可直接使用串口下載。1.1.3 STC89S52參數(shù)1. 增強型8051 單片機,6 時鐘/機器周期和12 時鐘/機器周期可以任意 選擇,指令代碼完全兼容傳統(tǒng)8051.1。2. 工作電壓:5.5V3.3V(5V 單片機)/3.8V2.0V(3V 單片機)。3. 工作頻率范圍:040MHz,相當于普通8051 的

9、080MHz,實際工作 頻率可達48MHz。4. 用戶應(yīng)用程序空間為8K 字節(jié)。5. 片上集成512 字節(jié)RAM。6. 通用I/O 口(32 個),復(fù)位后為:P0/P1/P2/P3 是準雙向口/弱上拉, P0 口是漏極開路輸出,作為總線擴展用時,不用加上拉電阻,作為 I/O 口用時,需加上拉電阻。7. ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器,無 需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序,數(shù)秒即可完成一片。8. 具有EEPROM 功能。9. 具有看門狗功能。10. 共3 個16 位定時器/計數(shù)器。即定時器T0、T1、T2。

10、11. 外部中斷4 路,下降沿中斷或低電平觸發(fā)電路,Power Down 模式可 由外部中斷低電平觸發(fā)中斷方式喚醒。12. 通用異步串行口(UART),還可用定時器軟件實現(xiàn)多個UART。13. 工作溫度范圍:-40+85(工業(yè)級)/075(商業(yè)級)。14. PDIP 封裝。1.2 硬件電路1.2.1 STC89S52主控部分以STC89S52為主控組成的單片機最小系統(tǒng),主要有幾部分組成,如圖1.2.1.1所示,由S0、C3、R1組成的單片機復(fù)位電路;由C1、C2、Y1組成的單片機頻率輸入部分,其中C1、C2為諧振電容,20PF30PF均可,Y1為12MHZ晶振;J6組成單片

11、機下載口,J1為單片機P0口的10K上拉電阻,其中P0口為液晶LCD1602的數(shù)據(jù)接口;P1為DAC0832數(shù)據(jù)接口;P32、P33為按鍵以及LCD1602控制接口。 圖1.2.1.1 單片機主控部分1.2.2LCD1602顯示部分 顯示部分主要由LCD1602來顯示,如圖1.2.2.1,1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形,但用它來顯示字符與數(shù)字完全足

12、夠了,而且操作簡單方便,PCB布線也簡單,有較好的顯示效果,所以這里用它來做顯示部分。圖1.2.2.1 顯示部分1.2.3DAC0832模-數(shù)轉(zhuǎn)換部分由于單片機產(chǎn)生的是數(shù)字信號,要想得到所需要的波形,就要把數(shù)字信號轉(zhuǎn)換成模擬信號,所以該文選用價格低廉、接口簡單、轉(zhuǎn)換控制容易并具有8位分辨率的數(shù)模轉(zhuǎn)換器DAC0832。DAC0832主要由8位輸入寄存器、8位DAC寄存器、8位D/A轉(zhuǎn)換器以及輸入控制電路四部分組成。但實際上,DAC0832輸出的電量也不是真正能連續(xù)可調(diào),而是以其絕對分辨率為單位增減,是準模擬量的輸出。DAC0832是電流型輸出,在應(yīng)用時外接運放使之成為電壓型輸出。根據(jù)對DAC08

13、32的數(shù)據(jù)鎖存器和DAC寄存器的不同的控制方式,DAC0832有三種工作方式:直通方式、單緩沖方式和雙緩沖方式。本設(shè)計選用直通方式。DAC0832的數(shù)據(jù)口和單片機的P1口相連。CSDA:片選信號輸入線(選通數(shù)據(jù)鎖存器),低電平有效;WR:數(shù)據(jù)鎖存器寫選通輸入線,負脈沖(脈寬應(yīng)大于500ns)有效。由ILE、CS、WR1的邏輯組合產(chǎn)生LE1,當LE1為高電平時,數(shù)據(jù)鎖存器狀態(tài)隨輸入數(shù)據(jù)線變換,LE1的負跳變時將輸入數(shù)據(jù)鎖存。模-數(shù)轉(zhuǎn)換部分如圖1.2.3.1所示。圖1.2.2.1 模-數(shù)轉(zhuǎn)換部分LM324的3管腳與DAC0832的(IOUT2)12管腳相連,LM324的2管腳與DAC0832的(I

14、OUT1)11管腳相連,LM324的1管腳與DAC0832的REF(9)管腳相連.第一級運算放大器的作用是將DAC0832輸出的電流信號轉(zhuǎn)化為電壓信號V1,第二級運算放大器的作用是將V1通過反向放大電路-(R4/R3)倍。本次試驗設(shè)計的輸出電壓在0-5V可調(diào),而V1的電壓大約是5V,所以R1選擇10K的電阻,R2選擇20K的電位器,這樣最大的輸出電壓為2*(10/2)=10,最小電壓為0。在第二個運算放大器的輸出端連了一個低通濾波器。如果不加低通濾波器,也能夠生成波形,但是產(chǎn)生的信號中毛刺很多,加一個低通濾波器不僅起到的濾波的作用,還起到了平滑的作用。低通濾波器的截止頻率F=1/(2*pi*R

15、3*C6),這里我們選擇R5 為100歐姆電阻,C4為104電容,截止頻率F=16KHZ。實驗表明,此時的輸出波形效果相對較好。2 系統(tǒng)軟件設(shè)計本系統(tǒng)的主要硬件是DAC0832模-數(shù)轉(zhuǎn)換電路,以及LCD1602顯示電路。軟件部分主函數(shù)中主要是掃描按鍵以及顯示,利用定時器中斷對DAC0832進行送數(shù)據(jù)讓其進行模-數(shù)轉(zhuǎn)換,外部中斷0與1主要是用來對頻率、波形選擇的調(diào)節(jié)。2.1 細分程序的設(shè)計2.1.1主函數(shù)流程圖 2.1.2主函數(shù)程序/* * 名稱 : main() * 功能 : 主函數(shù) * 輸入 : 無 * 輸出 : 無 */void main() lcd_dis(); disgeshibai(

16、 ); TMOD=0X01; IT0=1; IT1=1; EA=1; EX0=1; EX1=1; ET0=1; IP=0X05; TR0=1;while(1) ;2.1.3按鍵程序流程圖 2.1.4按鍵程序/* * 名稱 : void int0() interrupt 0 * 功能 : 鍵盤掃描函數(shù) * 輸入 : 無 * 輸出 : 無 */void it1() interrupt 2if(key3=0)delay(10); if(key3=0) cho=cho+1; if(cho>=3) cho=0; boxingxshi(); while(key3=0); /等待 void it0()

17、 interrupt 0/以下為K2鍵判斷 * if(key2=0) delay(10); if(key2=0) z=z+1; if(z>=65535) z=3; disgeshibai( ); while(key2=0);/等待 TIME0_H=(0xffff-z)/256; TIME0_L=(0xffff-z)%256;/定時器中斷處理程序。 void intt0() interrupt 1TH0=TIME0_H;TL0=TIME0_L; switch(cho) case 0: P1=sinb; /調(diào)SIN正弦波碼表 b+;if(b=128)b=0;break; /正弦波 case

18、1: P1=d; if(m)d=d+4;if(d>=256)m=0; if(!m)d=d-4;if(d<=0)m=1;break; /三角波 case 2: e+;if(e<=v) P1=0xff; else P1=0x00; if(e=128)e=0;break; / 方波 2.1.5顯示程序流程圖 3 硬件制作與調(diào)試3.1 系統(tǒng)PCB板的設(shè)計PCB即印刷電路板,是電子電路的承載體。在現(xiàn)代電子產(chǎn)品中,幾乎都要使用PCB。PCB板的設(shè)計是電路設(shè)計的最后一個環(huán)節(jié),也是對原理電路的再設(shè)計。因此PCB板的設(shè)計是理論設(shè)計到實際應(yīng)用一個十分重要的內(nèi)容。印制電路板(PCB)是電子產(chǎn)品中電

19、路元件和器件的支撐件它提供電路元件和器件之間的電氣連接。PCB設(shè)計的好壞對抗干擾能力影響很大因此,在進行PCB設(shè)計時必須遵守印制電路板設(shè)計原則和抗干擾措施的一般原則,并應(yīng)符合抗干擾設(shè)計的要求。本次設(shè)計采用Altium公司PROTEL系列設(shè)計完成SCH到PCB的設(shè)計,并且手工完成電路焊接以及整機的裝配。3.2 系統(tǒng)硬件調(diào)試本系統(tǒng)的硬件調(diào)試分為以下階段進行調(diào)試: (1)邏輯錯誤調(diào)試樣機硬件的邏輯錯誤是由于設(shè)計錯誤和加工過程中的工藝性錯誤所造成的。這類錯誤包括:錯線、開路、短路等幾種,其中短路是最常見的故障。(2)器件調(diào)試元器件失效的原因有兩個方面:一是器件本身已損壞或性能不符合要求;二是由于組裝錯

20、誤造成的元器件失效,如電解電容、二極管的極性錯誤,集成塊安裝方向錯誤等。(3)可靠性調(diào)試引起系統(tǒng)不可靠的因素很多,如金屬化孔、接插件接觸不良會造成系統(tǒng)時好時壞;內(nèi)部和外部的干擾、電源紋波系數(shù)過大、器件負載過大等造成邏輯電平不穩(wěn)定;另外,走線和布局的不合理等也會引起系統(tǒng)可靠性差。3.3 軟件及聯(lián)機調(diào)試 Keil 4是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Window

21、s界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。Keil 4件是一個基于32位Windows環(huán)境的應(yīng)用程序,支持C語言和匯編語言編程,其6.0以上的版本將編譯和仿真軟件統(tǒng)一為Vision(通常稱為V2)。Keil提供包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案, 3.4 主控程序調(diào)試應(yīng)用Keil進行軟件仿真開發(fā)的主要步驟為:編寫源程序并保存建立工程并添加源文件設(shè)置工程編譯/匯編、連接,產(chǎn)生目標文件程序調(diào)試。成功編譯/

22、匯編、連接后,選擇菜單Debug-Start/Stop Debug Session(或按Ctrl+F5鍵)進入程序調(diào)試狀態(tài),Keil提供對程序的模擬調(diào)試功能,內(nèi)建一個功能強大的仿真CPU以模擬執(zhí)行程序。Keil能以單步執(zhí)行(按F11或選擇Debug-Step)、過程單步執(zhí)行(按F10或選擇Debug-Step Over)、全速執(zhí)行等多種運行方式進行程序調(diào)試。如果發(fā)現(xiàn)程序有錯,可采用在線匯編功能對程序進行在線修改(Debug-Inline Assambly),不必執(zhí)行先退出調(diào)試環(huán)境、修改源程序、對工程重新進行編譯/匯編和連接、然后再次進入調(diào)試狀態(tài)的步驟。對于一些必須滿足一定條件(如按鍵被按下等)

23、才能被執(zhí)行的、難以用單步執(zhí)行方式進行調(diào)試的程序行,可采用斷點設(shè)置的方法處理(Debug-Insert/Remove Breakpoint或Debug-Breakpoints等)。在模擬調(diào)試程序后,還須通過編程器將.hex目標文件燒寫入單片機中才能觀察目標樣機真實的運行狀況。4 實訓(xùn)心得體會通過這次單片機實訓(xùn),我感覺收獲良多,對單片機的了解、編程和protel繪制電路圖等各個方面的能力有了進一步的提高,把課本上的知識應(yīng)用到實踐,整個過程受益匪淺。實訓(xùn)開始在硬件系統(tǒng)的設(shè)計時,初步設(shè)計包括顯示部分,按鍵部分,主控部分,模數(shù)轉(zhuǎn)換部分,因為在大專的時候有過做板的經(jīng)驗,所以整體來說硬件沒有什么大的調(diào)試,就

24、是在轉(zhuǎn)印過程中,墨太少,則轉(zhuǎn)印到銅板上就顯得很少了,后來用油性筆補上就可以了。但是在載程序進去調(diào)試的時候還是發(fā)現(xiàn)有些線路出現(xiàn)了問題,下載程序的時候按按鍵時LCD字幕顯示亂碼,后來經(jīng)查發(fā)現(xiàn)是因為有個單片機的管腳短接焊在一起了,重新焊接后故障排除了。在軟件系統(tǒng)的設(shè)計上,確實花了很大的功夫,首先考慮到利用外部中斷0與1對頻率與幅度進行調(diào)節(jié),在優(yōu)先等級上這兩個中斷都應(yīng)該較高,所以這里選擇定時器1中斷來進行時間軸上的建立,開始調(diào)程序的時候沒注意到定時器1和外部中斷的優(yōu)先級關(guān)系,導(dǎo)致了P33按鍵無法使用,最后經(jīng)過同學(xué)的幫忙才把這問題解決;其次當其中定時器進行DAC0832模數(shù)轉(zhuǎn)換時,按鍵進行波形轉(zhuǎn)換以及頻

25、率與幅度調(diào)節(jié)時,顯示字符很久才顯示出一個字符出來,后來通過仔細思考以及同學(xué)的提點,想到了是由定時器中斷引起的,每過一段時間中斷一次,打亂了顯示的讀數(shù)據(jù)的時序,所以才會很久才顯示出來,后來每次按鍵讓其顯示字符時,在顯示之前先把定時器中斷關(guān)掉,然后顯示完所需的字符后再打開定時器中斷,經(jīng)過實踐驗證,我的想法是正確的,存在的問題也引刃而解;再次,顯示頻率時算法出現(xiàn)了問題,浮點數(shù)進行乘除時,那個數(shù)也必須是浮點數(shù)才能得出所需的值,調(diào)節(jié)頻率時,頻率顯示錯亂了,第一次顯示頻率正確,但是調(diào)節(jié)時頻率顯示就有誤了,我是調(diào)節(jié)定時器初值來進行頻率調(diào)節(jié)的,后來經(jīng)過同學(xué)的提醒,其實可以反過來想,也就是說對頻率進行加減調(diào)節(jié),

26、然后通過轉(zhuǎn)換函數(shù)把頻率轉(zhuǎn)換成定時器初值,然后再去執(zhí)行,這樣無論調(diào)節(jié)度還是精確度都有了一定的提高;最后是輸出的頻率很低,只有20多HZ,經(jīng)過仔細排查原因,問題出來幅度調(diào)節(jié)那里,因為每次給數(shù)據(jù)之前都要進行一次乘除運算,增加了CPU的負擔同時大大延遲了CPU送出數(shù)據(jù)的時間,所以頻率就會很低,后來想到其實可以通過控制電子開關(guān)去選擇運放的反饋電阻進行幅度調(diào)節(jié),這樣大大提高了CPU的利用率,但是硬件方面卻要復(fù)雜一點,但是后來由于時間問題,也沒時間再去修改硬件了。這次實訓(xùn)自己所設(shè)計的的不完美,由于時間的關(guān)系,另外一個關(guān)系就是自己對單片機方面的知識也欠缺,導(dǎo)致很多功能還未完全弄清楚,尤其是頻率轉(zhuǎn)換方面還沒弄好

27、,如果時間可以充裕,相信自己可以慢慢弄清楚。謝 辭學(xué)期期末的實訓(xùn)就快結(jié)束了,在實訓(xùn)的過程中,雖然很忙,有苦也有甜,但是對于我來說,能從中學(xué)到東西是這次實訓(xùn)最大的成功。首先,感謝信息與通信學(xué)院為我們電子信息工程學(xué)生提供了一次實訓(xùn)學(xué)習(xí)的平臺。通過這次實訓(xùn),我對電子設(shè)計的認識有了進一步的了解,同時也認識到自己在硬件和軟件方面的缺陷。主要表現(xiàn)在對很多原理知識掌握的不是很清楚,對硬件設(shè)計的正確方法掌握不多,造成了很多的重復(fù)性工作,特別是在系統(tǒng)設(shè)計的過程中,從方案的對比到方案確定、芯片元件的選擇、程序代碼的編寫、最后的仿真等等,都存在一定程度上的不足。在硬件方面,學(xué)院提供了很好的實訓(xùn)平臺,并且為學(xué)生免費提

28、供大量需使用的電子元件,為能夠成功完成這次實訓(xùn)創(chuàng)造了很好的條件。還要感謝老師,為學(xué)生提供幫助,同時也要感謝實訓(xùn)期間為我提供幫助的同學(xué),正是因為在我有些程序調(diào)試方面不懂的時候,他們能不吝賜教,讓我獲益良多,使我順利的完成了每次實驗課程以及這次的實訓(xùn)。 參考文獻1 郭天祥.新概念51單片機C語言教程 入門、提高、開發(fā)、拓展全.北京.電子工業(yè)出版社 2009.12 楊栓科.模擬電路技術(shù)基礎(chǔ).西安交通大學(xué)電子學(xué)教研組 編.高等教育出版社 2003.13 張志良  主編 :單片機原理及控制技術(shù)(第2版) 北京:機械工業(yè)出版社,20054 張毅剛 主編 :單片機原理及應(yīng)用.北

29、京:高等教育出版社,20065 黃仁欣 主編 :單片機原理及應(yīng)用技術(shù).北京:清華大學(xué)出版社,20076 馮育長 主編 :單片機系統(tǒng)設(shè)計與實例分析.西安:西安電子科技大學(xué)出版社,20077 梅開鄉(xiāng) 主編 :數(shù)字邏輯電路(第2版)北京:電子工業(yè)出版社,20058 吉 雷 主編 :Protel99從入門到精通西安:西安電子科技大學(xué)出版社,2004 附錄 圖1 PCB圖圖2仿真圖圖3正弦波實驗圖圖4三角波實驗圖圖5 LCD顯示方波圖5 LCD顯示三角波總程序:/*主程序:#include<at89x51.h>#include<sinx.h>#include&

30、lt;0832.h>#include<intrins.h>void main() lcd_dis(); disgeshibai( ); TMOD=0X01; IT0=1; /設(shè)置中斷觸發(fā)方式,下降沿 IT1=1; EA=1; EX0=1;/開外部中斷0 EX1=1;/開外部中斷1 ET0=1; IP=0X05; /按鍵中斷級別高 TR0=1;while(1) ;/*O832.H處理頭文件程序#ifndef _0832_h_#define _0832_h_TIME0_H=0xff,TIME0_L=0xd9;unsigned char cho=0; sbit key3=P33;

31、sbit key2=P32;sbit RW=P26; /LCD控制sbit E=P27; /LCD使能信號sbit RS=P25; /LCD數(shù)據(jù)/命令選擇信號#define uchar unsigned char#define uint unsigned int#define uint unsigned intuchar code tab_L1312="sin_wave","tri_wave","squ_wave"uchar code tab_L212="Fre:00000Hz"uchar code table=&

32、quot;0123456789"j;n;y=0;b=0,d=0,e=0;uint z=3; v=64;m=1;fre; /*函數(shù)聲明區(qū)*void lcd_dis(); /lcd顯示函數(shù)void lcd_init(); /LCD初始化函數(shù)void write_com(uchar); /寫命令函數(shù)void write_data(uchar); /寫數(shù)據(jù)函數(shù)void delay(uchar); /延時函數(shù)void disgeshibai(void);void delayxh(void);void xinhaofasheng(void);/*void disgeshibai(void) wr

33、ite_com(0x80+0x49); write_data(table1000000/(z+2)*128)/100%10);/計算千位頻率 write_com(0x80+0x48); write_data(table1000000/(z+2)*128)/1000); /計算百位頻率 write_com(0x80+0x4A); write_data(table1000000/(z+2)*128)/10%10); /計算十位頻率 write_com(0x80+0x4B); write_data(table1000000/(z+2)*128)%10); /計算個位頻率 /*lcd顯示函數(shù)開始*vo

34、id lcd_dis()uchar n; lcd_init();write_com(1);write_com(0x80+4); /設(shè)置光標位置for(n=0;n<9;n+) /顯示第二排字符write_data(tab_L10n);delay(2);write_com(0x80+0x43); / 設(shè)置光標位置for(n=0;n<12;n+) /顯示第一排字符write_data(tab_L2n);delay(2); /*LCD初始化函數(shù)開始*void lcd_init()RW=0; E=0;/ 關(guān)閉液晶顯示write_com(0x38); /設(shè)置顯示模式:16X2,5X7,8位數(shù)據(jù)

35、接口write_com(0x0c); /開顯示,不顯示光標,光標不閃爍write_com(0x06); /地址指針及光標加一,且光標加一整屏顯示不移動write_com(0x80); /設(shè)置光標指針/*寫命令函數(shù)開始*void write_com(uchar com)RS=0; /低電平寫命令P0=com; /寫入delay(10); /延時約1msE=1; /LCD使能端置高電平delay(10); /延時約1msE=0; /LCD使能端拉低電平/*寫數(shù)據(jù)函數(shù)開始*void write_data(uchar dat)RS=1; /低電平寫數(shù)據(jù)P0=dat; /寫入命令delay(10); /

36、延時約1msE=1; /LCD使能端置高電平delay(10); /延時約1msE=0; /LCD使能端拉低電平/*延時函數(shù)開始*void delay(uchar k)uint i,j;for(i=k;i>0;i-)for(j=100;j>0;j-);void boxingxshi() switch(cho) /顯示不同波形 case 0:write_com(0x80+4); /設(shè)置光標位置 for(n=0;n<3;n+) /正弦波顯示 write_data(tab_L10n);break; case 1:write_com(0x80+4); /設(shè)置光標位置 for(n=0;

37、n<3;n+) /三角波顯示 write_data(tab_L11n);break; default:write_com(0x80+4); /設(shè)置光標位置 for(n=0;n<3;n+) /方波顯示 write_data(tab_L12n);break; /按鍵中斷處理程序。void it1() interrupt 2if(key3=0)delay(10); if(key3=0) cho=cho+1; if(cho>=3) cho=0; boxingxshi(); while(key3=0); /等待 void it0() interrupt 0 if(key2=0) del

38、ay(10); if(key2=0) z=z+1; if(z>=65535) z=10; disgeshibai( ); while(key2=0);/等待 TIME0_H=(0xffff-z)/256; TIME0_L=(0xffff-z)%256;/定時器中斷處理程序。 void intt0() interrupt 1TH0=TIME0_H;TL0=TIME0_L; switch(cho) case 0: P1=sinb; /調(diào)SIN正弦波碼表 b+;if(b=128)b=0;break; /正弦波 case 1: P1=d; if(m)d=d+4;if(d>=256)m=0;

39、 if(!m)d=d-4;if(d<=0)m=1;break; /三角波 case 2: e+;if(e<=v) P1=0xff; else P1=0x00; if(e=128)e=0;break; / 方波 /*SIN.H正弦函數(shù)碼表/正弦表;每半個周期256個取值,最大限度保證波形不失真。/各個值通過MATLAB算出,并四設(shè)五如取整。具體程序如下#ifndef _sinx_h_#define _sinx_h_unsigned char code sin128= 0x7F,0x85,0x8B,0x92,0x98,0x9E,0xA4,0xAA,0xB0,0xB6,0xBB,0xC1

40、,0xC6,0xCB,0xD0,0xD5,0xD9,0xDD,0xE2,0xE5,0xE9,0xEC,0xEF,0xF2,0xF5,0xF7,0xF9,0xFB,0xFC,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFC,0xFB,0xF9,0xF7,0xF5,0xF2,0xEF,0xEC,0xE9,0xE5,0xE2,0xDD,0xD9,0xD5,0xD0,0xCB,0xC6,0xC1,0xBB,0xB6,0xB0,0xAA,0xA4,0x9E,0x98,0x92,0x8B,0x85,0x7F,0x79,0x73,0x6C,0x66,0x60,0x5A,0x54,0x4E,0x48,0x43,0x3D,0x38,0x33,0x2E,0x29,0x25,0x21,0x1

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論