單片機(jī)課程設(shè)計(jì)——波形發(fā)生器_第1頁
單片機(jī)課程設(shè)計(jì)——波形發(fā)生器_第2頁
單片機(jī)課程設(shè)計(jì)——波形發(fā)生器_第3頁
單片機(jī)課程設(shè)計(jì)——波形發(fā)生器_第4頁
單片機(jī)課程設(shè)計(jì)——波形發(fā)生器_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 單片機(jī)課程設(shè)計(jì)報(bào)告煙臺大學(xué)題 目 波形發(fā)生器 專 業(yè) 機(jī)械設(shè)計(jì)制造及其自動化 班 級 機(jī)1014 學(xué)生姓名 同組人員 學(xué) 號 指導(dǎo)老師:姜風(fēng)國機(jī)電汽車工程學(xué)院2013年 6 月 6 日目錄一、設(shè)計(jì)目的1二、設(shè)計(jì)的主要內(nèi)容和要求11.1基本內(nèi)容和要求1三、整體設(shè)計(jì)思路13.1設(shè)計(jì)思路13.2元件選型23.3功能原理圖2四、方案論證2五、硬件電路設(shè)計(jì)35.1 電路連線圖35.2主要芯片介紹4六、軟件設(shè)計(jì)76.1正弦波的產(chǎn)生過程76.2鋸齒波的產(chǎn)生過程76.3三角波的產(chǎn)生過程76.4通過開關(guān)實(shí)現(xiàn)波形切換和調(diào)頻7七、調(diào)試與仿真76.1正弦波的仿真結(jié)果76.2鋸齒波的仿真結(jié)果86.3三角波的仿真結(jié)果8

2、八、總結(jié)9九、參考文獻(xiàn)9附錄10附錄一:硬件圖10附錄二:流程圖11附錄三:程序清單12波形發(fā)生器一、設(shè)計(jì)目的(1)利用所學(xué)單片機(jī)機(jī)的理論知識進(jìn)行軟硬件整體設(shè)計(jì),鍛煉學(xué)生理論聯(lián)系實(shí)際、提高我們的綜合應(yīng)用能力。 (2)我們這次的課程設(shè)計(jì)是以單片機(jī)為基礎(chǔ),設(shè)計(jì)并開發(fā)能輸出多種波形(正弦波、三角波、鋸齒波等)且頻率、幅度可變的波形發(fā)生器。 (3)掌握各個(gè)接口芯片(如0832等)的功能特性及接口方法,并能運(yùn)用其實(shí)現(xiàn)一個(gè)簡單的單片機(jī)應(yīng)用系統(tǒng)功能器件。 (4)在平時(shí)的學(xué)習(xí)中,我們所學(xué)的知識大都是課本上的,在機(jī)房的練習(xí)大家也都是分散的對各個(gè)章節(jié)的內(nèi)容進(jìn)行練習(xí)。因此,缺乏一種系統(tǒng)的設(shè)計(jì)鍛煉。在課程所學(xué)結(jié)束以后

3、,這樣的課程設(shè)計(jì)十分有助于學(xué)生的知識系統(tǒng)的總結(jié)到一起。 (5)通過這幾個(gè)波形進(jìn)行組合形成了一個(gè)波形發(fā)生器,使得我對系統(tǒng)的整個(gè)框架的設(shè)計(jì)有了一個(gè)很好的鍛煉。這不僅有助于大家找到自己感興趣的題目,更可以鍛煉大家單片機(jī)知識的應(yīng)用。二、設(shè)計(jì)的主要內(nèi)容和要求1.1基本內(nèi)容和要求(1)設(shè)計(jì)一款能夠產(chǎn)生3種波形的波形發(fā)生器;(2)設(shè)計(jì)波形選擇按鈕;(3)LED或LCD顯示波形代號;(4)其他功能(創(chuàng)新部分)。(5)波形頻率調(diào)節(jié);(6)波形幅值調(diào)節(jié);三、整體設(shè)計(jì)思路3.1設(shè)計(jì)思路1、課設(shè)需要各個(gè)波形的基本輸出。如輸出正弦波、鋸齒波、三角波。這些波形的實(shí)現(xiàn)的具體步驟:(1)正弦波:通過手動的方法計(jì)算出輸出各點(diǎn)的

