測(cè)控課程設(shè)計(jì)--簡(jiǎn)易低頻信號(hào)發(fā)生器的設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩42頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《測(cè)控系統(tǒng)原理與設(shè)計(jì)》課程設(shè)計(jì)</p><p>  課題:簡(jiǎn)易低頻信號(hào)發(fā)生器的設(shè)計(jì)</p><p>  班級(jí) 測(cè)控112班 學(xué)號(hào) </p><p>  學(xué)生姓名 </p><p>  專業(yè) 測(cè)控技術(shù)與儀器

2、 </p><p>  系別 測(cè)控系 </p><p>  指導(dǎo)教師 </p><p><b>  電子與電氣工程學(xué)院</b></p><p><b>  2014年6月</b>&

3、lt;/p><p><b>  一、課題介紹</b></p><p>  1、簡(jiǎn)易低頻信號(hào)發(fā)生器的設(shè)計(jì)</p><p>  設(shè)計(jì)一個(gè)基于單片機(jī)的函數(shù)信號(hào)發(fā)生器,該函數(shù)信號(hào)發(fā)生器可以輸出三種波形,有正弦波,方波和三角波。在此基礎(chǔ)上進(jìn)一步實(shí)現(xiàn)對(duì)波形頻率和占空比的調(diào)節(jié),并用液晶屏分兩行顯示波形名稱和波形頻率</p><p><

4、;b>  2、設(shè)計(jì)指標(biāo)</b></p><p>  以單片機(jī)為核心,經(jīng)過(guò)D/A轉(zhuǎn)換和放大電路的處理,最后輸出信號(hào);</p><p>  要求能輸出正弦波、三角波和方波三種信號(hào);</p><p>  輸出信號(hào)可以通過(guò)按鍵來(lái)改變</p><p><b>  完成系統(tǒng)電路設(shè)計(jì);</b></p>

5、<p><b>  完成系統(tǒng)軟件設(shè)計(jì);</b></p><p>  完成系統(tǒng)Proteus下的仿真。</p><p><b>  3、功能</b></p><p>  該函數(shù)信號(hào)發(fā)生器可以輸出正弦波,三角波,方波。在此基礎(chǔ)上進(jìn)一步實(shí)現(xiàn)對(duì)波形頻率和占空比的調(diào)節(jié),并用液晶屏分兩行顯示波形名稱和波形頻率。</p&

6、gt;<p><b>  4、創(chuàng)新點(diǎn)</b></p><p>  該信號(hào)發(fā)生器可以輸出鋸齒波、梯形波,并且有液晶屏顯示波形頻率</p><p><b>  二、摘要</b></p><p>  本次作品是一個(gè)基于單片機(jī)設(shè)計(jì)的函數(shù)信號(hào)發(fā)生器。函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)方法有多種,利用單片機(jī)設(shè)計(jì)的函數(shù)信號(hào)發(fā)生器具有編程

7、靈活,功能更以擴(kuò)充等實(shí)際的優(yōu)點(diǎn)。利用單片機(jī)設(shè)計(jì)的函數(shù)信號(hào)發(fā)生器能夠產(chǎn)生正弦波,三角波,方波,并實(shí)現(xiàn)對(duì)頻率和占空比的調(diào)節(jié),以及液晶屏顯示波形名稱和波形頻率,波形的切換和頻率的調(diào)節(jié)以及占空比的改變都可以用按鍵實(shí)現(xiàn)。經(jīng)過(guò)設(shè)計(jì)及后期長(zhǎng)時(shí)間的調(diào)試,設(shè)計(jì)的所有功能均已實(shí)現(xiàn)。</p><p>  關(guān)鍵詞:?jiǎn)纹瑱C(jī),函數(shù)發(fā)生器,液晶LCD </p><p><b>  目錄</b>&l

8、t;/p><p><b>  一、系統(tǒng)方案的設(shè)計(jì)</b></p><p>  設(shè)計(jì)要求………………………………………………………………3</p><p>  系統(tǒng)基本方案…………………………………………………………3</p><p>  各模塊方案選擇………………………………………………………3</p><

9、;p><b>  二、系統(tǒng)的硬件設(shè)計(jì)</b></p><p>  2.1 AT89C52的功能介紹…………………………………………………4</p><p>  2.2單片機(jī)的最小系統(tǒng)………………………………………………………5</p><p>  2.3 D/A轉(zhuǎn)換模塊部件……………………………………………………6</p>

10、<p>  2.3.1 DAC0832芯片原理…………………………………………………6</p><p>  2.3.2放大部LM324…………………………………………………………7</p><p>  2.3.3 D/A轉(zhuǎn)換模塊的放大電路和濾波電路………………………………8</p><p>  2.4 鍵盤(pán)電路 ………………………………………

11、…………………9</p><p>  2.5 液晶顯示電路 …………………………………………………………9</p><p><b>  三、系統(tǒng)調(diào)試與驗(yàn)證</b></p><p>  3.1調(diào)試結(jié)果(仿真結(jié)果)截圖 ………………………………………10</p><p>  四、課程設(shè)計(jì)體會(huì)與總結(jié)…………………………

