多功能信號發(fā)生器的設計與實現_第1頁
多功能信號發(fā)生器的設計與實現_第2頁
多功能信號發(fā)生器的設計與實現_第3頁
多功能信號發(fā)生器的設計與實現_第4頁
多功能信號發(fā)生器的設計與實現_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

題目多功能信號發(fā)生器的設計與實現學生姓名王振華學號1213014069所在學院專業(yè)班級電子信息工程指導教師梁芳完成地點物理與電信工程學院實驗室2023年6月2日多功能信號發(fā)生器的設計與實現王振華〔陜西理工學院物理與電信工程學院電子信息工程專業(yè),2023級3班,陜西漢中723000〕指導教師:梁芳[摘要]本文介紹的是利用STC12C5A60S2單片機和數模轉換器件DAC0832產生所需不同信號的低頻信號源,其信號幅度和頻率都是可以按要求控制的。文中簡要介紹了DAC0832數模轉換器的結構原理和使用方法,STC12C5A60S2的根底理論,以及與設計電路有關的各種芯片。著重介紹了如何利用單片機控制D/A轉換器產生上述信號的硬件電路和軟件編程。信號頻率幅度也按要求可調。本設計核心任務是:以STC12C5A60S2為核心,結合D/A轉換器和DAC0832等器件,用仿真軟件設計硬件電路,用C語言編寫驅動程序,以實現程序控制產生正弦波、三角波、方波、三種常用低頻信號??梢酝ㄟ^鍵盤選擇波形和輸入任意頻率值。[關鍵詞]單片機;LCD1602;信號發(fā)生器;DAC0832DesignandimplementationofmultifunctionsignalgeneratorAuthor:ZhenhuaWang(Grade12,Class03,MajorinElectronics&Informationengineering,Physics&TelecommunicationsengineeringDept.,ShaanxiUniversityofTechnology,Hanzhong723000,Shaanxi)Tutor:FangLiangAbstract:ThisarticledescribestheSTC12C5A60S2microcontrolleranddigitaltoanalogconverterDAC0832toproducethedesiredsignalofthelowfrequencysignalsource,thesignalamplitudeandfrequencycanbecontrolledasrequired.ThearticlebrieflydescribesthestructureofprinciplesanduseoftheDAC0832digital-to-analogconverter,theSTC12C5A60S2basictheoryanddesignofcircuitsavarietyofchips.ThepaperfocusesonhowtousemicrocontrollertocontroltheD/Aconvertertoproducethehardwareandsoftwareprogrammingoftheabovesignals.Thesignalfrequencyrangeisalsoadjustableasrequired.Thecoreofthedesigntasksare:STC12C5A60S2astheD/AconverterandDAC0832devices,circuitsimulationsoftware,designhardwaredriverswritteninC,inordertoachieveprocesscontroltoproducesinewave,trianglewave,squarewave,threecommonlyusedlow-frequencysignals.Waveformsandenteranyfrequencyvaluecanbeselectedviathekeyboard.KeyWords:onSTC12C5A60S2functionwaveformgeneratorDAC0832squarewave,trianglewave,sinewave,sawtoothwave目錄240981引言1287541.1目的和意義194941.2研究概況及開展趨勢146691.3本系統主要功能2352.總體方案論證與設計32030631133931388832981041065342843044948577805216273.1.1STC12C5A60S2單片機主要特性5121783.1.2STC12C5A60S2單片機的中斷系統7237233.1.3單片機最小系統設計8140653.2LCD液晶顯示器簡介8279953.2.1液晶原理介紹831901928873916928101880510293343.4.1直接數字合成技術介紹11261793.4.2DAC0832芯片介紹12309123.4.3DAC0832波形發(fā)生電路設計1322231348323.6負壓轉換電路設計14219581531321152041316957418137018233941828045結論1928045致謝 2028045參考文獻 2122647附錄A 2225524附錄B 234821附錄C244821附錄D 404821附錄E 454821附錄F 481引言1.1目的和意義信號發(fā)生器亦稱波形發(fā)生器,主要作為實驗用信號源,是現今各種電子電路實驗設計應用中必不可少的儀器設備之一。目前,市場上常見的波形發(fā)生器多為純硬件的搭接而成,波形種類多為鋸齒、正弦、方波、三角等波形。用分立元件組成的信號發(fā)生器,通常是單信號發(fā)生器且頻率不高,其工作不很穩(wěn)定,不易調試;用集成芯片的信號發(fā)生器,可到達較高的頻率和產生多種波形信號,但電路較為復雜且不易調試。利用DA轉換器配合單片機可以實現波形產生的功能,而且可以根據需要進行調整,設計靈活。隨著電子測量及其他部門對各類信號發(fā)生器的廣泛需求及電子技術的迅速開展促使信號發(fā)生器種類增多性能提高尤其隨著70年代微處理器的出現更促使信號發(fā)生器向著自動化智能化方向開展現在許多信號發(fā)生器帶有微處理器因而具備了自校自檢自動故障診斷和自動波形形成和修正等功能可以和控制計算機及其他測量儀器一起方便的構成自動測試系統當前信號發(fā)生器總的趨勢是向著寬頻率覆蓋低功耗高頻率精度多功能自動化和智能化方向開展[1]。在科學研究工程教育及生產實踐中如工業(yè)過程控制教學實驗機械振動試驗動態(tài)分析材料試驗生物醫(yī)學等領域常常需要用到低頻信號發(fā)生器而在我們日常生活中以及一些科學研究中鋸齒波和正弦波矩形波信號是常用的根本測試信號譬如在示波器電視機等設備中為了使電子按照一定規(guī)律運動以利用熒光屏顯示圖像常用到鋸齒波產生器作為時基電路信號發(fā)生器作為一種通用的電子儀器在生產科研測控通訊等領域都得到了廣泛的應用但市面上能看到的儀器在頻率精度帶寬波形種類及程控方面都已不能滿足許多方面實際應用的需求加之各類功能的半導體集成芯片的快速生產都使我們研制一種低功耗寬頻帶能產生多種波形并具有程控等低頻的信號發(fā)生器成為可能[2]。信號發(fā)生器作為一種常見的電子儀器設備,既能夠構成獨立的信號源,也可以是高新能的網絡分析儀,頻譜儀以及自動測試裝備的組成局部,函數信號發(fā)生器的關鍵技術是多種高性能儀器的根本組成局部,函數信號發(fā)生器的關鍵技術是多種高性能儀器的支撐技術,因為它是能夠提高質量的精密信號源及掃描源,可使相應系統的檢測過程大大簡化,降低檢測費用并且提高檢測精度。1.2研究概況及開展趨勢信號發(fā)送器是指產生所需參數的電測試信號的儀器。因其應用廣泛,種類繁多,特性各異,分類也不盡一致。按信號波形可分為正弦信號、函數信號、脈沖信號和隨機信號發(fā)生器等四大類。信號波形發(fā)生器具有連續(xù)的相位變換、和頻率穩(wěn)定性等優(yōu)點,不僅可以模擬各種復雜信號,還可對頻率、幅值、相移、波形進行動態(tài)、及時的控制,并能夠與其它儀器進行通訊,組成自動測試系統,因此被廣泛用于自動控制系統、震動鼓勵、通訊和儀器儀表領域。在70年代前,信號發(fā)生器主要有兩類:正弦波和脈沖波,而信號發(fā)生器介于兩類之間,能夠提供正弦波、余弦波、方波、三角波、上弦波等幾種常用標準波形,產生其它波形時,需要采用較復雜的電路和機電結合的方法。這個時期的波形發(fā)生器多采用模擬電子技術,而且模擬器件構成的電路存在著尺寸大、價格貴、功耗大等缺點,并且要產生較為復雜的信號波形,那么電路結構非常復雜。同時,主要表現為兩個突出問題,一是通過電位器的調節(jié)來實現輸出頻率的調節(jié),因此很難將頻率調到某一固定值;二是脈沖的占空比不可調節(jié)。在70年代后,微處理器的出現,可以利用處理器、A/D/和D/A,硬件和軟件使波形發(fā)生器的功能擴大,產生更加復雜的波形。這時期的波形發(fā)生器多以軟件為主,實質是采用微處理器對DAC的程序控制,就可以得到各種簡單的波形。90年代末,出現幾種真正高性能、高價格的信號發(fā)生器、但是HP公司推出了型號為HP770S的信號模擬裝置系統,它由HP8770A任意波形數字化和HP1776A波形發(fā)生軟件組成。HP8770A實際上也只能產生8中波形,而且價格昂貴。不久以后,Analogic公司推出了型號為Data-2023的多波形合成器,Lecroy公司生產的型號為9100的任意波形發(fā)生器等。到了二十一世紀,隨著集成電路技術的高速開展,出現了多種工作頻率可過GHz的DDS芯片,同時也推動了信號波形發(fā)生器的開展,2003年,Agilent的產品33220A能夠產生17種波形,最高頻率可到達20M,2005年的產品N6030A能夠產生高達500MHz的頻率,采樣的頻率可達1.25GHz。由上面的產品可以看出,信號波形發(fā)生器開展很快近幾年來,國際上波形發(fā)生器技術開展主要表達在以下幾個方面:〔1〕過去由于頻率很低應用的范圍比擬狹小,輸出波形頻率的提高,使得波形發(fā)生器能應用于越來越廣的領域。波形發(fā)生器軟件的開發(fā)正使波形數據的輸入變得更加方便和容易。波形發(fā)生器通常允許用一系列的點、直線和固定的信號段把波形數據存入存儲器。同時可以利用一種強有力的數學方程輸入方式,復雜的波形可以由幾個比擬簡單的公式復合成v=f(t)形式的波形方程的數學表達式產生。從而促進了信號波形發(fā)生器向任意波形發(fā)生器的開展,各種計算機語言的飛速開展也對任意波形發(fā)生器軟件技術起到了推動作用。目前可以利用可視化編程語言(如VisualBasic,VisualC等等)編寫任意波形發(fā)生器的軟面板,這樣允許從計算機顯示屏上輸入任意波形,來實現波形的輸入?!?〕與VXI資源結合。目前,波形發(fā)生器由獨立的臺式儀器和適用于個人計算機的插卡以及新近開發(fā)的VXI模塊。由于VXI總線的逐漸成熟和對測量儀器的高要求,在很多領域需要使用VXI系統測量產生復雜的波形,VXI的系統資源提供了明顯的優(yōu)越性,但由于開發(fā)VXI模塊的周期長,而且需要專門的VXI機箱的配套使用,使得波形發(fā)生器VXI模塊僅限于航空、軍事及國防等大型領域。在民用方面,VXI模塊遠遠不如臺式儀器更為方便?!?〕隨著信息技術蓬勃開展,臺式儀器在走了一段下坡路之后,又重新繁榮起來。不過現在新的臺式儀器的形態(tài),和幾年前的己有很大的不同。這些新一代臺式儀器具有多種特性,可以執(zhí)行多種功能。而且外形尺寸與價格,都比過去的類似產品減少了一半。1.3本系統主要功能本系統設計制作一個基于DAC0832的信號發(fā)生器。能實現以下幾種功能:〔1〕用戶可以通過按鍵設定頻率、波形、幅度這些參數。?!?〕本系統輸出方波、三角波、正弦波和鋸齒波。最小步進值為1HZ?!?〕系統所有的設置的參數都能在LCD1602上顯示?!?〕正弦波:1Hz~10KHz;三角波:1Hz~5KHz;方波:1Hz~10KHz;鋸齒波:1Hz~5KHz。2.總體方案論證與設計 根據所要實現的功能劃分,系統一共需要以下幾個模塊:主控模塊、顯示模塊、信號產生模塊、程控增益模塊和負壓產生模塊,以下就針對這幾個模塊的選型和論證進行討論。方案一: 采用MSP430系列單片機,該單片機是TI公司1996年開始推向市場的一種16位超低功耗的混合信號處理器。其內部集成了很多模擬電路、數字電路和微處理器,提供強大的功能。不過該芯片昂貴不適合一般的設計開發(fā)。方案二 采用51系列的單片機,該單片機是一個高可靠性,超低價,無法解密,高性能的8位單片機,32個IO口,且STC系列的單片機可以在線編程、調試,方便地實現程序的下載與整機的調試。因此選用方案二中的51系列單片機作為主控芯片。方案一: 采用點陣式數碼管顯示,點陣式數碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比擬適宜,如采用在顯示數字顯得太浪費,且價格也相對較高,所以不用此種作為顯示[3]。方案二: 采用LED數碼管動態(tài)掃描,LED數碼管價格雖適中,對于顯示數字也最適宜,而且采用動態(tài)掃描法與單片機連接時,占用單片機口線少。但是由于數碼管動態(tài)掃描需要借助74LS164移位存放器進行移位,該芯片在電路調試時往往有很多障礙,所以不采用LED數碼管作為顯示。方案三: 采用LCD液晶顯示屏,液晶顯示屏的顯示功能強大,可顯示大量文字,圖形,顯示多樣,清晰可見,對于本設計而言一個LCD1602的液晶屏即可,價格也還能接受,需要的借口線較多,但會給調試帶來諸多方便。所以本設計中方案三中的LCD1602液顯示屏作為顯示模塊。信號產生模塊的選型和論證方案一: 利用R2R型DA轉換器DAC0832進行產生信號,把要產生的信號根據其規(guī)那么建立一個ROM表,單片機每隔一段時間根據ROM表的值去改變數模轉換器的電壓輸出值,如果ROM表示根據正弦變化記錄的表那么輸出的波形那么為正弦波,如此類推,只用通過改變時間的間隔即可改變輸出波形的頻率。方案二: 利用集成芯片DDS芯片AD9833進行產生信號,該芯片可以通過與單片機通信設定其輸出波形和頻率,而且設定的頻率精度非常高。DDS芯片中主要包括頻率控制存放器、高速相位累加器和正弦計算器三個局部。頻率控制存放器可以串行或并行的方式裝載并存放用戶輸入的頻率控制碼。方案一由于使用的獨立的DA轉換器,設計比擬靈活,只要預先先把波形的ROM表生產好存儲到單片機內即可輸出,定頻率的設定波形而選用DDS芯片那么只需要通過固定的時序控制那么能方便產生設。但是由于DDS本錢較為高昂,因此本設計選用DA轉換器來實現波形產生的功能。方案一:選用DAC0832搭配外部電路構成程控放大器,由于DAC0832是一個8位DA轉換器,因此能設置成256檔放大倍數。通過單片機控制DA轉換器的數字端口即可改變放大倍數。方案二:選用VCA810作為主芯片進行程控放大,VCA是一款高性能的壓控放大器芯片,它有一個增益控制引腳,用戶可以通過改變該腳的電壓進行增益的控制,增益的控制范圍為-40dB~40dB,不過VCA810需要搭配外部的DA轉換器才能實現程控放大的功能。由于DAC0832的價格較VCA810廉價,而且VCA810需要搭配外部DA轉換器才能實現增益改變的功能,因此這里選用DAC0832進行程控放大。由于DAC0832搭配運放后輸出的電壓為負電壓,為了能正常輸出,因此運放的電源需要正負電源供電,因為系統供電只有一個5V電源,為了得到一個-5V電源,這里使用了ICL7660負壓產生芯片來實現。2.6系統整體設計概述本系統以單片機為控制核心,對系統進行初始化,主要完成對鍵盤的響應、液晶顯示、波形產生、增益調節(jié)等功能的控制,起到總控和協調各模塊之間工作的作用。放大電路數/模轉換電路單放大電路數/模轉換電路單片機顯示電路波形輸出復位電路波形輸出復位電路鍵盤電路鍵盤電路圖2.1系統結構框圖3.系統硬件電路設計3.1主控模塊主控模塊模塊在整個系統中起著統籌的作用,需要檢測鍵盤,波形控制等各種功能,同時驅動液晶顯示相關參數,在這里我們選用了51系列單片機中的STC12C5A60S2單片機作為系統的主控芯片[5]。51系列單片機最初是由Intel公司開發(fā)設計的,但后來Intel公司把51核的設計方案賣給了幾家大的電子設計生產商,譬如SST、Philip、Atmel等大公司。因此市面上出現了各式各樣的均以51為內核的單片機。這些各大電子生產商推出的單片機都兼容51指令、并在51的根底上擴展一些功能而內部結構是與51一致的[6]。STC12C5A60S2有40個引腳,4個8位并行I/O口,1個全雙工異步串行口,同時內含5個中斷源,2個優(yōu)先級,2個16位定時/計數器。STC12C5A60S2的存儲器系統由4K的程序存儲器(掩膜ROM),和128B的數據存儲器(RAM)組成。STC12C5A60S2單片機的根本組成框圖見圖3-1。圖3.1STC12C5A60S2單片機結構圖3.1.1STC12C5A60S2單片機主要特性1.一個8位的微處理器(CPU)。2.片內數據存儲器RAM(128B),用以存放可以讀/寫的數據,如運算的中間結果、最終結果以及欲顯示的數據等,SST89系列單片機最多提供1K的RAM。3.片內程序存儲器ROM(4KB),用以存放程序、一些原始數據和表格。但也有一些單片機內部不帶ROM/EPROM,如8031,8032,80C31等。目前單片機的開展趨勢是將RAM和ROM都集成在單片機里面,這樣既方便了用戶進行設計又提高了系統的抗干擾性。SST公司推出的89系列單片機分別集成了16K、32K、64KFlash存儲器,可供用戶根據需要選用。4.四個8位并行I/O接口P0~P3,每個口既可以用作輸入,也可以用作輸出。5.兩個定時器/計數器,每個定時器/計數器都可以設置成計數方式,用以對外部事件進行計數,也可以設置成定時方式,并可以根據計數或定時的結果實現計算機控制。為方便設計串行通信,目前的52系列單片機都會提供3個16位定時器/計數器[4]。6.五個中斷源的中斷控制系統?,F在新推出的單片機都不只5個中斷源,例如SST89E58RD就有9個中斷源。7.一個全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實現單片機之間或單機與微機之間的串行通信。8.片內振蕩器和時鐘產生電路,但石英晶體和微調電容需要外接。最高允許振蕩頻率為12MHz。SST89V58RD最高允許振蕩頻率達40MHz,因而大大的提高了指令的執(zhí)行速度。圖3.2STC12C5A60S2單片機管腳圖局部引腳說明:1.時鐘電路引腳XTAL1和XTAL2:XTAL2(18腳):接外部晶體和微調電容的一端;片內它是振蕩電路反相放大器的輸出端,振蕩電路的頻率就是晶體固有頻率。假設需采用外部時鐘電路時,該引腳輸入外部時鐘脈沖。要檢查振蕩電路是否正常工作,可用示波器查看XTAL2端是否有脈沖信號輸出。XTAL1(19腳):接外部晶體和微調電容的另一端;在片內它是振蕩電路反相放大器的輸入端。在采用外部時鐘時,該引腳必須接地。2.控制信號引腳RST,ALE,PSEN和EA:RST/VPD(9腳):RST是復位信號輸入端,高電平有效。當此輸入端保持備用電源的輸入端。當主電源Vcc發(fā)生故障,降低到低電平規(guī)定值時,將+5V電源自動兩個機器周期(24個時鐘振蕩周期)的高電平時,就可以完成復位操作。RST引腳的第二功能是VPD,即接入RST端,為RAM提供備用電源,以保證存儲在RAM中的信息不喪失,從而合復位后能繼續(xù)正常運行。ALE/PROG(30腳):地址鎖存允許信號端。當8051上電正常工作后,ALE引腳不斷向外輸出正脈沖信號,此頻率為振蕩器頻率fOSC的1/6。CPU訪問片外存儲器時,ALE輸出信號作為鎖存低8位地址的控制信號。平時不訪問片外存儲器時,ALE端也以振蕩頻率的1/6固定輸出正脈沖,因而ALE信號可以用作對外輸出時鐘或定時信號。如果想確定8051/8031芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出。如有脈沖信號輸出,那么8051/8031根本上是好的。ALE端的負載驅動能力為8個LS型TTL(低功耗甚高速TTL)負載。此引腳的第二功能PROG在對片內帶有4KBEPROM的8751編程寫入(固化程序)時,作為編程脈沖輸入端。PSEN(29腳):程序存儲允許輸出信號端。在訪問片外程序存儲器時,此端定時輸出負脈沖作為讀片外存儲器的選通信號。此引肢接EPROM的OE端(見后面幾章任何一個小系統硬件圖)。PSEN端有效,即允許讀出EPROM/ROM中的指令碼。PSEN端同樣可驅動8個LS型TTL負載。要檢查一個8051/8031小系統上電后CPU能否正常到EPROM/ROM中讀取指令碼,也可用示波器看PSEN端有無脈沖輸出。如有那么說明根本上工作正常。EA/Vpp(31腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。當EA引腳接高電平時,CPU只訪問片內EPROM/ROM并執(zhí)行內部程序存儲器中的指令,但當PC(程序計數器)的值超過0FFFH(對8751/8051為4K)時,將自動轉去執(zhí)行片外程序存儲器內的程序。當輸入信號EA引腳接低電平(接地)時,CPU只訪問外部EPROM/ROM并執(zhí)行外部程序存儲器中的指令,而不管是否有片內程序存儲器。對于無片內ROM的8031或8032,需外擴EPROM,此時必須將EA引腳接地。此引腳的第二功能是Vpp是對8751片內EPROM固化編程時,作為施加較高編程電壓(一般12V~21V)的輸入端。3.輸入/輸出端口P0/P1/P2/P3:P0口(~,39~32腳):P0口是一個漏極開路的8位準雙向I/O口。作為漏極開路的輸出端口,每位能驅動8個LS型TTL負載。當P0口作為輸入口使用時,應先向口鎖存器(地址80H)寫入全1,此時P0口的全部引腳浮空,可作為高阻抗輸入。作輸入口使用時要先寫1,這就是準雙向口的含義。在CPU訪問片外存儲器時,P0口分時提供低8位地址和8位數據的復用總線。在此期間,P0口內部上拉電阻有效。P1口(~,1~8腳):P1口是一個帶內部上拉電阻的8位準雙向I/O口。P1口每位能驅動4個LS型TTL負載。在P1口作為輸入口使用時,應先向P1口鎖存地址(90H)寫入全1,此時P1口引腳由內部上拉電阻拉成高電平。P2口~,21~28腳):P2口是一個帶內部上拉電阻的8位準雙向I/O口。P口每位能驅動4個LS型TTL負載。在訪問片外EPROM/RAM時,它輸出高8位地址。P3口~,10~17腳):P3口是一個帶內部上拉電阻的8位準雙向I/O口。P3口每位能驅動4個LS型TTL負載。P3口與其它I/O端口有很大的區(qū)別,它的每個引腳都有第二功能,如下::(RXD)串行數據接收。:(RXD)串行數據發(fā)送。:(INT0#)外部中斷0輸入。:(INT1#)外部中斷1輸入。:(T0)定時/計數器0的外部計數輸入。:(T1)定時/計數器1的外部計數輸入。:(WR#)外部數據存儲器寫選通。:(RD#)外部數據存儲器讀選通。3.1.2STC12C5A60S2單片機的中斷系統STC12C5A60S2系列單片機的中斷系統有5個中斷源,2個優(yōu)先級,可以實現二級中斷效勞嵌套。由片內特殊功能存放器中的中斷允許存放器IE控制CPU是否響應中斷請求;由中斷優(yōu)先級存放器IP安排各中斷源的優(yōu)先級;同一優(yōu)先級內各中斷同時提出中斷請求時,由內部的查詢邏輯確定其響應次序。[7]在單片機應用系統中,常常會有定時控制需求,如定時輸出、定時檢測、定時掃描等;也經常要對外部事件進行計數。STC12C5A60S2單片機內集成有兩個可編程的定時/計數器:T0和T1,它們既可以工作于定時模式,也可以工作于外部事件計數模式,此外,T1還可以作為串行口的波特率發(fā)生器。3.1.3單片機最小系統設計圖3.3單片機最小系統電路圖 圖3.3為單片機最小系統電路圖,單片機最小系統有單片機、時鐘電路、復位電路組成,時鐘電路選用了12MHZ的晶振提供時鐘,作用為給單片機提供一個時間基準,其中執(zhí)行一條根本指令需要的時間為一個機器周期,單片機的復位電路,按下復位按鍵之后可以使單片機進入剛上電的起始狀態(tài)。圖中10K排阻為P0口的上拉電阻,由于P0口跟其他IO結構不一樣為漏極開路的結構,因此要加上拉電阻才能正常使用。3.2LCD液晶顯示器簡介由于本設計中要求顯示界面顯示一些參數,因此這里選用了LCD1602作為界面顯示,可以實時的顯示當前信號輸出的頻率、波形、占空比以及幅值,同時也方便用戶設置相關的參數。3.2.1液晶原理介紹液晶顯示器(LCD)英文全稱為LiquidCrystalDisplay,它一種是采用了液晶控制透光度技術來實現色彩的顯示器。和CRT顯示器相比,LCD的優(yōu)點是很明顯的。由于通過控制是否透光來控制亮和暗,當色彩不變時,液晶也保持不變,這樣就無須考慮刷新率的問題。顯示接口用來顯示系統的狀態(tài),命令或采集的電壓數據。本系統顯示局部用的是LCD液晶模塊,采用一個16×2的字符型液晶顯示模塊[3]。點陣圖形式液晶由M行×N列個顯示單元組成,假設LCD顯示屏有64行,每行有128列,每8列對應1個字節(jié)的8個位,即每行由16字節(jié),共16×8=128個點組成,屏上64×16個顯示單元和顯示RAM區(qū)1024個字節(jié)相對應,每一字節(jié)的內容和屏上相應位置的亮暗對應。一個字符由6×8或8×8點陣組成,即要找到和屏上某幾個位置對應的顯示RAM區(qū)的8個字節(jié),并且要使每個字節(jié)的不同的位為‘1’,其它的為‘0’,為‘1’的點亮,為‘0’的點暗,這樣一來就組成某個字符。但對于內帶字符發(fā)生器的控制器來說,顯示字符就比擬簡單了,可讓控制器工作在文本方式,根據在LCD上開始顯示的行列號及每行的列數找出顯示RAM對應的地址,設立光標,在此送上該字符對應的代碼即可。3LCD1602液晶模塊采用HD44780控制器,hd44780具有簡單而功能較強的指令集,可以實現字符移動,閃爍等功能,LM016L與單片機MCU通訊可采用8位或4位并行傳輸兩種方式,hd44780控制器由兩個8位存放器,指令存放器〔IR〕和數據存放器〔DR〕忙標志〔BF〕,顯示數RAM〔DDRAM〕,字符發(fā)生器ROMA〔CGOROM〕字符發(fā)生器RAM〔CGRAM〕,地址計數器RAM(AC)。IR用于存放指令碼,只能寫入不能讀出,DR用于存放數據,數據由內部操作自動寫入DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出的數據,BF為1時,液晶模塊處于內部模式,不響應外部操作指令和接受數據,DDTAM用來存儲顯示的字符,能存儲80個字符碼,CGROM由8位字符碼生成5*7點陣字符160中和5*10點陣字符32種.8位字符編碼和字符的對應關系,CGRAM是為用戶編寫特殊字符留用的,它的容量僅64字節(jié),可以自定義8個5*7點陣字符或者4個5*10點陣字符,AC可以存儲DDRAM和CGRAM的地址,如果地址碼隨指令寫入IR,那么IR自動把地址碼裝入AC,同時選擇DDRAM或CGRAM,LCD1602液晶模塊的引腳圖如圖3.4所示。圖3.4LCD1602引腳圖液晶存放器選擇控制如表3.1。表3.1存放器選擇控制RSR/W操作說明00寫入指令存放器〔去除屏等〕01讀busyflag〔DB7〕,以及讀取位址計數器〔DB0~DB6〕值10寫入數據存放器〔顯示各字型等〕11從數據存放器讀取數據3STC12C5A60S2的接口如圖3-5所示。用STC12C5A60S2的P0口作為數據線,用P1.2、P1.1、P1.0分別作為LCD的EN、R/W、RS。其中EN是下降沿觸發(fā)的片選信號,R/W是讀寫信號,RS是存放器選擇信號本模塊設計要點如下:顯示模塊初始化:首先清屏,再設置接口數據位為8位,顯示行數為1行,字型為5×7點陣,然后設置為整體顯示,取消光標和字體閃爍,最后設置為正向增量方式且不移位。向LCD的顯示緩沖區(qū)中送字符,程序中采用2個字符數組,一個顯示字符,另一個顯示電壓數據,要顯示的字符或數據被送到相應的數組中,完成后再統一顯示.首先取一個要顯示的字符或數據送到LCD的顯示緩沖區(qū),程序延時2.5ms,判斷是否夠顯示的個數,不夠那么地址加一取下一個要顯示的字符或數據[8]。圖3.5LCD1602與STC12C5A60S2的接口3.3鍵盤模塊設計本按鍵模塊使用的是多位獨立按鍵,按鍵一端接IO口,一端接地,由于單片機的IO口都有內部上拉,因此當按鍵沒有按下的時候,IO檢測到的時候高電平,當按鍵按下的時候,相當于IO短接地,因此這時候單片機檢測到的電平為低電平,通過檢測不同時刻的IO口狀態(tài)就可以判斷按下的是那個按鍵。4個按鍵分別代表以下功能,第一為功能按鍵,可以切換不同參數設置界面,第二個為切換按鍵,可以切換波形、頻率和幅值等參數進行設置,第三個為增加按鍵,第四個為減少按鍵。鍵盤模塊電路圖如圖3.6所示。圖3.6鍵盤模塊電路圖3.4信號產生模塊設計這里由于要產生方波、正弦波、鋸齒波和三角波這幾種波形,綜合考慮選擇了DAC0832作為主芯片,DAC0832是一款是國家半導體公司采用先進的DA轉換器,單片機通過查詢內部的預存的波形ROM表來實現波形產生。3.4.1直接數字合成技術介紹本設計就是基于直接數字合成技術原理設計的,直接數字合成技術是美國學者于1971年提出的,即以全數字技術,從相位概念出發(fā)直接合成所需波形的一中新的頻率合成原理,稱之為直接數字頻率合成器(DirectDigitalSynthesis)。這是頻率合成技術的一次重大革命。它的根本原理就是利用采樣原理,通過查表法產生波形。但是限于當時微電子技術和數字信號處理技術的限制,DDS并沒有得到足夠的重視,隨著現代超大規(guī)模集成電路集成工藝的高速開展,使得數字頻率合成技術得到了質的飛躍,它在相對帶寬、頻率轉換時間、相位連續(xù)性、正交輸出、高分辨率以及集成化等一系列性能指標方面,已遠遠超過了傳統頻率合成技術所能到達的水平。但是由于DDS數字化實現的固有特點,決定了其輸出頻譜雜散較大。從20世紀80年代末開始通過深入的研究認識了DDS雜散成因及其分布規(guī)律后,對DDS相位累加器進行了改良,ROM數據進行了壓縮,使用了抖動注入技術以及對DDS工藝結構和系統結構進行了改良。DDS技術建立在采樣在采樣定理的根底上,它首先對需要產生的信號波形進行采樣和量化,然后存入存儲器作為待產生信號波形的數據表。輸出信號波形時,電路在一個高穩(wěn)定時鐘控制下從數據表中依次讀出信號波形的數據,產生過數字化的信號,這個信號再通過DAC轉換成所需的模擬信號波形。具體原理框圖如圖3.7所示。它的核心是相位累加器,由N位加法器與N位相位存放器構成,類似一個簡單的計數器。加法器將頻率控制字與累加存放器輸出的累加相位數據相加,把相加后的結果送至累加存放器的數據輸入端。這樣,相位累加器在時鐘作用下,不斷對頻率控制字進行線性相位累加。由此可以看出,相位累加器輸出的數據就是合成信號的相位,相位累加器的溢出頻率就是DDS輸出的信號頻率。將相位存放器的輸出與相位控制字相加得到的數據作為一個地址對正弦查詢表進行尋址,查詢表把輸入的地址相位信息映射成正弦波幅度信號,通過D/A變換器把數字量變成模擬量,再經過低通濾波器平滑并濾除不需要的取樣分量,以便輸出頻譜純潔的正弦波信號。在參考頻率為fs的情況下,DDS系統輸出信號的頻率fo為:〔3-1〕輸出信號的頻率分辨率Δfo為:〔3-2〕圖3.7DDS技術的原理框圖相對于其他信號波形產生技術,DDS技術具有輸出信號的采樣頻率固定、頻率穩(wěn)定性高、信號頻率轉換時間輸出相位連續(xù)、全數字化、可編程和易于控制等優(yōu)點。但還是有兩點缺乏之處:〔1〕散分量豐富。這些雜散分量主要由相位舍位、幅度量化和DAC的非理想特性所引起,如圖3-8所示。因為在實際的DDS電路中,為了到達足夠小的頻率分辨率,通常將相位累加器的位數取大。但受體積和本錢的限制,即使采用先進的存儲方法,ROM的容量都遠小于此,因此在對ROM尋址時,只是用相位累加器的高位去尋址,這樣不可防止地引起誤差,即相位舍位誤差。另外,一個幅值在理論上只能用一個無限長的二進制代碼才能精確表示,由于ROM的存儲能力,只采用了有限比特代碼來表示這一幅值,這必然會引起幅度量化誤差。另外,DAC的有限分辨率以及非線性也會引起誤差。所以對雜散的分析和抑制,一直是國內外研究的特點,因為它從很大程度上決定了DDS的性能。圖3.8DDS摻雜模型〔2〕頻帶受限。由于DDS內部DAC和ROM的工作速度限制,使得DDS輸出的最高頻率有限。3.4.2DAC0832芯片介紹DAC0832是采用CMOS工藝制成的單片直流輸出型8位數/模轉換器。旨在直接與8080,8048,8085,Z80及其他通用的微型處理器進行相接。存儲的硅鉻R-2R電阻梯形網絡將參考電流分開,并為電路提供適宜的溫度處理特性〔全范圍最大線性溫度誤差的0.05%〕。電路利用CMOS電流開關和控制邏輯來取得最少的電能損耗和最小的輸出泄露電流誤差。特殊的電路也能提供TTL邏輯輸入電壓的水平兼容。雙緩沖可以使這些D/A轉換器在獲取下一個數位字時輸出相應一個數位字的電壓。這就使得任何一個D/A轉換器均可進行同步更新。D/A轉換器0830系列是8位的可兼容微型處理器的D/A轉換器的集合。圖3.9典型應用連接3.4.3DAC0832波形發(fā)生電路設計由于DAC0832是電流輸出型DAC,因此需要用運放轉換成電壓,AMP1A輸出電壓V的范圍為-VREF~0V,由于運放供電為正負5V供電,并且運放不能輸出電壓范圍到電源軌,因此基準電壓只使用了2.5V電壓。基準由TL431進行提供。為了使輸出信號幅度范圍以0V為中間值,使用了AMP1B搭建成一個加法器進行信號放大和偏置調整。輸出電壓Vout=V(-R4/R2)+VREF(-R4/R3)=-2V-VREF,因此輸出的幅度范圍為-VREF~VREF,由于基準電壓為2.5V,所以輸出電壓范圍為-2.5V~2.5V。圖3.10波形發(fā)生電路設計3.5程控放大模塊的設計程控放大模塊的結構跟波形發(fā)生局部相似,區(qū)別在于波形發(fā)生局部的基準電壓是固定的,通過查ROM的數組來改變輸出電壓來描繪出波形,而程控放大模塊的基準是接到波形發(fā)生電路的輸出,因此輸出VOUT=VREF*DATA/256。其中DATA值通過改變單片機連接到DA數據口的電平值即可以改變其放大倍數。其硬件電路圖如圖3.11所示。圖3.11程控放大電路設計3.6負壓轉換電路設計由于電路中很多芯片都需要正負電源供電,而我們的電源只有正5伏的電壓,因此這里使用ICL7660進行產生一個負5伏電壓。該ICL7660S超電壓轉換器是一個單片電路CMOS電壓轉換IC,保證顯著的性能優(yōu)于其他類似裝置。這是一個直接替換工業(yè)標準的ICL7660提供了一個擴大經營范圍的電源電壓高達12V,低電源電流。無需外部二極管所需的ICL7660S。此外,高頻升壓腳已被納入,使用戶能夠實現較低的輸出阻抗,盡管使用較小的電容器。圖3.12ICL7660S引腳所有改良中所強調的電氣規(guī)格一節(jié)。關鍵參數都保證在整個商業(yè),工業(yè)和軍事溫度范圍內工作。ICL7660S執(zhí)行的電源電壓轉換從積極的消極的輸入電壓范圍1.5V至12V的,因此互補的輸出電壓-1.5V~-12V的。只有2個非關鍵外部電容器所需要的電荷泵和負責水庫的功能。該ICL7660S可以連接到作為一個電壓倍增,并會產生高達22.8V的12V輸入。它也可以被用來作為電壓倍增器或分壓器。圖3.13ICL7660硬件電路圖4.系統軟件設計4.1系統軟件總體設計圖4.1主程序流程圖主程序流程圖如圖4.1所示,單片機上電后先進行初始化,去除一些參數的初值,然后顯示相關波形的參數,每個循環(huán)單片機都會判斷用戶是否按下設定按鍵,如果按下那么進入相關參數的設置。圖4.2LCD1602初始化子信號流程圖首先先調用液晶自定義的字庫,設置好DDRAM地址后在第一行顯示,根據程序中的數據設置顯示數據的首地址并設置循環(huán)量,在循環(huán)過程中不斷的取字符代碼直到終止,第二行的顯示過程同一行的顯示過程一樣,兩行顯示完畢后便結束子程序[4]。4.2程序設計原理軟件任務分析和硬件電路設計結合進行,哪些功能由硬件完成,哪些任務由軟件完成,在硬件電路設計根本定型后,也就根本上決定下來了。軟件任務分析環(huán)節(jié)是為軟件設計做一個總體規(guī)劃。從軟件的功能來看可分為兩大類:一類是執(zhí)行軟件,它能完成各種實質性的功能,如測量,計算,顯示,打印,輸出控制和通信等,另一類是監(jiān)控軟件,它是專門用來協調各執(zhí)行模塊和操作者的關系,在系統軟件中充當組織調度角色的軟件。這兩類軟件的設計方法各有特色,執(zhí)行軟件的設計偏重算法效率,與硬件關系密切,千變萬化。軟件任務分析時,應將各執(zhí)行模塊一一列出,并為每一個執(zhí)行模塊進行功能定義和接口定義〔輸入輸出定義〕。在各執(zhí)行模塊進行定義時,將要牽扯到的數據結構和數據類型問題也一并規(guī)劃好。各執(zhí)行模塊規(guī)劃好后,就可以監(jiān)控程序了。首先根據系統功能和鍵盤設置選擇一種最適合的監(jiān)控程序結構。相對來講,執(zhí)行模塊任務明確單純,比擬容易編程,而監(jiān)控程序較易出問題。這如同當一名操作工人比擬容易,而當一個廠長就比擬難了。軟件任務分析的另一個內容是如何安排監(jiān)控軟件和各執(zhí)行模塊。整個系統軟件可分為后臺程序〔背景程序〕和前臺程序。后臺程序指主程序及其調用的子程序,這類程序對實時性要求不是太高,延誤幾十ms甚至幾百ms也沒關系,故通常將監(jiān)控程序〔鍵盤解釋程序〕,顯示程序和打印程序等與操作者打交道的程序放在后臺程序中執(zhí)行;而前臺程序安排一些實時性要求較高的內容,如定時系統和外部中斷〔如掉電中斷〕。也可以將全部程序均安排在前臺,后臺程序為“使系統進入睡眠狀態(tài)〞,以利于系統節(jié)電和抗干擾。5.系統調試5.1硬件調試本系統的電路較為復雜,涉及的模塊比擬多,其中包含信號產生模塊,程控增益模塊,單片機最小系統模塊,液晶模塊,因此對于焊接方面更是不可輕視,龐大的電路系統中只要出于一處的錯誤,那么會對檢測造成很大的不便,而且電路的交線較多,對于各種鋒利的引腳要注意處理,否那么會刺破帶有包皮的導線,那么會對電路造成短路現象。在制作硬件電路之前,我們先根據實際需要的功能劃分硬件模塊,并且在PROTEL里面畫出其硬件原理圖和PCB圖,檢查無誤后開始再開始焊接。在本系統的硬件調試中遇到了很多的問題?;叵脒@些問題只要認真多思考都是可以防止的,以下為主要的問題:問題:一開始波形一直輸出不正常,輸出的電壓一直都是正電壓。解決:由于DA轉換器后面的電壓轉換電路輸出為負電壓,因此運放需要使用正負電源供電,后來使用ICL7660芯片產生出-5V電壓供電便解決了問題。5.2軟件調試本系統是一個比擬復雜的數字系統,所以對于它的程序也較為復雜,所以在編寫程序和調試時出現了相對較多的問題。首先為了更好的測試效果,我最開始是直接在PROTUES軟件下進行一些顯示界面仿真,在確定無誤后,再把程序燒錄到實物中運行。最后經過屢次的模塊子程序的修改,一步一步的完成,最終解決了軟件上的各種問題。在軟件的調試過程中主要遇到的問題如下:問題1.燒入程序后,LCD液晶顯示閃動,而且亮度不均勻。解決:首先對調用的延時進行逐漸修改,可以解決顯示閃動問題。其次,由于本作品使作動態(tài)掃描方式顯示的數字,動態(tài)掃描很快,人的肉眼是無法看出,但是調用的顯示程序時,如果不在反回時屏蔽掉最后的附值,那么會出現很亮的現象,所以在顯示的后面加了屏蔽子令,最后解決了此問題。問題2.當用戶按下按鍵的時候,單片機讀取的數值跟設定的數值不對。解決:重新檢查獨立鍵盤電路的連接,重新建立一個新的對應關系。結論通過這次畢業(yè)設計,我學到了不少課本上沒有的知識,也鍛煉了自己的動手能力,將以前學過的零散的知識串到一起。經過我長時間的設計及調試,本系統根本能實現本系統的所有功能。缺乏之處有:1.硬件的穩(wěn)定性有待進一步提高2.系統界面人性化還缺乏。我的綜合設計主要涉及硬件和軟件兩方面的內容,通過這些我的硬件和軟件開發(fā)能力都獲得了提高。首先硬件方面,根本了解了電子產品的開發(fā)流程和所要做的工作。根本掌握了Proteus原理圖的方法,并設計了一個單片機最小系統。通過開發(fā)板的設計和硬件搭建的過程,使我對51系單片機的接口有了更深層次的理解,熟悉了一些單片機常用的外圍電路引腳和連接方法,如LCD液晶,鍵盤等。并且我學會了分析問題解決問題的能力,加深了對所學理論知識的理解和運用。我的動手能力得到了很大的提高,創(chuàng)新意識得到了鍛煉。致謝在這次畢業(yè)設計中,最應該感謝的是我的指導老師梁芳老師,本次多功能信號發(fā)生器的成功設計與梁老師的幫助是息息相關的。導師淵博的專業(yè)知識,嚴謹的治學態(tài)度,精益求精的工作態(tài)度,誨人不倦的高尚師德,嚴以律己、寬厚待人的崇高風范,樸實無華。平易近人的人格魅力對我影響深遠。從論文到選題的完成,每一步都是在指導老師的指導下完成的,傾注了導師的大量心血,再次謹向導師表示崇高敬意。還有就是應該感謝我校陜西理工學院圖書館的相關及圖書及文獻,以及網上前輩們的優(yōu)秀研究成果,通過對這些資料的學習與借鑒,完成和豐富了本次畢業(yè)設計的內容。再加上自己的思考和領悟才能預期成功地完成的本次目標。梁老師在論文前期、中期、后期都對我的想法及設計經行了獨特地分析,這深深的影響了我對學習的態(tài)度,也大大促進了本次設計的順利進行。參考文獻[1]吳巖.單片機在電子技術中的應用和開發(fā)技術研究[J].黑龍江科技信息,202319-24[2]李富林.淺談單片機的應用領域[J].網絡財富2023112-120[3]閻石.數字電子技術根底.北京:高等教育出版社,1997[4]張曉麗等.數據結構與算法.北京:機械工業(yè)出版社,2002[5]李建忠.單片機原理及應用.西安:西安電子科技大學,20027-8[6]韓志軍等.單片機應用系統設計[M].機械工業(yè)出版社,2004[7]馬忠梅等.單片機的C語言應用程序設計[M].北京航空航天大學出版社,2006[8]劉樹中,孫書膺,王春平.單片機和液晶顯示驅動器串行接口的實現[J].微計算機信息,2007[9]Baskakov,S.I.Signalsandcircuits.mirpublishiers,1986[10]Levan,N.Systemsandsignals.NewYork::OptimizationSoftware,Inc.,,c1983[11]Marven,Craig.,Ewers,Gillian.Buildyourownlow-costsignalgenerator.NewYork::TAB,,c1994.附錄A系統仿真圖附錄B元件清單元件名稱數量STC12C5A60S2130PF212MHZ晶振1輕觸按鍵510UF電容76USB座子11000UF1LCD16021110K排阻1TL4311DAC08322TL0721UA741110K電阻120K電阻2100PF電容2銅柱+螺帽4板子1ICL76601DIP40座子1DIP20座子2DIP8座子3附錄C系統源程序#include"reg52.h"#include"LCD1602.h"#include"key.h"#defineDAPortP3sbitIO=P2^0;unsignedintcount;staticunsignedcharcodeTableSin[256]={128,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173,176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215,218,220,222,224,226,228,230,232,234,235,237,238,240,241,243,244,245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255,255,255,255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243,241,240,238,237,235,234,232,230,228,226,224,222,220,218,215,213,211,208,206,203,201,198,196,193,190,188,185,182,179,176,173,170,167,165,162,158,155,152,149,146,143,140,137,134,131,127,124,121,118,115,112,109,106,103,100,97,93,90,88,85,82,79,76,73,70,67,65,62,59,57,54,52,49,47,44,42,40,37,35,33,31,29,27,25,23,21,20,18,17,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,17,18,20,21,23,25,27,29,31,33,35,37,40,42,44,47,49,52,54,57,59,62,65,67,70,73,76,79,82,85,88,90,93,97,100,103,106,109,112,115,118,121,124};staticunsignedcharcodeTableTriangle[256]={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,234,236,238,240,242,244,246,248,250,252,254,255,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,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,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,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};staticunsignedcharcodeTableSaw[256]={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,25,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,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,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255};voidmain(void){ LCDInit(); AmPort=0xff; fword=1048; TMOD=0x02; TH0=0xf0;TL0=0xf0; TR0=1;//計數器停止計數 ET0=1;//開啟計數器0中斷 LCDDispString(0,1,"wave:SinVo:5.0V"); LCDDispString(0,2,"f:01000HzD:--%"); EA=1;//開總中斷 while(1) { key_scan(); }} //gType=0:正弦波//gType=1:方波//gType=2:三角波//gType=3:鋸齒波voidtimer0(void)interrupt1//計數器0中斷{ count=count+fword; switch(gType) { case0: DAPort=TableSin[count>>8]; break; case1:if(count>Duty*655) DAPort=0xff; else DAPort=0x00; break; case2: DAPort=TableTriangle[count>>8]; break; case3: DAPort=TableSaw[256-(count>>8)]; break; default:DAPort=TableSin[count>>8]; }} #include<reg52.h>#include"LCD1602.h"/*********************************************************Function:staticvoidDelayN40us(unsignedintn)Description:延時函數,延時40us的整數倍,傳入值n代表延時 時間到n*40us,不能實現準確延時,只能實現大 概時間的延時,利用的是指令實現延時功能。不允 許外部調用。Calls:沒有調用其它函數CalledBy:voidLCDWriteCommand(unsignedchardat); voidLCDWriteData(unsignedchardat);Input:unsignedintn用于延時時間確實定,取值、為1~65535Output:無Return:無***********************************************************/voidDelayN40us(unsignedintn){ unsignedinti; unsignedcharj; for(i=n;i>0;i--) for(j=0;j<80;j++);}/*********************************************************Function:voidLCDInit(void);Description:液晶初始化函數,對LCD1602進行初始化操作,在每一次實用液晶前必須用到的,外部可調用函數。Calls:voidLCDWriteCommand(unsignedchardat); DelayN40us(unsignedintn);CalledBy:main();或其他Input:無Output:無Return:無***********************************************************/voidLCDInit(void) { LCDWriteCommand(0x38);/*設置8位格式,2行,5x7*/ LCDWriteCommand(0x38);/*設置8位格式,2行,5x7*/ LCDWriteCommand(0x38);/*設置8位格式,2行,5x7,有的液晶做的不好,寫三遍保險?。。?!*/ LCDWriteCommand(0x0c);/*整體顯示,關光標,不閃爍*/ LCDWriteCommand(0x06);/*設定輸入方式,增量不移位*/ LCDWriteCommand(0x01);/*去除屏幕顯示*/ DelayN40us(100); /*清屏延時*/}/*********************************************************Function:staticvoidLCDWriteCommand(unsignedchardat);Description:寫命令函數,對LCD1602內部存放器進行操作,不允許外部調用Calls:DelayN40us(unsignedintn);CalledBy:voidLCDInit(void); voidLCDDispChar(unsignedcharx,unsignedchary,unsignedchardat); voidLCDDispNum(unsignedcharx,unsignedchary,unsignedchardat); Input:unsignedchardat寫入的命令Output:無Return:無***********************************************************/staticvoidLCDWriteCommand(unsignedchardat){ LCD_DB=dat;LCD_RS=0;/*選擇寫指令*/ LCD_RW=0;/*寫入指令值*/ LCD_E=1;/*使能LCD1602*/ LCD_E=0; DelayN40us(1);/*寫命令延時*/}/*********************************************************Function:staticvoidLCDWriteData(unsignedchardat);Description:寫數據函數,將數據寫入LCD1602中,不允許外 部調用Calls:DelayN40us(unsignedintn);CalledBy:voidLCDInit(void); voidLCDDispChar(unsignedcharx,unsignedchary,unsignedchardat); voidLCDDispNum(unsignedcharx,unsignedchary,unsignedchardat); Input:unsignedchardat寫入的數據Output:無Return:無***********************************************************/staticvoidLCDWriteData(unsignedchardat) //寫數據函數{ LCD_DB=dat; LCD_RS=1;/*選擇寫數據*/ LCD_RW=0;/*寫入數據值*/ LCD_E=1;/*使能LCD1602*/ LCD_E=0; DelayN40us(1);/*寫數據延時*/}/*********************************************************Function:voidLCDDispChar(unsignedcharx,unsignedchary,unsignedchardat);Description:在某個屏幕位置上(x,y)位置顯示一個字符,可外部調用。Calls:LCDWriteCommand(unsignedchardat); voidLCDWriteData(unsignedchardat);CalledBy:main();及其他Input:X〔0-15),y(1-2),dat為顯示字符‘a’形式。Output:無Return:無***********************************************************/voidLCDDispChar(unsignedcharx,unsignedchary,unsignedchardat){ unsignedcharaddress; if(y==1) address=0x80+x; /*顯示在第一排的時候的x的地址*/ else address=0xc0+x; /*顯示在第二排的時候的x的地址*/ LCDWriteCommand(address); /*輸入地址*/ LCDWriteData(dat); /*輸入數據*/}/*********************************************************Function:voidLCDDispNum(unsignedcharx,unsignedchary,unsignedchardat);Description:在某個屏幕位置上(x,y)位置顯示一個數字,可外部調用。Calls:LCDWriteCommand(unsignedchardat); voidLCDWriteData(unsignedchardat);CalledBy:main();及其他Input:X〔0-15),y(1-2),dat(0-9)。Output:無Return:無***********************************************************/voidLCDDispNum(unsignedcharx,unsignedchary,unsignedchardat){ unsignedcharaddress; if(y==1) address=0x80+x; /*顯示在第一排的時候的x的地址*/ else address=0xc0+x; /*顯示在第二排的時候的x的地址*/ LCDWriteCommand(address); /*輸入地址*/ LCDWriteData(dat+48); /*輸入數據*/}/*********************************************************Function:voidLCDDispString(unsignedcharx,unsignedchary,unsignedchar*string)Description:在屏幕上顯示一串字符,考慮到我的數值均存儲于數組中,為方便而作,允許外部調用

溫馨提示

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

評論

0/150

提交評論