4、電壓值,然后在編寫程序時(shí)以數(shù)組的方式給出。當(dāng)需要時(shí),只要按照順序進(jìn)行輸出即可。這種方法比在軟件中計(jì)算速度快且曲線的形狀修改靈活。在本設(shè)計(jì)中將一個(gè)周期(360度)分為256個(gè)點(diǎn),則每兩個(gè)點(diǎn)之間的間隔為1.4度,然后計(jì)算出每個(gè)點(diǎn)電壓對應(yīng)的數(shù)字量,形成數(shù)組。只要反復(fù)輸出這組數(shù)據(jù)到DAC0832,就可以在系統(tǒng)輸出端得到想要的正弦波。(2)鋸齒波:也使用查表法。將三角波的一個(gè)周期(360度)分為256個(gè)點(diǎn),相鄰點(diǎn)等差,生成數(shù)組。反復(fù)輸出前128個(gè)數(shù)據(jù)到DAC0832,就可以在系統(tǒng)輸出端得到想要的鋸齒波。(3)三角波:將(3)中的數(shù)組256個(gè)數(shù)據(jù)全部輸出到DAC0832,循環(huán),就可以在系統(tǒng)輸出端得到想要的

5、三角波。2、通過P1口和輕觸開關(guān)S1-S4相連接來切換波形輸出(如按S1鍵輸出正弦波,按S2鍵產(chǎn)生方波,按S3鍵產(chǎn)生鋸齒波,按S4鍵產(chǎn)生三角波)。用P0口控制數(shù)碼管靜態(tài)顯示波形代號。用P2口向DAC0832發(fā)送數(shù)據(jù),經(jīng)DAC0832轉(zhuǎn)換后,再把信號放大,最后接到示波器上顯示。3.2元件選型單片機(jī)AT89C51系統(tǒng),DAC0832一片,PC機(jī)一臺,運(yùn)算放大器。3.3功能原理圖運(yùn) 放 AT89C51 DAC0832 P0 按鍵 P1 LCD 1602 P2 P3四、方案論證任務(wù)要求實(shí)現(xiàn)波發(fā)生器產(chǎn)生正弦波、鋸齒波、三角波,由于正弦波的存在,采用單片機(jī)直接運(yùn)算是不合理的,故采取按時(shí)將存儲的數(shù)字量送出的

6、方法實(shí)現(xiàn);為簡化編程,鋸齒波與三角波也采取按時(shí)送數(shù)字量的方式實(shí)現(xiàn)。將一個(gè)周期分為256份,幅值0至255,取數(shù)據(jù)后分別存入數(shù)組。利用定時(shí)器中斷函數(shù)實(shí)現(xiàn)數(shù)據(jù)按時(shí)送出,改變定時(shí)器的初值設(shè)置即可改變頻率。送出的數(shù)據(jù)由指針循環(huán)指向相應(yīng)數(shù)組的值,改變指針的地址,指向不同的數(shù)組首地址即可改變波形。幅值的改變由DAC的參考電壓和反饋電阻改變。采用AT89C51單片機(jī)和DAC0832芯片,直接連接鍵盤和顯示。該種方案主要對AT89C51單片機(jī)的各個(gè)I/O口充分利用。 P3口是連接鍵盤, P2口接顯示電路,P0口連接DAC0832輸出波形。這樣總體來說,能對單片機(jī)各個(gè)接口都利用上,而不在多用其它芯片,從而減小了