12、…………………………12</p><p><b>  五、參考文獻(xiàn)</b></p><p>  附錄一程序清單 ……………………………………………………13</p><p>  附錄二電路原理圖………………………………………………………42</p><p><b>  一、系統(tǒng)方案的設(shè)計(jì)</b>

13、;</p><p><b>  1.1 設(shè)計(jì)要求</b></p><p>  基本功能:(1)簡(jiǎn)易低頻信號(hào)發(fā)生器要求輸出50Hz的方波、三角波和正弦波。</p><p> ?。?)通過(guò)按鍵切換。</p><p> ?。?)方波的占空比可調(diào)。1.2 系統(tǒng)基本方案</p><p>  本系統(tǒng)用AT89

14、C52單片機(jī)作為核心部件,低頻信號(hào)源在設(shè)計(jì)制作過(guò)程中主要考慮其簡(jiǎn)易實(shí)用,通過(guò)DAC0832把數(shù)字量轉(zhuǎn)換為模擬量,在DAC0832的輸出端接運(yùn)算放大器,由運(yùn)算放大器產(chǎn)生波形,而DAC0832工作于單緩沖方式,其中輸入寄存器受控,而DAC寄存器直通。顯示部分通過(guò)使用數(shù)碼管顯示輸出波形的頻率,示波器以正負(fù)電壓的形式輸出波形。</p><p>  根據(jù)設(shè)計(jì)要求和初期設(shè)想,系統(tǒng)可分為主控模塊、波形種類(lèi)顯示模塊、波形產(chǎn)生電路

15、模塊、頻率顯示模塊和按鍵控制模塊。</p><p>  本系統(tǒng)設(shè)置所用到的電源為5V的直流穩(wěn)壓電源,基準(zhǔn)電壓+15V,通過(guò)DAC0832進(jìn)行數(shù)模轉(zhuǎn)換,在電流的輸出端采用TL082集成芯片進(jìn)行放大、整形。1.3 各模塊方案選擇</p><p><b>  (1)主控模塊</b></p><p>  采用ATMEL公司生產(chǎn)的AT89C52單片機(jī)作為

16、系統(tǒng)的控制器。51系列的單片機(jī)的使用簡(jiǎn)單,軟件編程靈活。</p><p><b>  (2)頻率顯示模塊</b></p><p><b>  采用液晶屏顯示</b></p><p>  (3)波形種類(lèi)顯示模塊</p><p>  示波器是一種用途十分廣泛的電子測(cè)量?jī)x器,在被測(cè)信號(hào)的作用下,電子束就好

17、像一支筆的筆尖,可以在屏面上描繪出被測(cè)信號(hào)的瞬時(shí)值的變化曲線。利用示波器能觀察各種不同信號(hào)幅度隨時(shí)間變化的波形曲線,如本實(shí)驗(yàn)所需的方波、三角波和正弦波。</p><p><b>  (4)波形產(chǎn)生模塊</b></p><p>  DAC0832芯片是8位并行、中速(建立時(shí)間1us)、CMOS工藝制造的8位單片D/A轉(zhuǎn)換,各支路的電流信號(hào)經(jīng)過(guò)電阻網(wǎng)絡(luò)加權(quán)后,由運(yùn)算放大器

18、求和并變換成電壓信號(hào),作為D/A轉(zhuǎn)換器的輸出。DAC0832換器轉(zhuǎn)換控制容易等優(yōu)點(diǎn),在單片機(jī)應(yīng)用系統(tǒng)中得到了廣泛的應(yīng)用。</p><p>  (5) 按鍵控制模塊:采用是四個(gè)輕觸開(kāi)關(guān)來(lái)控制頻率的增加和減少以及波形種類(lèi)切換的顯示。</p><p>  二、 系統(tǒng)的硬件設(shè)計(jì)</p><p>  2.1 AT89C52的功能介紹</p><p>

19、;  AT89C52為8 位通用微處理器</p><p>  圖2.PDIP封裝的AT89C52引腳圖</p><p>  采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52 相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。功能包括對(duì)會(huì)聚主IC 內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測(cè)試圖控制,紅外遙控信號(hào)IR的接收解碼及與主板CPU通信等。主要管腳有

20、:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9 腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC(40 腳)和VSS(20 腳)為供電端口,分別接+5V電源的正負(fù)端。P0~P3 為可編程通用I/O 腳,其功能用途由軟件定義,在本設(shè)計(jì)中,P0 端口(32~39 腳)被定義為N1 功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13 腳定義為IR輸入端,10 腳和11腳定義

21、為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12 腳、27 腳及28 腳定義為握手信號(hào)功能端口,連接主板CPU 的相應(yīng)功能端,用于當(dāng)前制式的檢測(cè)及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。 </p><p>  2.2 單片機(jī)最小系統(tǒng)</p><p>  其作用主要是為了保證單片機(jī)系統(tǒng)能正常工作。如圖2-2所示,單片機(jī)最小系統(tǒng)主要由AT89S51單片機(jī)、外部振蕩電路

