




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《測控系統原理與設計》課程設計課題:簡易低頻信號發生器的設計班級測控112班學號學生姓名專業測控技術與儀器系別測控系指導教師淮陰工學院電子與電氣工程學院2014年6月一、課題介紹1、簡易低頻信號發生器的設計設計一個基于單片機的函數信號發生器,該函數信號發生器可以輸出三種波形,有正弦波,方波和三角波。在此基礎上進一步實現對波形頻率和占空比的調節,并用液晶屏分兩行顯示波形名稱和波形頻率2、設計指標1)以單片機為核心,經過D/A轉換和放大電路的處理,最后輸出信號;2)要求能輸出正弦波、三角波和方波三種信號;3)輸出信號可以通過按鍵來改變4)完成系統電路設計;5)完成系統軟件設計;6)完成系統Proteus下的仿真。3、功能該函數信號發生器可以輸出正弦波,三角波,方波。在此基礎上進一步實現對波形頻率和占空比的調節,并用液晶屏分兩行顯示波形名稱和波形頻率。4、創新點該信號發生器可以輸出鋸齒波、梯形波,并且有液晶屏顯示波形頻率二、摘要本次作品是一個基于單片機設計的函數信號發生器。函數信號發生器的設計方法有多種,利用單片機設計的函數信號發生器具有編程靈活,功能更以擴充等實際的優點。利用單片機設計的函數信號發生器能夠產生正弦波,三角波,方波,并實現對頻率和占空比的調節,以及液晶屏顯示波形名稱和波形頻率,波形的切換和頻率的調節以及占空比的改變都可以用按鍵實現。經過設計及后期長時間的調試,設計的所有功能均已實現。關鍵詞:單片機,函數發生器,液晶LCD目錄一、系統方案的設計TOC\o"1-5"\h\z設計要求3系統基本方案3各模塊方案選擇3二、系統的硬件設計AT89C52的功能介紹42.2單片機的最小系統5D/A轉換模塊部件6DAC0832芯片原理6放大部LM3247D/A轉換模塊的放大電路和濾波電路82.4鍵盤電路92.5液晶顯示電路9三、系統調試與驗證3.1調試結果(仿真結果)截圖10四、課程設計體會與總結12五、參考文獻附錄一程序清單13附錄二電路原理圖42一、系統方案的設計1.1設計要求基本功能:(1)簡易低頻信號發生器要求輸出50Hz的方波、三角波和正弦波。通過按鍵切換。方波的占空比可調。1.2系統基本方案本系統用AT89C52單片機作為核心部件,低頻信號源在設計制作過程中主要考慮其簡易實用,通過DAC0832把數字量轉換為模擬量,在DAC0832的輸出端接運算放大器,由運算放大器產生波形,而DAC0832工作于單緩沖方式,其中輸入寄存器受控,而DAC寄存器直通。顯示部分通過使用數碼管顯示輸出波形的頻率,示波器以正負電壓的形式輸出波形。根據設計要求和初期設想,系統可分為主控模塊、波形種類顯示模塊、波形產生電路模塊、頻率顯示模塊和按鍵控制模塊。本系統設置所用到的電源為5V的直流穩壓電源,基準電壓+15V,通過DAC0832進行數模轉換,在電流的輸出端采用TL082集成芯片進行放大、整形。1.3各模塊方案選擇主控模塊采用ATMEL公司生產的AT89C52單片機作為系統的控制器。51系列的單片機的使用簡單,軟件編程靈活。頻率顯示模塊采用液晶屏顯示波形種類顯示模塊示波器是一種用途十分廣泛的電子測量儀器,在被測信號的作用下,電子束就好像一支筆的筆尖,可以在屏面上描繪出被測信號的瞬時值的變化曲
線。利用示波器能觀察各種不同信號幅度隨時間變化的波形曲線,如本實驗所需的方波、三角波和正弦波。波形產生模塊DAC0832芯片是8位并行、中速(建立時間1us)、CMOS工藝制造的8位單片D/A轉換,各支路的電流信號經過電阻網絡加權后,由運算放大器求和并變換成電壓信號,作為D/A轉換器的輸出。DAC0832換器轉換控制容易等優點,在單片機應用系統中得到了廣泛的應用。按鍵控制模塊:采用是四個輕觸開關來控制頻率的增加和減少以及波形種類切換的顯示。二、系統的硬件設計AT89C52的功能介紹AT89C52為8位通用微處理器T2FF1.0匚1'-一%□VccT2EK/F1.1E233□FO.07ADCP1.2Eaae□PO.1/J1D1F1.3匚437□PO.F1.4匚536□FO.3/JID3P1.5E匚35□FO.4/JID4-P1.&1:「34□PD.5HD5F1.7匚&33□FC.6/JID&RST匚332□FO.TFgKHI/P3.0E1031□EA/VPJTKI/P3.1E1130□ALE/PEJOG-INT0/P3.2匚1229□PESWINT1/P3.3匚1928□P2.7/J115T0/FS.4E1427□時.泌14T1/F3.5匚1526□F2.5/J1136匚1625□F2.4M1ZEI?P3.7E1724□F2.1823□F£,XTAL1E1922□F2.1/J19FDIF&血c2021□P2.0/A8圖2.PDIP封裝的AT89C52引腳圖采用工業標準的C51內核,在內部功能及管腳排布上與通用的8xc52相同,其主要用于會聚調整時的功能控制。功能包括對會聚主IC內部寄存器、數據RAM及外部接口等功能部件的初始化,會聚調整控制,會聚測試圖控制,紅外遙控信號IR的接收解碼及與主板CPU通信等。主要管腳有: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腳定義為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12腳、27腳及28腳定義為握手信號功能端口,連接主板CPU的相應功能端,用于當前制式的檢測及會聚調整狀態進入的控制功能。2.2單片機最小系統其作用主要是為了保證單片機系統能正常工作。如圖2-2所示,單片機最小系統主要由AT89S51單片機、外部振蕩電路、復位電路和+5V電源組成。在外部振蕩電路中,單片機的XTAL1和XTAL2管腳分別接至由12MHZ晶振和兩個30PF電容構成的振蕩電路兩側,為電路提供正常的時鐘脈沖。在復位電路中,單片機RESET管腳一方面經20F的電容接至電源正極,實現上電自動復位,另一方面經開關s接電源。其主要功能是把PC初始化為0000H,是單片機從0000H單元開始執行程序,除了進入系統的初始化之外,當由于程序出錯或者操作錯誤使系統處于死鎖狀態時,為了擺脫困境,也需要按復位鍵重新啟動。因此,復位電路是單片機系統中不可缺少的一部分。
圖2-2,單片機最小系統D/A轉換模塊部件DAC0832芯片原理管腳功能介紹(如圖3所示)7玉540直137玉540直13lsbDI0cVIout1DI1Iout2DI2DI3RfbDI4DI5VrefDI6msbDI7ILECSWR2XferWR1DAC0832圖3DAC0832管腳圖111219。18?0—U2DI7?DI0:8位的數據輸入端,DI7為最高位。ILE:數據鎖存允許控制信號輸入線,高電平有效。CS:選片信號輸入線(選通數據鎖存器),低電平有效。WR1:數據鎖存器寫選選通輸入線,負脈沖有效,由ILE、CS、WR1的邏輯組合產生LE1,當LE1為高電平時,數據鎖存器狀態隨輸入數據線變化,LE1的負跳變時將輸入數據鎖存。XFER:數據傳輸控制信號輸入線,低電平有效,負脈沖有效。WR2:DAC寄存器選通輸入線,負脈沖有效,由WR2、XFER的邏輯組合產生LE2,當LE2為高電平時,DAC寄存器的輸出隨寄存器的輸入而變化,LE2的負跳變時將數據鎖存器的內容打入DAC寄存器并開始D/A轉換。IOUT1:模擬電流輸出端1,當DAC寄存器中數據全為1時,輸出電流最大,當DAC寄存器中數據全為0時,輸出電流為0。IOUT2:模擬電流輸出端2,IOUT2與IOUT1的和為一個常數,即IOUT1+IOUT2=常數。RFB:反饋電阻引出端,DAC0832內部已經有反饋電阻,所以RFB端可以直接接到外部運算放大器的輸出端,這樣相當于將一個反饋電阻接在運算放大器的輸出端和輸入端之間。VREF:參考電壓輸入端,此端可接一個正電壓,也可接一個負電壓,它決定0至255的數字量轉化出來的模擬量電壓值的幅度,VREF范圍為(+10~-10)V。VREF端與D/A內部T形電阻網絡相連。Vcc:芯片供電電壓,范圍為(+5~+15)V。AGND:模擬量地,即模擬電路接地端。DGND:數字量地。放大部分LM324LM324引腳圖(管腳圖)管腳連接圖(俯視圖)圖5LM324引腳圖簡介:LM324系列器件為價格便宜的帶有真差動輸入的四運算放大器。與單電源應用場合的標準運算放大器相比,它們有一些顯著優點。該四放大器可以工作在低到3.0伏或者高到32伏的電源下,靜態電流為MC1741的靜態電流的五分之一。共模輸入范圍包括負電源,因而消除了在許多應用場合中采用外部偏置元件的必要性。它有5個引出腳,其中“+”、"-”為兩個信號輸入端,“V+”、“V-”為正、負電源端,“Vo”為輸出端。兩個信號輸入端中,Vi-(-)為反相輸入端,表示運放輸出端Vo的信號與該輸入端的位相反;Vi+(+)為同相輸入端,表示運放輸出端Vo的信號與該輸入端的相位相同。D/A轉換模塊的放大電路和濾波電路LM324的5管腳與DAC0832的(IOUT2)管腳相連,LM324的6管腳與DAC0832的(IOUT1)管腳相連,LM324的7管腳與DAC0832的REF管腳相連.第一級運算放大器的作用是將DAC0832輸出的電流信號轉化為電壓信號V1,第二級運算放大器的作用是將V1通過反向放大電路-(R2/R1)倍。在第二個運算放大器的輸出端連了一個低通濾波器。如果不加低通濾波器,也能夠生成波形,但是產生的信號中毛刺很多,加一個低通濾波器不僅起到的濾波的作用,還起到了平滑的作用。低通濾波器的截止頻率F=1/(2*pi*R3*C6),這里我們選擇R3為100歐姆電阻,C6為104電容,截止頻率F=16KHZ。實驗表明,此時的輸出波形效果不錯。GND1GND2GND18VCC19GND17DI07DI16DI25DI34DI416DI515DI614DI713IOUT1TOUT?GNDGND2.4鍵盤電路鍵盤用的是上拉電阻,選通接地的形式。S2,S3,S4分別控制頻率的增,頻率的減,變換波形。2.5液晶顯示電路>>>>>>>>€€c€€c£€S.--4-3T--1-0T1一11~1L-11-116二、系統調試與驗證3.1調試結果(仿真結果)截圖本系統是在protues下仿真,使用KeilC編程。從而實現其設計及仿真。3.1.1正弦波仿真圖ChannelB~ChannelAChannelCChannelD圖8正弦波圖3.1.2三角波仿真圖ChannelB~ChannelAChannelCChannelDHorizontal圖9三角波圖3.1.3鋸齒波仿真圖ChannelCDigitalOsalloscope圖10鋸齒波圖3.1.4方波仿真圖ChannelC圖11方波圖3.1.5梯形波仿真圖DigitalOscilloscope四、總結與展望本次的設計中利用AT89C52和DAC0832以及放大器完成電路的設計,用開關來控制各種波形的發生及轉換,用單片機輸出后,經過模數轉換器生成波形,最終可以通過示波器觀察。在這次的軟件設計中,程序設計采用的是匯編語言。匯編語言具有速度快,可以直接對硬件進行操作的優點,它可以極好的發揮硬件的功能。但是匯編語言也存在編寫的代碼非常難懂,不好維護,很容易產生bug,難于調試的缺點。因此,在大型程序的設計中,多采用C語言進行程序編譯。C語言簡潔高效,是最貼近硬件的高級編程語言,經過多年的發展,現在已成熟為專業水平的高級語言。而且,現在單片機產品推出時紛紛配套了C語言編譯器,應用廣泛。不過就本次課程設計來說,匯編語言還是適用的。由于真正意義上的程序設計還不多,因此還不是很得心應手,所以在設計中遇到一些問題和一些難點。比如:在程序設計中如何實現程序結構的最優化,以達到較高的質量。這是以后設計中要注意的問題。通過這次課程設計,我進一步了解了波形發生器的原理,在實際動手操作過程中,使我接觸了許多我以前沒接觸過的元件,而且重新溫習了剛學不久的匯編語言,使我學得了許多知識,使我獲益匪淺。這次課程設計,使我的動手能力得到了很大的提高,更使我們懂得理論知識的重要性,沒有理論的指導一切實際行動都是盲目的,且實際操作是我們得到的理論知識得到驗證,更能增加對理論知識的理解。附錄一程序#include<reg52.h>#include<math.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedchar#defineulongunsignedlongcharnum,boxing,u;//定義全局變量uintpinlv;sbits1=P2”5;sbits2=P2”6;sbits3=P2”7;sbitCS1=P2"0;//片選1,低電平有效,CS1=0開左屏幕,CS1=1關左屏幕sbitCS2=P2"1;//片選2,低電平有效,CS2=0開右屏幕,CS2=1關右屏幕sbitRS=P2"2;//數據,指令選擇信號,RS=1為數據操作,RS=0為寫指令或讀狀態(一般為讀忙標志)sbitRW=P2”3;//讀寫選擇信號,RW=1為讀選通,RW=0為寫選通sbitEN=P2”4;//讀寫使能信號ucharcodesin[64]=(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,146,133,121,108,96,84,72,61,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};ucharcodejuxing[64]={255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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};ucharcodejuchi[64]=(0,4,8,12,16,20,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,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255};ucharcodetixing[64]=(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,247,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};ucharcodesanjiao[64]=(0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,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};ucharcodebo[]=//波(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,0x81,0x80,0x00};ucharcodexing□二//形(0x80,0x82,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,0x000};ucharcodepin□二//頻(0x40,0x7C,0x40,0x7F,0x48,0x48,0x40,0xF2,0x12,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00,0x90,0x8E,0x40,0x4F,0x20,0x1E,0x80,0x4F,0x20,0x18,0x07,0x10,0x20,0x4F,0x80,0x00};ucharcodelv[]=//率(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};ucharcodezheng□二//正(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};ucharcodexian□二〃弓玄(0x02,0xE2,0x22,0x22,0x3E,0x00,0x08,0x88,0x48,0x39,0x0E,0x08,0xC8,0x08,0x08,0x00,0x00,0x43,0x82,0x42,0x3E,0x00,0x21,0x71,0x29,0x25,0x23,0x21,0x28,0x70,0x00,0x00};ucharcodeju[]=//矩(0x90,0x88,0x87,0xFC,0x84,0x84,0x80,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,0x80,0x60,0x18,0x07,0x08,0x30,0x00,0x7F,0x44,0x44,0x44,0x44,0x44,0x47,0x40,0x00};ucharcodexing1[]=//形(0x80,0x82,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};ucharcodeju1[]=//鋸(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};ucharcodechi□二//齒(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,0x48,0x50,0x40,0xFF,0x00,0x00,0x00};ucharcodeti[]=//梯(0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xC9,0x4E,0x48,0xF8,0x4C,0x4B,0x78,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x20,0x13,0x0A,0x06,0xFF,0x02,0x12,0x22,0x1E,0x00};ucharcodexing2[]=//形(0x80,0x82,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};ucharcodesan[]=//三(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};ucharcodejiao[]=//角(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,0x7F,0x00,0x00,0x00};ucharcodeling□二(0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};ucharcodeyi1[]=(0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,};ucharcodeer[]=(0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,};ucharcodesan1[]=(0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,};ucharcodesi[]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,};ucharcodewu[]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,};ucharcodeliu[]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,};ucharcodeqi[]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,};ucharcodeba[]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,};ucharcodejiu[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,};ucharcodehe[]={0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,};ucharcodezi[]={0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,};voidbusy()//忙檢測函數(P0=0X00;〃這句不能少RS=0;RW=1;EN=1;while(P0&0X80);//P0&0X80結果為真則一直執行空操作,也就是說P0&0X80為0則結束循環EN=0;}voidwcmd(ucharcmd)(busy();//每次寫入指令或數據之前都進行忙檢測RS=0;RW=0;P0=cmd;EN=1;_nop_();_nop_();//在EN下降沿寫入數據和指令EN=0;}voidwdata(uchardat)//寫命令和寫數據只在RS=0或RS=1上不同,其余都相同(busy();RS=1;RW=0;P0=dat;EN=1;_nop_();_nop_();//在EN下降沿寫入數據和指令EN=0;}voidset_page(ucharpage)//設置頁,12864LCD共有8頁,每頁有8行點陣點。{page=0xb8|page;〃首頁地址為0XB8wcmd(page);//page取值范圍為0~7,表示第1到8頁}voidset_line(ucharline)//設置顯示的起始行,共有0--63行,一般從0行開始顯示(line=0xc0|line;〃起始行地址0XC0wcmd(line);//line取值范圍為0~63,表示第1到64行}voidset_column(ucharcolumn)//設置顯示的列{//column二column&0x3f;//列的最大值為0X3F,即64column=0x40|column;//列的首地址為0X40,wcmd(column);//column的取值范圍為0~63,共64列}voidset_onoff(ucharonoff)//設置顯示開關,onoff取值為0或1{onoff|=0x3e;//0X3E是關顯示,0X3F是開顯示wcmd(onoff);//所以若onoff為0,則表示關顯示,onoff為1,則表示開顯示}voidselect_screen(ucharscreen)//選屏,screen取值范圍為0,1,2{switch(screen){case0:CS1=0;CS2=0;break;//全屏case1:CS1=0;CS2=1;break;//左半屏case2:CS1=1;CS2=0;break;//右半屏default:break;}}voidclear_screen(ucharscreen)//清屏{uchari,j;select_screen(screen);//先選屏for(i=0;i<8;i++)//控制頁數0--7,共8頁{set_page(i);//設置頁set_column(0);//設置列,每頁都從第1列開始,共64列for(j=0;j<64;j++)//控制列數0--63,共64列wdata(0x00);//寫入0,列地址指針會自動加1}}voidinit()//LCD初始化(busy();//忙檢測select_screen(0);//選屏,全屏set_onoff(0);//關顯示select_screen(0);〃選屏,全屏set_onoff(1);〃開顯示select_screen(0);〃選屏,全屏clear_screen(0);//清屏set_line(0);〃起始行:0}voidshow(ucharscreen,ucharpage,ucharcolumn,uchar*p)//顯示一個漢字,一個漢字有32字節數據(uchari;//screen表示選擇屏幕,page表示頁,column表示列,*p表示漢字的數組select_screen(screen);//選屏set_page(page);//設置頁,寫上半頁set_column(column);//設置列for(i=0;i<16;i++)〃控制16列的數據輸出wdata(p[i]);//漢字的上半部分set_page(page+1);〃寫下半頁set_column(column);〃控制列for(i=0;i<16;i++)〃控制16列的數據輸出wdata(p[i+16]);//漢字的下半部分}//voidshuzi(ucharscreen,ucharye,ucharlie,uchar*daima)(uchari,j;select_screen(screen);//選屏for(i=0;i<2;i++)(wcmd(0xb8+ye+i);for(j=0;j<8;j++)(wdata(daima[i*8+j]);//寫數據(數字)}}}//voiddelay(uintxms)//延時函數(inta,b;for(a=xms;a>0;a--)for(b=110;b>0;b--);}voidinitclock()//時鐘初始化(uinti;TMOD=0x01;//單片機T0工作于方式1,定時TH0=(65536-1563)/256;//賦初值TL0=(65536-1563)%256;EA=1;//開中斷ET0=1;〃開定時器T0中斷TR0=1;〃啟動T0}voiddisplay()//顯示函數(ucharbai,shi,ge;〃頻率百位十位個位if(num<10)(pinlv二num*10+10;#^0)4?if(num〉9)pinlvn(num—9)*50+100:baiHpinlv/100;//mlashiHpinlvKloo/10;z/+ageHpinIVKIOOKIO;二療聲if(num〈lepinlVHnum*g+l。-if(num〉9)pinlvn(num——9)*50+100;baiHpinlv/100;二『曰shiHpinlvKloo/10;z/+ageHpinlvKsOKlo;二療曰二if(bai〈l)shuzi(2,2,0*8,ling);elseif(bai==1)shuzi(2,2,0*8,yi1);elseif(bai==2)shuzi(2,2,0*8,er);elseif(bai==3)shuzi(2,2,0*8,san1);elseif(bai==4)shuzi(2,2,0*8,si);elseif(bai==5)shuzi(2,2,0*8,wu);elseif(bai==6)shuzi(2,2,0*8,liu);elseif(bai==7)shuzi(2,2,0*8,qi);elseif(bai==8)shuzi(2,2,0*8,ba);elseif(bai==9)shuzi(2,2,0*8,jiu);//if(shi<1)shuzi(2,2,1*8,ling);elseif(shi==1)shuzi(2,2,1*8,yi1);elseif(shi==2)shuzi(2,2,1*8,er);elseif(shi==3)shuzi(2,2,1*8,san1);elseif(shi==4)shuzi(2,2,1*8,si);elseif(shi==5)shuzi(2,2,1*8,wu);elseif(shi==6)shuzi(2,2,1*8,liu);elseif(shi==7)shuzi(2,2,1*8,qi);elseif(shi==8)shuzi(2,2,1*8,ba);elseif(shi==9)shuzi(2,2,1*8,jiu);//if(ge<1)shuzi(2,2,2*8,ling);elseif(ge==1)shuzi(2,2,2*8,yi1);elseif(ge==2)shuzi(2,2,2*8,er);elseif(ge==3)shuzi(2,2,2*8,san1);elseif(ge==4)shuzi(2,2,2*8,si);elseif(ge==5)shuzi(2,2,2*8,wu);elseif(ge==6)shuzi(2,2,2*8,liu);elseif(ge==7)shuzi(2,2,2*8,qi);elseif(ge==8)shuzi(2,2,2*8,ba);elseif(ge==9)shuzi(2,2,2*8,jiu);//if(boxing==0)//顯示sin提示字符(show(2,0,0*16,zheng);show(2,0,1*16,xian);show(2,0,2*16,bo);}if(boxing==1)〃顯示juxing提示字符(show(2,0,0*16,ju);show(2,0,1*16,xing1);show(2,0,2*16,bo);}if(boxing==2)//顯示juchi提示字符(show(2,0,0*16,ju1);show(2,0,1*16,chi);show(2,0,2*16,bo);}if(boxing==3)//顯示tixing提示字符(show(2,0,0*16,ti);
show(2,0,1*16,xing2);show(2,0,2*16,bo);}if(boxing==4)(show(2,0,0*16,san);show(2,0,1*16,jiao);show(2,0,2*16,bo);}}voidkeyscan()(if(s1==0)(EA=0;delay(2);if(s1==0){while(!s1);num++;//顯示sanjiao提示字符//鍵盤檢測函數//S1按下波形頻率加10鍵//關中斷//延時去抖〃再判〃等待釋放〃頻率控制變量加1if(num==12)num=0;}display();EA=1;//開中斷if(num>9)(EA=0;//關中斷〃頻率大于100,在主程序中進行調用}}}if(s2==0)//波形頻率減10鍵(EA=0;delay(5);if(s2==0)(while(!s2);num--;if(num<0)(num=0;}display();EA=1;if(num>9)(EA=0;}}}if(s3==0)〃波形選擇鍵(EA=0;delay(5);if(s3==0)(while(!s3);boxing++;if(boxing==5)(boxing=0;}display();EA=1;}}}voiddelaym()〃短暫延時(_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}voidmain()//主函數(init();//LCD初始化clear_screen(0);//清屏set_line(0);//顯示開始行initclock();//定時器初始化//csda=0;wr=0;//DAC0832//顯示sanjiao提示字符//鍵盤檢測函數//S1按下波形頻率加10鍵//關中斷//延時去抖〃再判〃等待釋放〃頻率控制變量加1//3*16表示從第48列開始顯示,前面空出0?477列(即3個漢字的位置)show(1,0,3*16,ying);//迎//2表示右屏顯示,0表示從0頁開始顯示//0*16表示從第0列開始顯示(即第一個漢字的位置)show(2,0,0*16,fang);//訪//1*16表示從第16列開始顯示,前面空出0~15列(即一個漢字的位置)TOC\o"1-5"\h\zshow(2,0,1*16,wen);//問//左屏開,從第3頁(共8頁)第0列開始顯示,即第3,4頁顯示〃伊人憔悴百度空間〃幾個字show(1,2,0*16,yi);//伊show(1,2,1*16,ren);//人show(1,2,2*16,qiao);//憔show(1,2,3*16,cui);//悴show(2,2,0*16,bai);//百show(2,2,1*16,du);//度show(2,2,2*16,kong);//空show(2,2,3*16,jian);//間*/show(1,0,0*16,bo);//波show(1,0,1*16,xing);//形show(1,2,0*16,pin);//頻show(1,2,1*16,lv);〃率/*shuzi(2,4,0*8,ling);shuzi(2,4,1*8,yi1);shuzi(2,4,2*8,er);shuzi(2,4,3*8,san1);shuzi(2,4,4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論