7、系統(tǒng)的成本。也對按照系統(tǒng)便攜式低頻信號發(fā)生器的要求所完成。占用空間小,使用芯片少,低功耗。五、硬件電路設(shè)計(jì)5.1 電路連線圖通過P1.0-P1.5口和輕觸開關(guān)相連接來切換波形輸出(如按S1鍵輸出鋸齒波,按S2鍵產(chǎn)生三角波,按S3鍵產(chǎn)生正弦波),P1.4、P1.5接波形頻率調(diào)節(jié)開關(guān),如圖所示。用P0口控制數(shù)碼管靜態(tài)顯示波形代號,如圖所示。用P0口向DAC0832發(fā)送數(shù)據(jù),經(jīng)DAC0832轉(zhuǎn)換后,再把信號放大,最后接到示波器上顯示如圖所示。 圖1 總電路圖5.2主要芯片介紹(1)51單片機(jī)的內(nèi)部結(jié)構(gòu)基本組成部分:1 一個(gè)8位的CPU2 128B或256B單元內(nèi)數(shù)據(jù)存儲器(RAM)3 4KB或8KB

8、片內(nèi)程序存儲器(ROM或EPROM)4 4個(gè)8位并行I/O接口P0P3。5 兩個(gè)定時(shí)/計(jì)數(shù)器。6 5個(gè)中斷源的中斷管理控制系統(tǒng)。7 一個(gè)全雙工串行I/O口UART(通用異步接收、發(fā)送器) 8 一個(gè)片內(nèi)振蕩器和時(shí)鐘產(chǎn)生電路。圖7 51單片機(jī)引腳管腳說明:VCC:供電電壓。 GND:接地。 P0口:P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。 P1口:P1口是一個(gè)

9、內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。 P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,

10、當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號和控制信號。 P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。 ALE/PROG:當(dāng)訪問外部存儲器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正

11、脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時(shí),這兩次有效的/PSEN信號將不出現(xiàn)。 /EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程

12、序存儲器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出。(2)DAC0832芯片DAC0832是采樣頻率為八位的D/A轉(zhuǎn)換芯片,集成電路內(nèi)有兩級輸入寄存器。DAC0832輸出的是電流,一般要求輸出是電壓,所以還必須經(jīng)過一個(gè)外接的運(yùn)算放大器轉(zhuǎn)換成電壓。DAC0832芯片具備雙緩沖、單緩沖和直通三種輸入方式,以便適于各種電路的需要(如要求多路D/A異步輸入、同步轉(zhuǎn)換等)。所以這個(gè)芯片的應(yīng)用很廣泛

13、,關(guān)于DAC0832的引腳功能如下:D0D7:數(shù)字信號輸入端。ILE:輸入寄存器允許,高電平有效。CS:片選信號,低電平有效。WR1:寫信號1,低電平有效。XFER:傳送控制信號,低電平有效。WR2:寫信號2,低電平有效。IOUT1、IOUT2:DAC電流輸出端。RfB:是集成在片內(nèi)的外接運(yùn)放的反饋電阻。 VREF:基準(zhǔn)電壓(-1010V)。VCC:是源電壓(+5+15V)。GND:地。圖8 DAC0832芯片圖(3)1602液晶顯示器引腳功能如下: 第1腳:VSS為電源地 第2腳:VDD接5V電源正極 第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地電源時(shí)對比度最高(對比度過

14、高時(shí)會 產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度)。 第4腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。 第5腳:RW為讀寫信號線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。 第6腳:E(或EN)端為使能(enable)端。 第714腳:D0D7為8位雙向數(shù)據(jù)端。 第1516腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。(4)DAC0832說明:DAC0832選用直通方式,所以CS,XFER,WR1和WR2接地;D0D7是數(shù)據(jù)量數(shù)據(jù)輸入線,接收P0口輸出的數(shù)據(jù);VREF接基準(zhǔn)電壓,其中串接一個(gè)滑動電阻器,通過改變阻值,從而改變電壓,達(dá)