22、、復(fù)位電路和+5V電源組成。在外部振蕩電路中,單片機(jī)的XTAL1和XTAL2管腳分別接至由12MHZ晶振和兩個(gè)30PF電容構(gòu)成的振蕩電路兩側(cè),為電路提供正常的時(shí)鐘脈沖。在復(fù)位電路中,單片機(jī)RESET管腳一方面經(jīng)20 F的電容接至電源正極,實(shí)現(xiàn)上電自動(dòng)復(fù)位,另一方面經(jīng)開(kāi)關(guān)s接電源。其主要功能是把PC初始化為0000H,是單片機(jī)從0000H單元開(kāi)始執(zhí)行程序,除了進(jìn)入系統(tǒng)的初始化之外,當(dāng)由于程序出錯(cuò)或者操作錯(cuò)誤使系統(tǒng)處于死鎖狀態(tài)時(shí),為了擺脫困

23、境,也需要按復(fù)位鍵重新啟動(dòng)。因此,復(fù)位電路是單片機(jī)系統(tǒng)中不可缺少的一部分。</p><p>  圖2-2,單片機(jī)最小系統(tǒng)</p><p>  2.3 D/A轉(zhuǎn)換模塊部件</p><p>  2.3.1 DAC0832芯片原理</p><p>  管腳功能介紹(如圖3所示)</p><p>  圖3 DAC08

24、32管腳圖</p><p>  DI7~DI0:8位的數(shù)據(jù)輸入端,DI7為最高位。</p><p>  ILE:數(shù)據(jù)鎖存允許控制信號(hào)輸入線,高電平有效。</p><p>  CS:選片信號(hào)輸入線(選通數(shù)據(jù)鎖存器),低電平有效。</p><p>  WR1:數(shù)據(jù)鎖存器寫(xiě)選選通輸入線,負(fù)脈沖有效,由ILE、CS、WR1的邏輯組合產(chǎn)生LE1,當(dāng)LE

25、1為高電平時(shí),數(shù)據(jù)鎖存器狀態(tài)隨輸入數(shù)據(jù)線變化,LE1的負(fù)跳變時(shí)將輸入數(shù)據(jù)鎖存。</p><p>  XFER:數(shù)據(jù)傳輸控制信號(hào)輸入線,低電平有效,負(fù)脈沖有效。</p><p>  WR2:DAC寄存器選通輸入線,負(fù)脈沖有效,由WR2、XFER的邏輯組合產(chǎn)生LE2,當(dāng)LE2為高電平時(shí),DAC寄存器的輸出隨寄存器的輸入而變化,LE2的負(fù)跳變時(shí)將數(shù)據(jù)鎖存器的內(nèi)容打入DAC寄存器并開(kāi)始D/A轉(zhuǎn)換。

26、</p><p>  IOUT1:模擬電流輸出端1,當(dāng)DAC寄存器中數(shù)據(jù)全為1時(shí),輸出電流最大,當(dāng) DAC寄存器中數(shù)據(jù)全為0時(shí),輸出電流為0。</p><p>  IOUT2:模擬電流輸出端2, IOUT2與IOUT1的和為一個(gè)常數(shù),即IOUT1+I(xiàn)OUT2=常數(shù)。</p><p>  RFB:反饋電阻引出端,DAC0832內(nèi)部已經(jīng)有反饋電阻,所以 RFB端可以直接

27、接到外部運(yùn)算放大器的輸出端,這樣相當(dāng)于將一個(gè)反饋電阻接在運(yùn)算放大器的輸出端和輸入端之間。</p><p>  VREF:參考電壓輸入端,此端可接一個(gè)正電壓,也可接一個(gè)負(fù)電壓,它決定0至255的數(shù)字量轉(zhuǎn)化出來(lái)的模擬量電壓值的幅度,VREF范圍為(+10~-10)V。VREF端與D/A內(nèi)部T形電阻網(wǎng)絡(luò)相連。</p><p>  Vcc:芯片供電電壓,范圍為(+5~+15)V。</p>

28、;<p>  AGND:模擬量地,即模擬電路接地端。</p><p>  DGND:數(shù)字量地。</p><p>  2.3.2 放大部分 LM324</p><p>  LM324引腳圖(管腳圖)</p><p>  圖5 LM324引腳圖</p><p><b>  簡(jiǎn)介: </

29、b></p><p>  LM324系列器件為價(jià)格便宜的帶有真差動(dòng)輸入的四運(yùn)算放大器。與單電源應(yīng)用場(chǎng)合的標(biāo)準(zhǔn)運(yùn)算放大器相比,它們有一些顯著優(yōu)點(diǎn)。該四放大器可以工作在低到3.0伏或者高到32伏的電源下,靜態(tài)電流為MC1741的靜態(tài)電流的五分之一。共模輸入范圍包括負(fù)電源,因而消除了在許多應(yīng)用場(chǎng)合中采用外部偏置元件的必要性。它有5個(gè)引出腳,其中“+”、“-”為兩個(gè)信號(hào)輸入端,“V+”、“V-”為正、負(fù)電源端,“V

30、o”為輸出端。兩個(gè)信號(hào)輸入端中,Vi-(-)為反相輸入端,表示運(yùn)放輸出端Vo的信號(hào)與該輸入端的位相反;Vi+(+)為同相輸入端,表示運(yùn)放輸出端Vo的信號(hào)與該輸入端的相位相同。</p><p>  2.3.3 D/A轉(zhuǎn)換模塊的放大電路和濾波電路</p><p>  LM324的5管腳與DAC0832的(IOUT2)管腳相連,LM324的6管腳與DAC0832的(IOUT1)管腳相連,L

