測控課程設計--簡易低頻信號發(fā)生器的設計_第1頁
已閱讀1頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  《測控系統(tǒng)原理與設計》課程設計</p><p>  課題:簡易低頻信號發(fā)生器的設計</p><p>  班級 測控112班 學號 </p><p>  學生姓名 </p><p>  專業(yè) 測控技術與儀器

2、 </p><p>  系別 測控系 </p><p>  指導教師 </p><p><b>  電子與電氣工程學院</b></p><p><b>  2014年6月</b>&

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

4、;b>  2、設計指標</b></p><p>  以單片機為核心,經過D/A轉換和放大電路的處理,最后輸出信號;</p><p>  要求能輸出正弦波、三角波和方波三種信號;</p><p>  輸出信號可以通過按鍵來改變</p><p><b>  完成系統(tǒng)電路設計;</b></p>

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

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

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

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

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

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

11、…………………9</p><p>  2.5 液晶顯示電路 …………………………………………………………9</p><p><b>  三、系統(tǒng)調試與驗證</b></p><p>  3.1調試結果(仿真結果)截圖 ………………………………………10</p><p>  四、課程設計體會與總結…………………………

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

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

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

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

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

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

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

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

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

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

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

23、境,也需要按復位鍵重新啟動。因此,復位電路是單片機系統(tǒng)中不可缺少的一部分。</p><p>  圖2-2,單片機最小系統(tǒng)</p><p>  2.3 D/A轉換模塊部件</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ù)鎖存允許控制信號輸入線,高電平有效。</p><p>  CS:選片信號輸入線(選通數(shù)據(jù)鎖存器),低電平有效。</p><p>  WR1:數(shù)據(jù)鎖存器寫選選通輸入線,負脈沖有效,由ILE、CS、WR1的邏輯組合產生LE1,當LE

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

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

27、接到外部運算放大器的輸出端,這樣相當于將一個反饋電阻接在運算放大器的輸出端和輸入端之間。</p><p>  VREF:參考電壓輸入端,此端可接一個正電壓,也可接一個負電壓,它決定0至255的數(shù)字量轉化出來的模擬量電壓值的幅度,VREF范圍為(+10~-10)V。VREF端與D/A內部T形電阻網(wǎng)絡相連。</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>  簡介: </

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

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

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

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

33、gt;<p>  2.5 液晶顯示電路</p><p><b>  三、系統(tǒng)調試與驗證</b></p><p>  3.1調試結果(仿真結果)截圖</p><p>  本系統(tǒng)是在protues下仿真,使用Keil C編程。從而實現(xiàn)其設計及仿真。</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>  四、總結與展望</b></p><p>  本次的設計中利用AT89C52和DAC0832以及放大器完成電路的設計,用開關來控制各種波形的發(fā)

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

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

38、波形發(fā)生器的原理,在實際動手操作過程中,使我接觸了許多我以前沒接觸過的元件,而且重新溫習了剛學不久的匯編語言,使我學得了許多知識,使我獲益匪淺。</p><p>  這次課程設計,使我的動手能力得到了很大的提高,更使我們懂得理論知識的重要性,沒有理論的指導一切實際行動都是盲目的,且實際操作是我們得到的理論知識得到驗證,更能增加對理論知識的理解。</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開左屏幕,CS1=1關左屏幕</p><p>  sbit CS2=P2^1;//片選2,低電平有效,C

42、S2=0開右屏幕,CS2=1關右屏幕</p><p>  sbit RS=P2^2;//數(shù)據(jù),指令選擇信號,RS=1為數(shù)據(jù)操作,RS=0為寫指令或讀狀態(tài)(一般為讀忙標志)</p><p>  sbit RW=P2^3;//讀寫選擇信號,RW=1為讀選通,RW=0為寫選通</p><p>  sbit EN=P2^4;//讀寫使能信號</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()//忙檢測函數(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結果為真則一直執(zhí)行空操作,也就是說P0&0X80為0則結束循環(huán)</p><p><b>  EN=0;</b></p><p><b>  }</b></p><p>  void wcmd(uchar cmd)</p><p>  {busy(); //每次寫入

78、指令或數(shù)據(jù)之前都進行忙檢測</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下降沿寫入數(shù)據(jù)和指令</

79、p><p><b>  EN=0;}</b></p><p>  void wdata(uchar dat) //寫命令和寫數(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下降沿寫入數(shù)據(jù)和指令</p><p><b>  EN=0;}</b></p><p>  

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

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

84、onoff取值為0或1</p><p>  {onoff|=0x3e;//0X3E是關顯示,0X3F是開顯示</p><p>  wcmd(onoff);//所以若onoff為0,則表示關顯示,onoff為1,則表示開顯示}</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++)//控制頁數(shù)0--7,共8頁</p><p>  {set_page(i);//設置頁</p><p>  set_column(0); //設置列,每頁都從第1列開始,共64列</p><p>  for(j=0;j<64;j++)//控制列數(shù)0--63,共64列</p><p>  wdata(

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

89、_onoff(0);//關顯示</p><p>  select_screen(0); //選屏,全屏</p><p>  set_onoff(1); //開顯示</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)//顯示一個漢字,一個漢字有32字節(jié)數(shù)據(jù) </p><p>  {uchar i;//screen表示選擇屏幕,pag

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

92、制16列的數(shù)據(jù)輸出</p><p>  wdata(p[i]); //漢字的上半部分</p><p>  set_page(page+1); //寫下半頁</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]); //寫數(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ù)</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() //時鐘初始化</p><p><b>  {</b></p><p><b>  uint i;</b></p>

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

99、器T0中斷</p><p>  TR0=1; //啟動T0</p><p><b>  }</b></p><p>  void display() //顯示函數(shù)</p><p>  { uchar bai,shi,ge; //頻率百位 十位 個位</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;//個位</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;//個位</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()//鍵盤檢測函數(shù)</p><p><b>  {</b></p><p>  if(s1==0)//S1按下 波

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論