15、到改變幅值的目的;芯片內(nèi)已有反饋電阻,所以RFB接到運(yùn)算放大器輸出端;GND接地;VCC接工作電源;IOUT1和IOUT2輸出電流接運(yùn)算放大器。(5)按鍵工作說明:采用獨(dú)立式按鍵輸入的處理,軟件查詢方式,也就是說,先逐位查詢每根I0口線輸入為低電平,則可確認(rèn)該I0口線所對應(yīng)的按鍵已按下,再轉(zhuǎn)向該按鍵的功能處理程序。六、軟件設(shè)計(jì)6.1正弦波的產(chǎn)生過程通過手動的方法計(jì)算出輸出各點(diǎn)的電壓值,形成數(shù)組sin_tab256,反復(fù)順序輸出這組數(shù)據(jù)到DAC0832,就在系統(tǒng)輸出端得到正弦波。6.2鋸齒波的產(chǎn)生過程將一個(gè)周期(360度)分為128個(gè)點(diǎn),遞增,生成數(shù)組saw_tab256,反復(fù)順序輸出這組數(shù)據(jù)到

16、DAC0832,就在系統(tǒng)輸出端得到鋸齒波。6.3三角波的產(chǎn)生過程將三角波的一個(gè)周期(360度)分為256個(gè)點(diǎn),相鄰點(diǎn)等差,前128個(gè)點(diǎn)遞增,后128個(gè)點(diǎn)遞減,生成數(shù)組tri_tab256,反復(fù)順序輸出這組數(shù)據(jù)到DAC0832,就在系統(tǒng)輸出端得到三角波。6.4通過開關(guān)實(shí)現(xiàn)波形切換和調(diào)頻輕觸開關(guān)S1-S4切換波形輸出(S1鍵輸出正弦波,按S2鍵產(chǎn)生方波,按S3鍵產(chǎn)生鋸齒波,按S4鍵產(chǎn)生三角波),S5、S6調(diào)節(jié)方波占空比,S7、S8調(diào)節(jié)波形頻率。七、調(diào)試與仿真6.1正弦波的仿真結(jié)果使用有源低通濾波器,輸出波形變得更平滑了,但會出現(xiàn)畸變。這是符合實(shí)際情況的。如下圖分析。圖11 調(diào)頻前波形 圖12 調(diào)頻

17、后波形6.2鋸齒波的仿真結(jié)果圖13 調(diào)頻前波形 圖14 調(diào)頻后波形6.3三角波的仿真結(jié)果圖15調(diào)頻前波形 圖16調(diào)頻前波形 八、總結(jié)本次的設(shè)計(jì)中利用AT89C51和DAC0832以及放大器完成電路的設(shè)計(jì),用開關(guān)來控制各種波形的轉(zhuǎn)換和波形頻率,用單片機(jī)輸出后,經(jīng)過數(shù)模轉(zhuǎn)換器生成波形,最終可以通過示波器觀察。在這次的軟件設(shè)計(jì)中,程序設(shè)計(jì)采用的是C語言。C語言簡潔高效,是最貼近硬件的高級編程語言,經(jīng)過多年的發(fā)展,現(xiàn)在已成熟為專業(yè)水平的高級語言。因此,在大型程序的設(shè)計(jì)中,多采用C語言進(jìn)行程序編譯。而且,現(xiàn)在單片機(jī)產(chǎn)品推出時(shí)紛紛配套了C語言編譯器,應(yīng)用廣泛。由于真正意義上的程序設(shè)計(jì)還不多,因此還不是很得

18、心應(yīng)手,所以在設(shè)計(jì)中遇到一些問題和一些難點(diǎn)。比如:在程序設(shè)計(jì)中如何實(shí)現(xiàn)程序結(jié)構(gòu)的最優(yōu)化,以達(dá)到較高的質(zhì)量。這是以后設(shè)計(jì)中要注意的問題。 通過這次課程設(shè)計(jì),我進(jìn)一步了解了波形發(fā)生器的原理,在實(shí)際動手操作過程中,使我接觸了許多我以前沒接觸過的元件,而且重新溫習(xí)了剛學(xué)不久的C語言,使我學(xué)得了許多知識,使我獲益匪淺。這次課程設(shè)計(jì),使我的動手能力得到了很大的提高,更使我們懂得理論知識的重要性,沒有理論的指導(dǎo)一切實(shí)際行動都是盲目的,且實(shí)際操作是我們得到的理論知識得到驗(yàn)證,更能增加對理論知識的理解。九、參考文獻(xiàn)1 汪貴平,李登峰,龔賢武,雷旭 新編單片機(jī)原理及應(yīng)用 機(jī)械工業(yè)出版社,2012年1月第三次印刷。