31、M324的7管腳與DAC0832的REF管腳相連.</p><p>  第一級(jí)運(yùn)算放大器的作用是將DAC0832輸出的電流信號(hào)轉(zhuǎn)化為電壓信號(hào)V1,第二級(jí)運(yùn)算放大器的作用是將V1通過(guò)反向放大電路-(R2/R1)倍。</p><p>  在第二個(gè)運(yùn)算放大器的輸出端連了一個(gè)低通濾波器。如果不加低通濾波器,也能夠生成波形,但是產(chǎn)生的信號(hào)中毛刺很多,加一個(gè)低通濾波器不僅起到的濾波的作用,還起到了平滑

32、的作用。低通濾波器的截止頻率F=1/(2*pi*R3*C6),這里我們選擇R3 為100歐姆電阻,C6為104電容,截止頻率F=16KHZ。實(shí)驗(yàn)表明,此時(shí)的輸出波形效果不錯(cuò)。</p><p>  2.4 鍵盤(pán)電路</p><p>  鍵盤(pán)用的是上拉電阻,選通接地的形式。</p><p>  S2,S3, S4分別控制頻率的增,頻率的減,變換波形。</p&

33、gt;<p>  2.5 液晶顯示電路</p><p><b>  三、系統(tǒng)調(diào)試與驗(yàn)證</b></p><p>  3.1調(diào)試結(jié)果(仿真結(jié)果)截圖</p><p>  本系統(tǒng)是在protues下仿真,使用Keil C編程。從而實(shí)現(xiàn)其設(shè)計(jì)及仿真。</p><p>  3.1.1正弦波仿真圖</p>

34、;<p><b>  圖8正弦波圖</b></p><p>  3.1.2三角波仿真圖</p><p><b>  圖9三角波圖</b></p><p>  3.1.3鋸齒波仿真圖</p><p><b>  圖10鋸齒波圖</b></p><

35、p>  3.1.4方波仿真圖</p><p><b>  圖11方波圖</b></p><p>  3.1.5 梯形波仿真圖</p><p><b>  四、總結(jié)與展望</b></p><p>  本次的設(shè)計(jì)中利用AT89C52和DAC0832以及放大器完成電路的設(shè)計(jì),用開(kāi)關(guān)來(lái)控制各種波形的發(fā)

36、生及轉(zhuǎn)換,用單片機(jī)輸出后,經(jīng)過(guò)模數(shù)轉(zhuǎn)換器生成波形,最終可以通過(guò)示波器觀察。</p><p>  在這次的軟件設(shè)計(jì)中,程序設(shè)計(jì)采用的是匯編語(yǔ)言。匯編語(yǔ)言具有速度快,可以直接對(duì)硬件進(jìn)行操作的優(yōu)點(diǎn),它可以極好的發(fā)揮硬件的功能。但是匯編語(yǔ)言也存在編寫(xiě)的代碼非常難懂,不好維護(hù),很容易產(chǎn)生 bug,難于調(diào)試的缺點(diǎn)。因此,在大型程序的設(shè)計(jì)中,多采用C語(yǔ)言進(jìn)行程序編譯。C語(yǔ)言簡(jiǎn)潔高效,是最貼近硬件的高級(jí)編程語(yǔ)言,經(jīng)過(guò)多年的發(fā)展,

37、現(xiàn)在已成熟為專業(yè)水平的高級(jí)語(yǔ)言。而且,現(xiàn)在單片機(jī)產(chǎn)品推出時(shí)紛紛配套了C語(yǔ)言編譯器,應(yīng)用廣泛。不過(guò)就本次課程設(shè)計(jì)來(lái)說(shuō),匯編語(yǔ)言還是適用的。</p><p>  由于真正意義上的程序設(shè)計(jì)還不多,因此還不是很得心應(yīng)手,所以在設(shè)計(jì)中遇到一些問(wèn)題和一些難點(diǎn)。比如:在程序設(shè)計(jì)中如何實(shí)現(xiàn)程序結(jié)構(gòu)的最優(yōu)化,以達(dá)到較高的質(zhì)量。這是以后設(shè)計(jì)中要注意的問(wèn)題。</p><p>  通過(guò)這次課程設(shè)計(jì),我進(jìn)一步了解了

38、波形發(fā)生器的原理,在實(shí)際動(dòng)手操作過(guò)程中,使我接觸了許多我以前沒(méi)接觸過(guò)的元件,而且重新溫習(xí)了剛學(xué)不久的匯編語(yǔ)言,使我學(xué)得了許多知識(shí),使我獲益匪淺。</p><p>  這次課程設(shè)計(jì),使我的動(dòng)手能力得到了很大的提高,更使我們懂得理論知識(shí)的重要性,沒(méi)有理論的指導(dǎo)一切實(shí)際行動(dòng)都是盲目的,且實(shí)際操作是我們得到的理論知識(shí)得到驗(yàn)證,更能增加對(duì)理論知識(shí)的理解。</p><p><b>  附錄一

39、</b></p><p><b>  程序</b></p><p>  #include <reg52.h></p><p>  #include <math.h></p><p>  #include<intrins.h></p><p>  #d

40、efine uint unsigned int</p><p>  #define uchar unsigned char</p><p>  #define ulong unsigned long</p><p>  char num,boxing,u; //定義全局變量</p><p>  uint pinlv;</p

41、><p>  sbit s1=P2^5;</p><p>  sbit s2=P2^6;</p><p>  sbit s3=P2^7;</p><p>  sbit CS1=P2^0;//片選1,低電平有效,CS1=0開(kāi)左屏幕,CS1=1關(guān)左屏幕</p><p>  sbit CS2=P2^1;//片選2,低電平有效,C

42、S2=0開(kāi)右屏幕,CS2=1關(guān)右屏幕</p><p>  sbit RS=P2^2;//數(shù)據(jù),指令選擇信號(hào),RS=1為數(shù)據(jù)操作,RS=0為寫(xiě)指令或讀狀態(tài)(一般為讀忙標(biāo)志)</p><p>  sbit RW=P2^3;//讀寫(xiě)選擇信號(hào),RW=1為讀選通,RW=0為寫(xiě)選通</p><p>  sbit EN=P2^4;//讀寫(xiě)使能信號(hào)</p><p

43、>  uchar code sin[64]={</p><p>  135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,</p><p>  146,133,121,108,96,84,72,61,

44、50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128};</p><p>  uchar code juxing[64]={</p><p>  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2

45、55,255,255,255,255,255,255,</p><p>  255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};</p><p>  uchar code juchi[64]={</p><p>  0,4,8,12,16,2

46、0,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,</p><p>  146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,23

47、9,243,247,251,255};</p><p>  uchar code tixing[64]={</p><p>  0,13,26,39,52,65,78,91,104,117,130,143,156,169,182,195,208,221,234,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,2

48、47,247,247,247,247,247,247,247,247,247,242,229,216,203,190,177,164,151,138,125,112,99,86,73,60,47,34,21,8};</p><p>  uchar code sanjiao[64]={</p><p>  0,8,16,24,32,40,48,56,64,72,80,88,96,104,11

49、2,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0};</p><p>  uchar code bo

50、[]=//波 </p><p><b>  {</b></p><p>  0x10,0x60,0x02,0x0C,0xC0,0x00,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0xA8,0x18,0x00,0x04,0x04,0x7C,0x03,0x80,0x60,0x1F,0x80,0x43,0x2C,0x10,0x28,0x46,0x

51、81,0x80,0x00};</p><p>  uchar code xing[]=//形 </p><p><b>  {</b></p><p>  0x80,0x82,0x82,0xFE,0x82,0x82,0xFE,0x82,0x82,0x80,0x20,0x10,0x08,0x86,0x60,0x00,0x80,0x40,0x30,

52、0x0F,0x00,0x00,0xFF,0x00,0x00,0x80,0x84,0x42,0x21,0x10,0x0C,0x000};</p><p>  uchar code pin[]=//頻 </p><p><b>  {</b></p><p>  0x40,0x7C,0x40,0x7F,0x48,0x48,0x40,0xF2,0x1

53、2,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00,0x90,0x8E,0x40,0x4F,0x20,0x1E,0x80,0x4F,0x20,0x18,0x07,0x10,0x20,0x4F,0x80,0x00};</p><p>  uchar code lv[]=//率 </p><p><b>  {</b></p><

54、p>  0x00,0x14,0xA4,0x44,0x24,0x34,0xAD,0x66,0x24,0x94,0x04,0x44,0xA4,0x14,0x00,0x00,0x08,0x09,0x08,0x08,0x09,0x09,0x09,0xFD,0x09,0x09,0x0B,0x08,0x08,0x09,0x08,0x00};</p><p>  uchar code zheng[]=//正 </p

55、><p><b>  {</b></p><p>  0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00}

56、;</p><p>  uchar code xian[]=//弦</p><p><b>  {</b></p><p>  0x02,0xE2,0x22,0x22,0x3E,0x00,0x08,0x88,0x48,0x39,0x0E,0x08,0xC8,0x08,0x08,0x00,0x00,0x43,0x82,0x42,0x3E,0x00

57、,0x21,0x71,0x29,0x25,0x23,0x21,0x28,0x70,0x00,0x00};</p><p>  uchar code ju[]=//矩 </p><p><b>  {</b></p><p>  0x90,0x88,0x87,0xFC,0x84,0x84,0x80,0xFE,0x22,0x22,0x22,0x22

58、,0x22,0xE2,0x02,0x00,0x80,0x60,0x18,0x07,0x08,0x30,0x00,0x7F,0x44,0x44,0x44,0x44,0x44,0x47,0x40,0x00};</p><p>  uchar code xing1[]=//形 </p><p><b>  {</b></p><p>  0x80,0

59、x82,0x82,0xFE,0x82,0x82,0xFE,0x82,0x82,0x80,0x20,0x10,0x08,0x86,0x60,0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0xFF,0x00,0x00,0x80,0x84,0x42,0x21,0x10,0x0C,0x00};</p><p>  uchar code ju1[]=//鋸</p><p>&