19、2 趙文博,劉文濤單片機(jī)語言C51程序設(shè)計(jì)人民郵電出版社,2005年10月北京第一次印刷。3附錄附錄一:硬件圖main函數(shù)中斷函數(shù)附錄二:流程圖附錄三:程序清單/* main.c 文件 */* 含有 */* 定時(shí)器初始化函數(shù) */* main函數(shù) */* 定時(shí)器1中斷函數(shù) */*/#include head.H/包含函數(shù)、變量聲明#include lcd.c /lcd1602液晶顯示器的函數(shù)#include fun.c / 包含鍵盤掃描、延時(shí)等功能函數(shù)/*初始化函數(shù)*/void ini()table=tri_tab; /給予初值THHL=65535;/ TH1=THHL/256;/定時(shí)器1高八

20、位賦值TL1=THHL%256;/ 定時(shí)器1第八位賦值TMOD=0x10;/定時(shí)器1模式設(shè)置 方式1,十六位不自動重裝EA=1;/ 開總中斷ET1=1;/開定時(shí)器1中斷TR1=1;/啟動定時(shí)器1/*主函數(shù)*/main()lcdini(); /lcd初始化程序writdatas(0x80,lcdtable); /調(diào)用顯示字符串函數(shù)顯示選項(xiàng)writdatas(0x80+0x41,select);ini();/初始化程序 while(1) keyplay();/鍵盤掃描函數(shù) /*T1中斷函數(shù)*/void time() interrupt 3TR1=0;TH1=THHL/256;TL1=THHL%25

21、6;DataOut=*(table+n);n+;/加一,滿255自動溢出TR1=1;/* fun.c 文件 */* 含有 */* 延時(shí)函數(shù) */* 鍵盤掃描函數(shù) */* 鍵盤功能函數(shù) */*/*延時(shí)函數(shù)*/ void delays(uint8 x)uint8 i;for(;x0;x-)for(i=110;i0;i-);/* 鍵盤掃描函數(shù) */void keyplay()uint8temp;/定義一個(gè)變量Key=0xff; /賦初值temp=Key; /key的值賦予tempif(temp!=0xff) /判斷temp中的值是否等于Oxffdelays(2); /推遲2mstemp=Key; /

22、key中的值賦予tempif(temp!=0xff) /判斷temp中的值是否等于Oxffwhile(Key!=0xff);/程序等待釋放。switch(temp) /選擇按鍵case0xfe:KeySaw();/按鍵1鋸齒波break;case0xfd:KeyTri();/按鍵2三角波break;case0xfb:KeySin(); /按鍵3正弦波break;case0xf7:KeyPinUp(); /頻率增加break;case0xef:KeyPinDow(); /頻率降低break;default:break;/*鍵盤功能函數(shù)*/ void KeySaw() lcdclear(); wr

23、itdatas(0x80,str_saw); table=saw_tab; void KeyTri() table=tri_tab;lcdclear(); writdatas(0x80,str_tri);void KeySin() table=sin_tab; lcdclear();writdatas(0x80,str_sin);void KeyPinUp()if(THHL=500)THHL=THHL-LEV;/P2_0=P2_0;elseTHHL=500;/* lcd.c 文件 */* 含有 */* 寫命令函數(shù) */* 寫數(shù)據(jù)函數(shù) */* 寫字符串 */* 初始化 */*/#include

24、reg51.h/#include fun.c/#include head.H#define LCDATA P2 /p2口sbitrs=P35;/sbitrw=P36;sbitlcde=P34;uint8codelcdtable=start,saw-k1;/定義字符串uint8codeselect=tri-k2,sin-k3;/定義字符串uint8codestr_sin=sine;/正弦波uint8codestr_tri=triangular; /三角波uint8codestr_saw=sawtooth;/鋸齒波/*寫命令函數(shù)*/void writcom(uint8com)rs=0;/選擇寫命令