60、lt;b>  {</b></p><p>  0x40,0x30,0xEF,0x24,0x24,0x00,0xFE,0x92,0x92,0x92,0xF2,0x92,0x92,0x9E,0x80,0x00,0x01,0x01,0x7F,0x21,0x91,0x60,0x1F,0x00,0xFC,0x44,0x47,0x44,0x44,0xFC,0x00,0x00};</p><

61、;p>  uchar code chi[]=//齒 </p><p><b>  {</b></p><p>  0x40,0x40,0x40,0x7C,0x40,0x40,0x40,0x7F,0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00,0x00,0x00,0x7F,0x40,0x50,0x48,0x44,0x43,0x44

62、,0x48,0x50,0x40,0xFF,0x00,0x00,0x00};</p><p>  uchar code ti[]=//梯</p><p><b>  {</b></p><p>  0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xC9,0x4E,0x48,0xF8,0x4C,0x4B,0x78,0x00,

63、0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x20,0x13,0x0A,0x06,0xFF,0x02,0x12,0x22,0x1E,0x00};</p><p>  uchar code xing2[]=//形 </p><p><b>  {</b></p><p>  0x80,0x82,0x82,0xFE,0x

64、82,0x82,0xFE,0x82,0x82,0x80,0x20,0x10,0x08,0x86,0x60,0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0xFF,0x00,0x00,0x80,0x84,0x42,0x21,0x10,0x0C,0x00};</p><p>  uchar code san[]=//三 </p><p><b>  {<

65、/b></p><p>  0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00};</p><p>  uchar c

66、ode jiao[]=//角 </p><p><b>  {</b></p><p>  0x20,0x10,0xE8,0x24,0x27,0x24,0x24,0xE4,0x24,0x34,0x2C,0x20,0xE0,0x00,0x00,0x00,0x80,0x60,0x1F,0x09,0x09,0x09,0x09,0x7F,0x09,0x09,0x49,0x89

67、,0x7F,0x00,0x00,0x00};</p><p>  uchar code ling[]=</p><p><b>  {</b></p><p>  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};</p>

68、<p>  uchar code yi1[]=</p><p><b>  {</b></p><p>  0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,};</p><p>  uchar code er[]=<

69、;/p><p><b>  {</b></p><p>  0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,};</p><p>  uchar code san1[]=</p><p><b>  {&

70、lt;/b></p><p>  0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,};</p><p>  uchar code si[]=</p><p>  {0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x0

71、0,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,};</p><p>  uchar code wu[]=</p><p>  {0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,};</p><p>  uchar code li

72、u[]=</p><p>  {0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,};</p><p>  uchar code qi[]=</p><p>  {0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x

73、00,0x00,0x3F,0x00,0x00,0x00,0x00,};</p><p>  uchar code ba[]=</p><p>  {0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,};</p><p>  uchar code jiu[]=

74、</p><p>  {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,};</p><p>  uchar code he[]=</p><p>  {0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0

75、x21,0x01,0x01,0x21,0x3F,0x20,};</p><p>  uchar code zi[]=</p><p>  {0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,};</p><p>  void busy()//忙檢測(cè)函數(shù)<

76、;/p><p>  {P0=0X00; //這句不能少</p><p><b>  RS=0; </b></p><p><b>  RW=1;</b></p><p><b>  EN=1;</b></p><p>  while(P0&0X80)

77、;//P0&0X80結(jié)果為真則一直執(zhí)行空操作,也就是說(shuō)P0&0X80為0則結(jié)束循環(huán)</p><p><b>  EN=0;</b></p><p><b>  }</b></p><p>  void wcmd(uchar cmd)</p><p>  {busy(); //每次寫(xiě)入

78、指令或數(shù)據(jù)之前都進(jìn)行忙檢測(cè)</p><p><b>  RS=0;</b></p><p><b>  RW=0;</b></p><p><b>  P0=cmd;</b></p><p>  EN=1;_nop_();_nop_();//在EN下降沿寫(xiě)入數(shù)據(jù)和指令</

79、p><p><b>  EN=0;}</b></p><p>  void wdata(uchar dat) //寫(xiě)命令和寫(xiě)數(shù)據(jù)只在RS=0或RS=1上不同,其余都相同</p><p><b>  {busy();</b></p><p><b>  RS=1;</b></p

80、><p><b>  RW=0;</b></p><p><b>  P0=dat;</b></p><p>  EN=1;_nop_();_nop_();//在EN下降沿寫(xiě)入數(shù)據(jù)和指令</p><p><b>  EN=0;}</b></p><p>  

81、void set_page(uchar page)//設(shè)置頁(yè),12864LCD共有8頁(yè),每頁(yè)有8行點(diǎn)陣點(diǎn)。</p><p>  {page=0xb8|page; //首頁(yè)地址為0XB8</p><p>  wcmd(page); //page取值范圍為0~7,表示第1到8頁(yè)}</p><p>  void set_line(uchar line)//設(shè)置顯示

82、的起始行,共有0--63行,一般從0行開(kāi)始顯示</p><p>  {line=0xc0|line; //起始行地址0XC0</p><p>  wcmd(line);//line取值范圍為0~63,表示第1到64行}</p><p>  void set_column(uchar column)//設(shè)置顯示的列</p><p>  {/

83、/column=column&0x3f; //列的最大值為0X3F,即64</p><p>  column=0x40|column; //列的首地址為0X40,</p><p>  wcmd(column); //column的取值范圍為0~63,共64列}</p><p>  void set_onoff(uchar onoff)//設(shè)置顯示開(kāi)關(guān),

84、onoff取值為0或1</p><p>  {onoff|=0x3e;//0X3E是關(guān)顯示,0X3F是開(kāi)顯示</p><p>  wcmd(onoff);//所以若onoff為0,則表示關(guān)顯示,onoff為1,則表示開(kāi)顯示}</p><p>  void select_screen(uchar screen)//選屏,screen取值范圍為0,1,2</p&g

85、t;<p>  {switch(screen)</p><p>  {case 0:CS1=0;CS2=0;break; //全屏</p><p>  case 1:CS1=0;CS2=1;break; //左半屏</p><p>  case 2:CS1=1;CS2=0;break; //右半屏</p><p>  def

86、ault:break;}</p><p><b>  }</b></p><p>  void clear_screen(uchar screen)//清屏</p><p>  {uchar i,j;</p><p>  select_screen(screen);//先選屏</p><p>  

87、for(i=0;i<8;i++)//控制頁(yè)數(shù)0--7,共8頁(yè)</p><p>  {set_page(i);//設(shè)置頁(yè)</p><p>  set_column(0); //設(shè)置列,每頁(yè)都從第1列開(kāi)始,共64列</p><p>  for(j=0;j<64;j++)//控制列數(shù)0--63,共64列</p><p>  wdata(

88、0x00);//寫(xiě)入0,列地址指針會(huì)自動(dòng)加1 }</p><p><b>  }</b></p><p>  void init()//LCD初始化</p><p>  {busy(); //忙檢測(cè)</p><p>  select_screen(0);//選屏,全屏</p><p>  set

89、_onoff(0);//關(guān)顯示</p><p>  select_screen(0); //選屏,全屏</p><p>  set_onoff(1); //開(kāi)顯示</p><p>  select_screen(0); //選屏,全屏</p><p>  clear_screen(0); //清屏</p><p&g

90、t;  set_line(0); //起始行:0</p><p><b>  }</b></p><p>  void show(uchar screen,uchar page,uchar column,uchar *p)//顯示一個(gè)漢字,一個(gè)漢字有32字節(jié)數(shù)據(jù) </p><p>  {uchar i;//screen表示選擇屏幕,pag

91、e表示頁(yè),column表示列,*p表示漢字的數(shù)組</p><p>  select_screen(screen); //選屏</p><p>  set_page(page); //設(shè)置頁(yè),寫(xiě)上半頁(yè)</p><p>  set_column(column);//設(shè)置列</p><p>  for(i=0;i<16;i++) //控

92、制16列的數(shù)據(jù)輸出</p><p>  wdata(p[i]); //漢字的上半部分</p><p>  set_page(page+1); //寫(xiě)下半頁(yè)</p><p>  set_column(column);//控制列</p><p>  for(i=0;i<16;i++) //控制16列的數(shù)據(jù)輸出</p>&

93、lt;p>  wdata(p[i+16]); //漢字的下半部分</p><p>  }//---------------------------------------------------------------</p><p>  void shuzi(uchar screen,uchar ye,uchar lie,uchar *daima)</p><

94、p>  { uchar i,j;</p><p>  select_screen(screen); //選屏</p><p>  for(i=0;i<2;i++)</p><p>  { wcmd(0xb8+ye+i);</p><p>  for(j=0;j<8;j++)</p><p><b

95、>  {</b></p><p>  wdata(daima[i*8+j]); //寫(xiě)數(shù)據(jù)(數(shù)字)</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p&g

96、t;  //-------------------------------------------------------------------void delay(uint xms) //延時(shí)函數(shù)</p><p><b>  {</b></p><p><b>  int a,b;</b></p><p>  for

97、(a=xms;a>0;a--)</p><p>  for(b=110;b>0;b--);}</p><p>  void initclock() //時(shí)鐘初始化</p><p><b>  {</b></p><p><b>  uint i;</b></p>

98、<p>  TMOD=0x01; //單片機(jī)T0工作于方式1,定時(shí)</p><p>  TH0=(65536-1563)/256; //賦初值</p><p>  TL0=(65536-1563)%256;</p><p>  EA=1; //開(kāi)中斷</p><p>  ET0=1; //開(kāi)定時(shí)

99、器T0中斷</p><p>  TR0=1; //啟動(dòng)T0</p><p><b>  }</b></p><p>  void display() //顯示函數(shù)</p><p>  { uchar bai,shi,ge; //頻率百位 十位 個(gè)位</p><p>  

100、if(num<10)</p><p><b>  {</b></p><p>  pinlv=num*10+10; </p><p><b>  }</b></p><p><b>  if(num>9)</b></p><p><b&

101、gt;  {</b></p><p>  pinlv=(num-9)*50+100;</p><p><b>  }</b></p><p>  bai=pinlv/100;//百位</p><p>  shi=pinlv%100/10;//十位</p><p>  ge=pin

102、lv%100%10;//個(gè)位</p><p>  if(num<10)</p><p><b>  {</b></p><p>  pinlv=num*10+10; </p><p><b>  }</b></p><p><b>  if(num>9

103、)</b></p><p><b>  {</b></p><p>  pinlv=(num-9)*50+100;</p><p><b>  }</b></p><p>  bai=pinlv/100;//百位</p><p>  shi=pinlv%100

104、/10;//十位</p><p>  ge=pinlv%100%10;//個(gè)位</p><p>  //-------------</p><p><b>  if(bai<1)</b></p><p>  shuzi(2,2,0*8,ling);</p><p>  else if(b

105、ai==1)</p><p>  shuzi(2,2,0*8,yi1);</p><p>  else if(bai==2)</p><p>  shuzi(2,2,0*8,er);</p><p>  else if(bai==3)</p><p>  shuzi(2,2,0*8,san1);</p>