25、模式LCDATA=com;/將要寫的命令字送到數(shù)據(jù)總線上lcde=1;/使能端給一高脈沖,因?yàn)槌跏蓟瘮?shù)中已經(jīng)將lcden置為0delays(1);/稍作延時(shí)lcde=0;/將使能端置0以完成高脈沖void writdat(uint8 dat)/while(lcdzt();rs=1;/選擇寫數(shù)據(jù)模式/delays(5);LCDATA=dat;/將要寫的數(shù)據(jù)傳到數(shù)據(jù)總線上/delays(1);lcde=1;/使能端給一高脈沖,因?yàn)槌跏蓟瘮?shù)中已經(jīng)將lcden置為0delays(5);lcde=0;/將使能端置0以完成高脈沖/rw=1; /delays(5);void lcdini()rw=0;/

26、低電平為寫模式lcde=0;/使能端置低writcom(0x38);/顯示模式設(shè)置delays(1);/延時(shí)1秒writcom(0x0c);/設(shè)置開顯示,不顯示光標(biāo)delays(1);/延時(shí)1秒writcom(0x06);/寫一個(gè)字符后地址指針加1 delays(1);/延時(shí)1秒writcom(0x01);/顯示清0,數(shù)據(jù)指針清0 delays(1);/延時(shí)1秒/lcd清屏 void lcdclear()rw=0;lcde=0;writcom(0x01); delays(1);/*字符串函數(shù)*/void writdatas(uint8 posi,uint8 *ldate)writcom(pos

27、i); /調(diào)用寫命令函數(shù)定義位置while(*ldate!=0) /依次送字符writdat(*ldate+);/*lcd*/*測試主函數(shù)* void main()lcdini();writdatas(0x80,lcdtabl); writdatas(0x80+0x40,lcdtabl);while(1); */* head.h 文件 */* 含有 */* 引腳定義 */* 全局變量的聲明、定義 */* 一些函數(shù)的聲明 */* 波形數(shù)組 */*/#include REGX51.H#define DataOut P0 /P0口為Da數(shù)據(jù)#define Key P1 /P1口為鍵盤#define

28、LCDATA P2 /p2口為lcd數(shù)據(jù)口#define LEV40 /頻率調(diào)節(jié)幅度typedef unsigned char uint8;typedef unsigned int uint16;sbitrs=P35;/ lcd命令數(shù)據(jù)sbitrw=P36;/lcd讀寫sbitlcde=P34;/lcd使能uint8code*table;uint8n;/uint16chthhl;uint16THHL;uint8code* table;uint8 code sin_tab256;uint8 code tri_tab256;uint8 code saw_tab256; /*/一些函數(shù)的聲明void

29、 keyplay();void delays(uint8);void ini();void KeySaw();void KeyTri();void KeySin();void KeyPinUp();void KeyPinDow();void writdatas(uint8 posi,uint8 *ldate); /*三角波數(shù)組*/uint8 code tri_tab256=0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,

30、78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232

31、,234,236,238,240,242,244,246,248,250,252,254,254,252,250,248,246,244,242,240,238,236,234,232,230,228,226,224,222,220,218,216,214,212,210,208,206,204,202,200,198,196,194,192,190,188,186,184,182,180,178,176,174,172,170,168,166,164,162,160,158,156,154,152,150,148,146,144,142,140,138,136,134,132,130,128

32、,126,124,122,120,118,116,114,112,110,108,106,104,102,100,98,96,94,92,90,88,86,84,82,80,78,76,74,72,70,68,66,64,62,60,58,56,54,52,50,48,46,44,42,40,38,36,34,32,30,28,26,24,22,20,18,16,14,12,10,8,6,4,2,0,;/*鋸齒波數(shù)組*/uint8 code saw_tab256=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,2

33、5,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,

34、119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,20

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論