106、<p>  else if(bai==4)</p><p>  shuzi(2,2,0*8,si);</p><p>  else if(bai==5)</p><p>  shuzi(2,2,0*8,wu);</p><p>  else if(bai==6)</p><p>  shuzi(2,2,0*8

107、,liu);</p><p>  else if(bai==7)</p><p>  shuzi(2,2,0*8,qi);</p><p>  else if(bai==8)</p><p>  shuzi(2,2,0*8,ba);</p><p>  else if(bai==9)</p><p&

108、gt;  shuzi(2,2,0*8,jiu);</p><p>  //----------------</p><p><b>  if(shi<1)</b></p><p>  shuzi(2,2,1*8,ling);</p><p>  else if(shi==1)</p><p>

109、;  shuzi(2,2,1*8,yi1);</p><p>  else if(shi==2)</p><p>  shuzi(2,2,1*8,er);</p><p>  else if(shi==3)</p><p>  shuzi(2,2,1*8,san1);</p><p>  else if(shi==4)

110、</p><p>  shuzi(2,2,1*8,si);</p><p>  else if(shi==5)</p><p>  shuzi(2,2,1*8,wu);</p><p>  else if(shi==6)</p><p>  shuzi(2,2,1*8,liu);</p><p>

111、;  else if(shi==7)</p><p>  shuzi(2,2,1*8,qi);</p><p>  else if(shi==8)</p><p>  shuzi(2,2,1*8,ba);</p><p>  else if(shi==9)</p><p>  shuzi(2,2,1*8,jiu);&l

112、t;/p><p>  //-----------------</p><p><b>  if(ge<1)</b></p><p>  shuzi(2,2,2*8,ling);</p><p>  else if(ge==1)</p><p>  shuzi(2,2,2*8,yi1);</

113、p><p>  else if(ge==2)</p><p>  shuzi(2,2,2*8,er);</p><p>  else if(ge==3)</p><p>  shuzi(2,2,2*8,san1);</p><p>  else if(ge==4)</p><p>  shuzi(2

114、,2,2*8,si);</p><p>  else if(ge==5)</p><p>  shuzi(2,2,2*8,wu);</p><p>  else if(ge==6)</p><p>  shuzi(2,2,2*8,liu);</p><p>  else if(ge==7)</p><

115、;p>  shuzi(2,2,2*8,qi);</p><p>  else if(ge==8)</p><p>  shuzi(2,2,2*8,ba);</p><p>  else if(ge==9)</p><p>  shuzi(2,2,2*8,jiu);</p><p>  //------------

116、---------</p><p>  if(boxing==0) //顯示sin提示字符</p><p><b>  {</b></p><p>  show(2,0,0*16,zheng); </p><p>  show(2,0,1*16,xian);</p><p>  show

117、(2,0,2*16,bo); </p><p><b>  }</b></p><p>  if(boxing==1) //顯示juxing提示字符</p><p><b>  {</b></p><p>  show(2,0,0*16,ju); </p><p

118、>  show(2,0,1*16,xing1);</p><p>  show(2,0,2*16,bo);</p><p><b>  }</b></p><p>  if(boxing==2) //顯示juchi提示字符</p><p><b>  {</b></p>

119、<p>  show(2,0,0*16,ju1); </p><p>  show(2,0,1*16,chi);</p><p>  show(2,0,2*16,bo);</p><p><b>  }</b></p><p>  if(boxing==3) //顯示tixing提示字符</p

120、><p><b>  {</b></p><p>  show(2,0,0*16,ti); </p><p>  show(2,0,1*16,xing2);</p><p>  show(2,0,2*16,bo);</p><p><b>  }</b></p>&

121、lt;p>  if(boxing==4) //顯示sanjiao提示字符</p><p><b>  {</b></p><p>  show(2,0,0*16,san); </p><p>  show(2,0,1*16,jiao);</p><p>  show(2,0,2*16,bo);</

122、p><p><b>  }</b></p><p><b>  }</b></p><p>  void keyscan()//鍵盤(pán)檢測(cè)函數(shù)</p><p><b>  {</b></p><p>  if(s1==0)//S1按下 波

123、形頻率加10鍵</p><p>  { EA=0; //關(guān)中斷</p><p>  delay(2); //延時(shí)去抖</p><p>  if(s1==0) //再判</p><p>  {while(!s1);//等待釋放</p><p>  num++;//頻率控制變量加1&l

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論