基于單片機的信號發(fā)生器(李炳陽)_第1頁
基于單片機的信號發(fā)生器(李炳陽)_第2頁
基于單片機的信號發(fā)生器(李炳陽)_第3頁
基于單片機的信號發(fā)生器(李炳陽)_第4頁
基于單片機的信號發(fā)生器(李炳陽)_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 緒論1.1 單片機概述單片微型計算機(單片機)作為微型計算機的一個很重要的分支,自問世以來,以其極高的性價比,受到人們的重視和關(guān)注,因此應(yīng)用廣泛,發(fā)展迅速。相對而言,單片機體積小、重量輕、抗干擾能力強,對環(huán)境要求不高,并且價格低廉、可靠性高、靈活性好,開發(fā)較為容易。目前,在我國,單片機已經(jīng)廣泛地用于智能儀表、機電設(shè)備過程控制、自動檢測、家用電器和數(shù)據(jù)處理等各個方面。1.2 at89s52單片機at89s52是一種低功耗、高性能cmos8位微控制器,具有8k在系統(tǒng)可編程flash 存儲器。使用atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80c51產(chǎn)品指令和引腳完全兼容。片上flash允

2、許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位cpu和在系統(tǒng)可編程flash,使得at89s52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。at89s52具有以下標準功能:8k字節(jié)flash,256字節(jié)ram,32 位i/o 口線,看門狗定時器,兩個數(shù)據(jù)指針,三個16 位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,at89s52 可降至0hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,cpu停止工作,允許ram、定時器/計數(shù)器、串口、中斷繼續(xù)工作17。掉電保護方式下,ram內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作

3、停止,直到下一個中斷或硬件復(fù)位為止。1.3信號發(fā)生器概述目前,市場上的信號發(fā)生器多種多樣,一般按頻帶分為以下幾種:超高頻:頻率范圍1mhz以上,可達幾十兆赫茲。高頻:幾百khz到幾mhz。低頻:頻率范圍為幾十hz到幾百khz。超低頻:頻率范圍為零點幾赫茲到幾百赫茲。超高頻信號發(fā)生器,產(chǎn)生波形一般用lc振蕩電路。高頻、低頻和超低頻信號發(fā)生器,大多使用文氏橋振蕩電路,即rc振蕩電路,通過改變電容和電阻值,改變頻率。用以上原理設(shè)計的信號發(fā)生器,其輸出波形一般只有兩種,即正弦波和脈沖波,其零點不可調(diào),而且價格也比較貴,一般在幾百元左右。在實際應(yīng)用中,超低頻波和高頻波一般是不用的,一般用中頻,即幾十hz

4、到幾十khz。用單片機89s52,加上一片dac0808,就可以做成一個簡單的信號發(fā)生器,其頻率受單片機運行的程序的控制。我們可以把產(chǎn)生各種波形的程序,寫在rom中,裝入本機,按用戶的選擇,運行不同的程序,產(chǎn)生不同的波形。再在dac0808輸出端加上一些電壓變換電路,就完成了一個頻率、幅值、零點均可調(diào)的多功能信號發(fā)生器的設(shè)計。這樣的機器體積小,價格便宜,耗電少,頻率適中,便于攜帶。 2 系統(tǒng)設(shè)計方案2.1系統(tǒng)可行性分析 (1)元器件的選擇及其可行性討論根據(jù)技術(shù)指標及系統(tǒng)設(shè)計目的,經(jīng)研究芯片的選擇如下:主控芯片采用atmel公司的89s52;采用12mhz的晶振器為89s52提供時鐘信號;穩(wěn)壓塊

5、選用7812與7805相串聯(lián),提供12v和5v電壓,7912產(chǎn)生-12v電壓;對于89s52的p0口的數(shù)據(jù)采用74ls373進行鎖存后經(jīng)過dac0808進行d/a轉(zhuǎn)換;數(shù)碼顯示器采用高亮8位共陰極數(shù)碼管;8位d/a轉(zhuǎn)換器采用dac0808;運算放大器采用lm324。大部分的芯片及器件都可以通過網(wǎng)絡(luò)購買,所以器件的選擇完全可行。(2) 設(shè)計中可能存在的問題及解決方案排除問題的可行性討論設(shè)計原理圖時應(yīng)著重考慮設(shè)計最終的電路板的可行性。在設(shè)計時要對每一個電路模塊仔細檢查,查閱其他書籍進行校對,還要進行實物實驗,以確保設(shè)計的可實現(xiàn)性。在最后的電路板的調(diào)試階段,需要診斷模塊程序和單片機仿真機合作進行,從

6、而克服調(diào)試程序本身的不可靠性,可方便地進行調(diào)試及錯誤診斷。以上對設(shè)計中可能遇到的較為重要的問題進行了分析并提出了解決方法,基本上可以解決。(3) 經(jīng)濟上的可行性討論 本設(shè)計是一個實驗系統(tǒng),芯片的選擇在前面已經(jīng)討論,從前面的討論中可見芯片大部分可在網(wǎng)上找到。因此,設(shè)計費用主要集中在購買元器件上,而大部分的元器件又不是很貴,所以經(jīng)濟上本設(shè)計完全可行。2.2系統(tǒng)需求分析2.2.1系統(tǒng)功能要求系統(tǒng)具有d/a轉(zhuǎn)換功能,信號幅度放大功能,8位七段數(shù)碼顯示功能,上電自動復(fù)位功能,24鍵盤輸入接口。2.2.2系統(tǒng)性能要求(1)系統(tǒng)的d/a轉(zhuǎn)換功能具有8位精度;(2)動態(tài)掃描七段數(shù)碼顯示器;(3)89s52單片

7、機時鐘信號為12mhz;(4)系統(tǒng)上電自動復(fù)位;(5)系統(tǒng)具有8位行列掃描鍵盤。2.3總體方案設(shè)計一個單片機主系統(tǒng)的硬件電路設(shè)計包含兩部分內(nèi)容:一是單片機系統(tǒng)擴展部分設(shè)計,它包括存儲器擴展和接口擴展。存儲器擴展指eprom、eeprom和ram的擴展。接口擴展是指各接口芯片以及其他功能器件的擴展。二是各功能模塊的設(shè)計,如信號檢測功能模塊、信號控制功能模塊、人機對話功能模塊、通訊功能模塊等,根據(jù)系統(tǒng)功能要求配置相應(yīng)的d/a、鍵盤、顯示器等外圍設(shè)備。本機硬件設(shè)計包括兩部分,即電源部分設(shè)計和主系統(tǒng)設(shè)計。電源設(shè)計和主系統(tǒng)框圖分別如圖2-1,2-2所示。圖2-1 交流直流電壓轉(zhuǎn)換圖2-2 主系統(tǒng)結(jié)構(gòu)框圖

8、3 硬件設(shè)計3.1總體硬件設(shè)計單片機應(yīng)用系統(tǒng)的硬件電路設(shè)計包含兩部分內(nèi)容:一是系統(tǒng)擴展,即單片機內(nèi)部的功能單元(如rom、i/o、定時/計數(shù)器等)容量不能滿足應(yīng)用系統(tǒng)的要求時,必須在片外進行擴展,選擇適當?shù)男酒?,設(shè)計適當?shù)碾娐贰6窍到y(tǒng)配置,即按照功能要求配置外圍設(shè)備如顯示器、d/a轉(zhuǎn)換等,要設(shè)計合適的電路。系統(tǒng)的擴展和模塊設(shè)計應(yīng)遵循下列原則12:(1)盡可能選擇標準化、模塊化的典型電路,提高設(shè)計的成功率和結(jié)構(gòu)的靈活性。(2)系統(tǒng)的擴展與外圍設(shè)備配置的水平應(yīng)充分滿足應(yīng)用系統(tǒng)的功能要求。(3)硬件結(jié)構(gòu)應(yīng)結(jié)合應(yīng)用軟件方案一并考慮。硬件結(jié)果與軟件方案會產(chǎn)生相互影響,考慮的原則是:軟件能實現(xiàn)的功能盡可

9、能由軟件來實現(xiàn),以簡化硬件結(jié)構(gòu)。但必須注意,由軟件實現(xiàn)的硬件功能,其響應(yīng)時間要比直接用硬件響應(yīng)來的長,而且占用cpu時間。所以,選擇軟件方案時,要考慮到這些因素12。(4)可靠性及抗干擾性設(shè)計是硬件系統(tǒng)設(shè)計不可缺少的部分,它包括芯片、器件選擇,去耦濾波等。(5)單片機外接電路較多時,必須考慮其驅(qū)動能力。驅(qū)動能力不足時,系統(tǒng)工作不可靠,解決的辦法是增加驅(qū)動能力,增設(shè)線驅(qū)動器或減少芯片功耗,降低總線負載。(6)系統(tǒng)的擴展及各功能模塊的設(shè)計在滿足系統(tǒng)功能要求的基礎(chǔ)上,應(yīng)適當留有余地,以備將來修改、擴展之需。(7)在考慮硬件總體結(jié)構(gòu)的同時要注意通用性的問題。 根據(jù)以上原則,進行硬件設(shè)計。系統(tǒng)采用較為普

10、及的89s52單片機作為系統(tǒng)的核心。它不但容易實現(xiàn)設(shè)計指標,而且還有較好的性價比。(1)程序存貯器89s52內(nèi)部自帶8k的rom,512b的ram,所以不需要對其擴展存儲器。(2)鍵盤接口矩陣式鍵盤適用于按鍵數(shù)量較多的場合,系統(tǒng)采用了行列式鍵盤設(shè)計即矩陣鍵盤,用i/o線組成行、列結(jié)構(gòu),按鍵設(shè)置在行列的交點上,24的行列結(jié)構(gòu)可構(gòu)成8個鍵的鍵盤。因此,在按鍵數(shù)量較多時,可以節(jié)省i/o線。按鍵的識別方法有兩種,一種為掃描法,另一種為線反轉(zhuǎn)法。此設(shè)計采用了行列式及與之相適應(yīng)的行列掃描法。(3)數(shù)碼管驅(qū)動本設(shè)計實現(xiàn)了89s52的i/o口對24鍵盤和8位數(shù)碼管顯示的控制。為增加對數(shù)碼管顯示器的驅(qū)動能力及穩(wěn)

11、定性,在它與89s52之間設(shè)置了提高驅(qū)動能力的74ls373。(4)d/a轉(zhuǎn)換本設(shè)計d/a轉(zhuǎn)換部分采用dac0808芯片,由于它不帶鎖存器,故在使用時必須加74ls373進行數(shù)據(jù)鎖存。(5)信號變換部分對信號的變換部分采用四運放集成芯片lm324,它采用14腳雙列直插塑料封裝,它的內(nèi)部包含四組形式完全相同的運算放大器。(6)可靠性方面在使用應(yīng)用系統(tǒng)時,可能會受到多種干擾的侵襲,直接影響到系統(tǒng)的可靠性,因此,本系統(tǒng)適當加入去耦電容,以減少干擾,確保精度。3.2系統(tǒng)模塊設(shè)計3.2.1電源設(shè)計穩(wěn)壓電源是單片機控制系統(tǒng)的重要組成部分,它不僅為測控系統(tǒng)提供多路電源電壓,還直接影響到系統(tǒng)的技術(shù)指標和抗干擾

12、性能。近年來,傳統(tǒng)的線性穩(wěn)壓電源正逐步被高有效率的開關(guān)電源所取代,特別是單片開關(guān)電源的迅速推廣應(yīng)用,為設(shè)計新型、高效、節(jié)能電源創(chuàng)造了良好的條件13。 本機使用三種共地電源:+12v,12v,+5v,硬件設(shè)計中采用自帶電源方式。因為本機有89s52單片機,還有許多邏輯芯片,這些芯片的工作電源電壓為+5v,所以電源中必須有+5v電源。另外由于d/a轉(zhuǎn)換器件vee端需接-12v電壓,lm324也需要提供12v電源,所以需要設(shè)計一個能產(chǎn)生12v,+5v的電源。經(jīng)過綜合分析,變壓器選用16w32v變壓器(帶三抽頭如圖3.1所示),整流用一片rbv-406集成電橋(如圖3.2所示)。穩(wěn)壓部分選用三端集成7

13、805,7812,7912穩(wěn)壓器件(如圖3.3所示)。圖3.1 變壓器圖3.2 集成電橋圖 圖3.3 三端集成穩(wěn)壓器件特別說明,在使用穩(wěn)壓器件時,一定要注意79xx系列是左邊接地,右邊輸出,中間輸入;而78xx系列是左邊輸入,右邊輸出,中間接地。電源部分原理圖如圖3.4所示圖3.4 電源原理圖對于圖3.4有幾點說明:1.7805穩(wěn)壓塊與7812穩(wěn)壓塊相串聯(lián),是為了使7805上的功耗降低,以免功耗太大而使用散熱片。穩(wěn)壓塊的功耗按下式計算:w=u=i(ui-uo) (31)其中:i是穩(wěn)壓片的通過電流,ui是穩(wěn)壓片的輸入電壓,uo是穩(wěn)壓片的輸出電壓,u是穩(wěn)壓片上的電壓降。由上式可以看出:穩(wěn)壓塊上的壓

14、降u越大,其功耗越大。如果7805直接接到整流橋輸出端,則u1必會大于12v,功耗必然加大。2.at89s52的功耗100ma顯示器采用動態(tài)顯示,每一瞬間只有一個數(shù)碼管發(fā)亮,而數(shù)碼管電流100ma。其它芯片總電流5070ma。所以+5v電流的總電流可300ma,查三端集成穩(wěn)壓器說明書,可以選用7805,其電流im=0.5a,這樣電流可以留有一定裕量。3.大濾波電容的選擇由于變壓器副線圈的額定電壓選用12v,那么瞬時電壓峰值為um=121.41417v因為大電容耐壓值越高,價格越高,所以選用1000f/25v電容。4.整流橋的選擇雖然要求的電源電流1a,但變壓器副線圈電壓為脈動電壓,電流為脈動電

15、流,其電流瞬時值遠遠超過1a,尤其在電源剛接通時,為留有一定裕量,而且不損壞整流橋,選用2a的。由于整流橋的每個二極管都是半相導(dǎo)通,半相不導(dǎo)通,所以其反向耐壓值要求很高,為留有一定裕量,選用50v。最后選定整流橋為2a/50v。5.變壓器的選擇要求電源電壓為12v,而穩(wěn)壓塊壓降2v,所以變壓器副線圈電壓16v,因此選用32v的電源。又因電源電壓500ma,所以選用16w32v變壓器(帶三抽頭)。6.電路中0.1f電容的作用電路中在集成三端穩(wěn)壓器輸入端、輸出端與公共端之間,分別接有0.1f電容,這是為了更好地改變集成三端穩(wěn)壓片的瞬態(tài)響應(yīng),防止穩(wěn)壓塊自激振蕩,保證正常工作。3.2.2顯示器接口設(shè)計

16、 一、led顯示器的結(jié)構(gòu)與原理led發(fā)光器件一般常用的有兩類:數(shù)碼管和點陣。常用的數(shù)碼管一般為8字型數(shù)碼管,分為a、b、c、d、e、f、g、dp八段,其中dp為小數(shù)點。數(shù)碼管常用的有10根管腳,每一段有一個管腳,另外兩根管腳為一個數(shù)碼管的公共端。從尺寸上分,led數(shù)碼管的種類很多,常用的有0.3、0.5、0.8、1.0、1.2、1.5、1.8、2.3、3.0、4.0、5.0等。一般小于1.0的為單管芯,1.21.5為雙管芯,1.8以上的為3個以上管芯,因而它們的供電電壓要求不同,一般每個管芯的壓降為2.1v左右。通常,0.8以下采用5v供電,1.02.3采用12v供電,3.0以上的選擇更高電壓

17、供電。從電路上分,數(shù)碼管又可分為共陰極和共陽極兩種。結(jié)構(gòu)分別如圖3.5,3.6所示。圖3.5 共陰極 圖3.6 共陽極 圖3.7 管腳圖其中:圖3.7為管腳圖,從ag管腳輸入不同的字段碼,可顯示不同的數(shù)字或字符(其字形碼見表3-1)。可見共陰極和共陽極的字段碼互為反碼 。表3.1 字段碼表二、led數(shù)碼管顯示器的譯碼方式1硬件譯碼方式圖3.8 硬件譯碼硬件譯碼方式是指利用專門的硬件電路來實現(xiàn)顯示字符到字段碼的轉(zhuǎn)換,這樣的硬件電路有很多,比如mototola公司生產(chǎn)的mc14495芯片就是其中的一種,mc14495是共陰極一位十六進制數(shù)字段碼轉(zhuǎn)換芯片,能夠輸出用四位二進制表示形式的一位十六進制數(shù)

18、的七位字段碼(不帶小數(shù)點)。它的內(nèi)部結(jié)構(gòu)如圖3-8所示。2軟件譯碼方式軟件譯碼方式就是通過編寫軟件譯碼程序,通過譯碼程序來得到要顯示的字符的字段碼。 三、led數(shù)碼管的顯示方式1led靜態(tài)顯示所謂靜態(tài)顯示方式,就是當顯示器顯示某一個字符時,相應(yīng)的發(fā)光二極管恒定地導(dǎo)通或截止。靜態(tài)顯示時,較小的電流能得到較高的亮度。這是由于顯示器的各位相互獨立,而且各位的顯示字符一經(jīng)確定,相應(yīng)鎖存器的輸出將維持不變,直到顯示另一個字符為止(如圖3.9所示)。當顯示器位數(shù)很少(僅一、二位)時,采用靜態(tài)顯示方式是合適的。當位數(shù)較多時,用靜態(tài)顯示所需的i/o口太多,占用太多的硬件資源。故在位數(shù)較多時往往采用動態(tài)顯示方式

19、。led靜態(tài)顯示時,其公共端直接接地(共陰極)或接電源(共陽極),各段選線分別與i/o口線相連。要顯示字符,直接在i/o線上輸出相應(yīng)的字段碼。 圖3.9 led靜態(tài)顯示2led動態(tài)顯示方式led動態(tài)顯示是將所有的數(shù)碼管的段選線并接在一起,用一個i/o口控制,公共端不是直接接地(共陰極)或電源(共陽極),而是通過相應(yīng)的i/o口線控制。如圖3.10所示。 圖3.10 led動態(tài)掃描設(shè)數(shù)碼管為共陽極,它的工作過程為:第一步使右邊第一個數(shù)碼管的公共端d0為1,其余的數(shù)碼管的公共端為0。同時在i/o(1)上送右邊第一個數(shù)碼管的字段碼,這時,只有右邊第一個數(shù)碼管顯示,其余不顯示;第二步使右邊第二個數(shù)碼管的

20、公共端d1為1,其余的數(shù)碼管的公共端為0,同時在i/o(1)上送右邊第二個數(shù)碼管的字段碼。這時,只有右邊第二個數(shù)碼管顯示,其余不顯示,依此類推,直到最后一個,這樣四個數(shù)碼管輪流顯示相應(yīng)的信息,一個循環(huán)完后,下一循環(huán)又這樣輪流顯示,從計算機的角度看是一個一個的顯示,但由于人的視覺滯留,只要循環(huán)的周期足夠快,看起來所有的數(shù)碼管都是一起顯示的了。這就是動態(tài)顯示的原理。而這個循環(huán)周期對于計算機來說很容易實現(xiàn)。所以在單片機中經(jīng)常用到動態(tài)顯示。 四、系統(tǒng)顯示電路:本機顯示采用軟件譯碼動態(tài)顯示,系統(tǒng)顯示電路如圖3.13所示。采用軟件譯碼動態(tài)顯示的理由如下:1)如果用靜態(tài)顯示,單片機的接口資源肯定不夠用,那么

21、還要進行接口的擴展,增加了系統(tǒng)的復(fù)雜度;2)如果要制成印刷線路板,得占相當大一塊面積;3)另外,采用動態(tài)顯示,可以明顯的降低功耗,因為每一時刻只有一個led發(fā)光,其功耗為靜態(tài)顯示的18。一個led最大電流為120ma,如用靜態(tài)顯示,8個led就耗電流960ma,那么變壓器就得選32v32w,價格提高近一倍,穩(wěn)壓塊得選7805c(im=1a),這種管是橢圓殼,在印刷線路板上也得占相當大的面積。綜上分析,采用動態(tài)顯示才是最經(jīng)濟的方案。 在顯示的時候,只要把顯示的字碼輸送到p2口,再經(jīng)過74ls373進行數(shù)據(jù)鎖存,p3口作為位選控制信號。由于采用的是共陰極數(shù)碼管,當需要顯示哪一位的時候,只要在相應(yīng)的

22、位選控制信號輸出低電平就行。例如,要在第一個數(shù)碼管顯示p,那么在p2口就要輸出73h字段碼,同時p3口輸出feh位選碼。 圖3.13 系統(tǒng)顯示電路3.2.3復(fù)位與時鐘電路設(shè)計1復(fù)位電路設(shè)計單片機的復(fù)位是靠外電路實現(xiàn)的,在時鐘電路工作后,只要在單片機的rst引腳上出現(xiàn)24個時鐘振蕩脈沖(2個機器周期)以上的高電平,單片機便實現(xiàn)初始化狀態(tài)復(fù)位。為了保證應(yīng)用系統(tǒng)可靠地復(fù)位,通常是rst引腳保持10ms以上的高電平。復(fù)位電路連接如圖3.14所示。此電路僅用一個電容及一個電阻。系統(tǒng)上電時,在rc電路充電過程中,由于電容兩端電壓不能跳變,故使reset端電平呈高電位,系統(tǒng)復(fù)位。經(jīng)過一段時間,電容充電,使r

23、eset端呈低電位,復(fù)位結(jié)束7。89s522+5vc1r1 圖3.14 復(fù)位電路2.時鐘電路設(shè)計 8xx51系列單片機的時鐘信號通常用兩種電路形式得到:內(nèi)部振蕩方式和外部振蕩方式。在引腳xtal1和xtal2外接晶體振蕩器(簡稱晶振),就構(gòu)成了內(nèi)部振蕩方式。由于單片機內(nèi)部有一個高增益反向放大器,當外接晶振后,就構(gòu)成了自激振蕩器,并產(chǎn)生振蕩時鐘脈沖。晶振通常選用6mhz、12mhz或24mhz。內(nèi)部振蕩方式如圖3.15所示。圖中電容c1、c2起穩(wěn)定振蕩頻率、快速起振的作用。電容值一般為530pf。內(nèi)部振蕩方式所得時鐘信號比較穩(wěn)定,實用電路中使用較多。 外部振蕩方式是把已有的時鐘信號引入單片機內(nèi)。

24、這種方式適宜用來使單片機的時鐘與外部信號保持一致。外部振蕩方式電路如圖3.16所示。 對hmos的單片機(8031,8031ah等),外部時鐘信號由xtal2引入;對于chmos的單片機(8xcxx),外部時鐘信號由xtal1引入。圖3.15 內(nèi)部振蕩 圖3.16 外部振蕩3.2.4鍵盤接口設(shè)計一、人機交互接口的設(shè)計 所謂人機交互接口,是指人與計算機之間建立聯(lián)系、交互信息的輸入/輸出設(shè)備的接口8。這些輸入/輸出設(shè)備主要有鍵盤、顯示器和打印機等。他們是計算機應(yīng)用系統(tǒng)中必不可少的輸入、輸出設(shè)備,是控制系統(tǒng)與操作人員之間的交互窗口。一個安全可靠的控制系統(tǒng)必須具有方便的交互功能。操作人員可以通過系統(tǒng)顯

25、示的內(nèi)容,及時掌握生產(chǎn)情況,并可通過鍵盤輸入數(shù)據(jù),傳遞命令,對計算機應(yīng)用系統(tǒng)進行人工干擾,使其隨時能按照操作人員的意圖工作。二、矩陣鍵盤的工作方式1查詢工作方式這種方式是直接在主程序中插入鍵盤檢測子程序,主程序每執(zhí)行一次,則鍵盤檢測子程序就對鍵盤進行檢測一次。如果沒有鍵按下,則跳過鍵識別,直接執(zhí)行其他程序;如果有鍵按下,則通過鍵盤掃描子程序識別按鍵,得到按鍵的編碼值。然后根據(jù)編碼值進行相應(yīng)的處理,處理完后再回到主程序執(zhí)行。鍵盤掃描子程序流程如圖3.17所示 。圖3.17 鍵盤掃描流程圖2.中斷工作方式 如圖3.18所示,就是中斷工作方式,當有中斷的時候,就去執(zhí)行掃描程序,沒有中斷的時候,cpu

26、可以去做其他的事情。這樣可以提高cpu的效率。圖3.18 鍵盤中斷工作方式三、系統(tǒng)鍵盤的實現(xiàn)依據(jù)上述工作原理,結(jié)合本設(shè)計實際,設(shè)計出本系統(tǒng)鍵盤結(jié)構(gòu)如圖3.19示。圖圖3.19 系統(tǒng)鍵盤實現(xiàn)工作原理如下:1檢測鍵盤上是否有鍵按下:將行線送入低電平,列線送入高電平。讀入p1口的狀態(tài)來判別。其具體過程如下:p1口輸出0fh,即所有行線置成高電平,所有列線置成低電平,然后將p1口狀態(tài)讀入與0fh比較。如果有鍵按下,總會有一根行線電平被拉至低電平,從而使行輸入狀態(tài)不全為1。2識別鍵盤中哪一個鍵按下:確認有鍵按下后,保存行掃描時有鍵按下時的狀態(tài)x 。p1口輸出f0h,進行列掃描,保存列掃描狀態(tài)y,取出鍵值

27、z=x|y.例如第一行第一列有鍵按下,那么行掃描讀入的狀態(tài)為00001110,列掃描讀入的狀態(tài)為11100000,最后鍵值z=11101110=eeh,然后轉(zhuǎn)去執(zhí)行相應(yīng)的服務(wù)程序。3.2.5 d/a轉(zhuǎn)換設(shè)計一、d/a轉(zhuǎn)換器的原理 以倒t形電阻網(wǎng)絡(luò)d/a轉(zhuǎn)換器為例,介紹d/a轉(zhuǎn)換器的原理。倒t形電阻網(wǎng)絡(luò)d/a轉(zhuǎn)換器結(jié)構(gòu)如圖3.20所示。 圖3.20 倒t形電阻網(wǎng)絡(luò)d/a轉(zhuǎn)換器圖中s0s3為模擬開關(guān),由輸入數(shù)碼di控制,當di=1時,si接運算放大器反相輸入端(虛地),電流ii流入求和電路;當di=0時,si將電阻2r接地。所以,無論si處于何種位置,與si相連的2r電阻均接“地”(地或虛地)。流

28、過各開關(guān)支路(從右到左)的電流分別為 i/2、i/4、i/8、i/16??傠娏鳎?(33)輸出電壓: (34)將輸入數(shù)字量擴展到n位,則有:可簡寫為: (35)其中,=二、dac0808簡介dac0808是八位電流輸出型d/a轉(zhuǎn)換器件,由4腳輸出轉(zhuǎn)換電流,其簡化電路圖及引腳結(jié)構(gòu)如圖3.21所示。vref為參考電源,vee負電壓供電;d0是高數(shù)據(jù)位(msb),d7才是地數(shù)據(jù)位(lsb)。dac0808的電源極性:vcc=+5v,vee=-15v,vref=+15v。d0d7是數(shù)據(jù)輸入端,i0是電流輸出端,comp是接電容進行補償。在單片機應(yīng)用系統(tǒng)中通常需要的是電壓信號,電流信號與電壓信號之間的轉(zhuǎn)

29、換可由運算放大器實現(xiàn)。dac0808不帶鎖存器,所以在使用時必須加一個74ls373進行數(shù)據(jù)鎖存。 圖3.21 dac0808簡化電路框圖和管腳排列三、d/a轉(zhuǎn)換系統(tǒng)的實現(xiàn)根據(jù)dac0808的特性設(shè)計出本系統(tǒng)的d/a轉(zhuǎn)換電路如圖3.22所示。圖3.22 系統(tǒng)d/a實現(xiàn)工作原理:本系統(tǒng)由vref提供參考電壓,相應(yīng)參考電流為i=vref/r1。電容c4提供補償,out輸出電流,經(jīng)過lm324運算放大器轉(zhuǎn)換成電壓。所以輸出電壓:=5k (36)3.2.6 電壓變換一、lm324簡介lm324是四運放集成電路,它采用14腳雙列直插塑料封裝。它的內(nèi)部包含四組形式完全相同的運算放大器,除電源共用外,四組運

30、放相互獨立。每一組運算放大器可用圖3.23所示的符號來表示,它有5個引出腳,其中“+”、“-”為兩個信號輸入端,“v+”、“v-”為正、負電源端,“vo”為輸出端。兩個信號輸入端中,vi-(-)為反相輸入端,表示運放輸出端vo的信號與該輸入端的位相反;vi+(+)為同相輸入端,表示運放輸出端vo的信號與該輸入端的相位相同9。lm324的引腳排列如圖3.24所示。圖3.23 lm324運算放大器 圖3.24 lm324引腳結(jié)構(gòu)圖由于lm324是四運放集成電路,具有電源電壓范圍寬,靜態(tài)功耗小,可單電源使用,價格低廉等優(yōu)點,因此被廣泛應(yīng)用在各種電路中。二、原理圖 電壓變換原理圖如圖3.25所示圖3.

31、25 系統(tǒng)信號變換4 軟件設(shè)計4.1軟件功能設(shè)計4.1.1系統(tǒng)初始化程序設(shè)計復(fù)位程序完成如下工作:1.顯示2秒的ppp.hello初始界面;2.初始頻率設(shè)置為983hz;3.將頻率值轉(zhuǎn)換成定時器的初值;4.置定時器0工作于方式1,即16位定時器方式,送入定時器0定時初值,啟動定時器0工作;5.顯示初始頻率和產(chǎn)生波形的類型;6.轉(zhuǎn)鍵盤掃描程序。系統(tǒng)的初始化流程如圖4.1所示。圖4.1 初始化流程圖4.1.2 鍵盤掃描及處理程序設(shè)計這部分程序包括如下幾部分:1.鍵盤掃描程序judge;2. 先對p1置數(shù),行掃描;3. 判斷是否有鍵按下;4. 延時10ms,軟件去干擾;5. 確認按鍵按下x = p1

32、, 保存行掃描時有鍵按下時狀態(tài);6. 列掃描;7. 保存列掃描時有鍵按下時狀態(tài);8. 取出鍵值;9. 執(zhí)行相應(yīng)鍵值程序。下面分別介紹其功能及設(shè)計思想。1.鍵盤掃描程序單片機系統(tǒng)中,鍵盤掃描是cpu工作的一個主要內(nèi)容之一。cpu忙于各項工作任務(wù)時,如何兼顧鍵盤掃描。既保證不失時機的響應(yīng)鍵盤操作,又不過多占用cpu時間。因此,要根據(jù)應(yīng)用系統(tǒng)中的cpu的忙、閑情況,選擇好鍵盤的工作方式。在單片機應(yīng)用系統(tǒng)設(shè)計中,為了節(jié)省硬件,通常采用非編碼鍵盤,在這種鍵盤結(jié)構(gòu)中,單片機對它的控制有三種方式:程序控制掃描方式;定時掃描工作方式;中斷工作方式6。(1)程序控制掃描方式這種方式就是只有當單片機空閑時,才調(diào)用

33、鍵盤掃描子程序,響應(yīng)鍵盤的輸入請求。(2)定時掃描方式這種方式就是每隔一定的時間對鍵盤掃描一次。通常是利用單片機內(nèi)部定時器產(chǎn)生10ms的定時中斷,cpu響應(yīng)定時器溢出中斷請求,對鍵盤進行掃描,以響應(yīng)鍵盤輸入請求。(3)中斷工作方式為進一步提高cpu效率,可以采用中斷掃描工作方式。即在鍵盤有健按下時,才執(zhí)行鍵盤掃描,執(zhí)行該鍵功能程序。本系統(tǒng)采用程序控制掃描工作方式。在該設(shè)計中的鍵盤的行列線連接于89s52的p1口上。鍵盤掃描程序自復(fù)位后就開始工作,時刻監(jiān)視鍵盤,有無鍵按下。在監(jiān)視鍵盤過程中,允許定時器t0中斷,即同時動態(tài)顯示數(shù)據(jù)和輸出波形。一旦有鍵按下,先延時10ms,去除鍵的抖動,然后關(guān)中斷,

34、不允許定時器t0發(fā)生中斷。其框圖如圖4.2所示: 圖4.2 鍵盤掃描對應(yīng)鍵盤如圖4.3所示圖4.3 鍵盤實現(xiàn)鍵盤采用矩陣式鍵盤(如圖4-3所示),由軟件產(chǎn)生相應(yīng)編碼,再根據(jù)相應(yīng)編碼調(diào)用相應(yīng)的子程序。編碼產(chǎn)生原理:p1口低四位表示行,高四位表示列。鍵盤所在的行和所在的列用0表示,其它的行和列用1表示。如第一行第一列g(shù)w編碼值為(11101110)2=0xee,第二行第三列zkbj編碼值為(10111101)2=0xbd。表4.1 鍵盤處理程序鍵值對應(yīng)處理程序0x7dkey1鍵選擇發(fā)波類型(1為正弦波,2為三角波,3為方波)0xeekey2個位頻率調(diào)整(gw)0xdekey3十位頻率調(diào)整(sw)0

35、xbekey4百位頻率調(diào)整(bw)0x7ekey5千位頻率調(diào)整(qw)0xedkey6萬位頻率調(diào)整(ww)0xddkey7占空比增大調(diào)整(zkbz)0xbdkey8占空比減小調(diào)整(zkbj)鍵盤掃描源程序如下:void judge(void) unsigned char x,y,z; p1 = 0xff; p1 = 0x0f; /先對p1置數(shù)行掃描 if(p1 != 0x0f) /判斷是否有鍵按下 delay10ms(); /延時,軟件去干擾 if(p1 != 0x0f) /確認按鍵按下x = p1; x = p1; /保存行掃描時有鍵按下時狀態(tài) p1 = 0xf0; /列掃描 y = p1;

36、 /保存列掃描時有鍵按下時狀態(tài) z = x | y; /取出鍵值 switch ( z ) /判斷鍵值(那一個鍵按下) case 0x7d: key1(); break; case 0xee: key2(); break; /對鍵值賦值 case 0xde: key3(); break; case 0xbe: key4(); break; case 0x7e: key5(); break; case 0xed: key6(); break; case 0xdd: key7(); break; case 0xbd: key8(); break; 4.1.3中斷服務(wù)程序設(shè)計采用定時器t0定時中斷,

37、根據(jù)不同的choice值,產(chǎn)生不同的波形。其中方波的占空比可以通過k變量來控制。定時器的初值可以這樣計算:f = 100000 * ww + 1000 * qw + 100 * bw + 10 * sw + gw; t = 1000000 / f; th = -t / 256; /定時器高八位值 tl = -t % 256; /定時器低八位值void time0_int(void) interrupt 1 /中斷服務(wù)程序 tr0 = 0; if(wave_choice = 1) p0 = to_sinb; b +; else if( wave_choice = 2 ) if(c = 128)

38、p0 = c; else p0 = 255 - c; c +; else if( wave_choice = 3 ) k = zk * 256 / 100; d +; if(d = k) p0 = 0x00; else p0 = 0xff; else if(wave_choice = 4) if(e = 255) p0 = 255 - e; else p0=0; e+; th0 = th; tl0 = tl; tr0 = 1;4.1.4 正弦波發(fā)生程序設(shè)計dac0808是8位的d/a轉(zhuǎn)換器件,其工作電壓是05v,當輸入00數(shù)字量的時候,輸出為0v電壓;當輸入80數(shù)字量的時候,輸出為2.5v電壓

39、;當輸入ff數(shù)字量的時候,輸出為5v電壓。單片機的i/o輸出均為+5 v的ttl電平,因此產(chǎn)生的正弦波幅值為+2.5 v。將一個周期內(nèi)的正弦波形等分為256份,那么第1點的角度為0,對應(yīng)的正弦值為2.5sin0;第2點的角度為360/256,對應(yīng)的正弦值為2.5sin (360/256 ) ,如此計算下去,將這些模擬量正弦值都轉(zhuǎn)換為單極性方式下的數(shù)字量,得到一張按照點號順序排列的正弦波波形數(shù)據(jù)表格11。而每次送到74ls373的八位數(shù)字量是根據(jù)查正弦波形數(shù)據(jù)表格而得到。其實在計算正弦波形數(shù)據(jù)的時候,并不需要算出整個02區(qū)間的每一個值,而只需計算出0中的值就行,其他區(qū)間的值都可以通過對0中的值取

40、不同的變換。比如的值可以和0值一一對應(yīng),而2的值可以對0區(qū)間的值取反得到。計算值可以用c語言編程得到。幅度公式為y=2.51+sin() (n=0,1,264)相應(yīng)的y值數(shù)字化后的遞增量=0.0196那么每一個點相對于起一個點的遞增率為a= (y2當前的點,y1為前一個點)所以每一個點的數(shù)字量與遞增率a成一一對應(yīng)關(guān)系。數(shù)字量化c程序:#includemain()int n,i=0,j,k; float y=0, a=3.1415926,b=0,c=2.5000,d=0; for(n=0;n=64;n+) y=2.5*sin(a*n/128)+2.5; b=y; /b,y為當前幅度值 d=b-c

41、; /d為遞增率 j=d/0.0196; /j為數(shù)字遞增率,0.0196為 k=128+j; /k為數(shù)字量 printf(“%d,%f,%f,%d,%dn”,i,y,d,j,k); i+; 4.1.5 三角波發(fā)生程序設(shè)計由于三角波的函數(shù)值比較容易計算,所以不必要像正弦波那樣還需用表格??芍苯油ㄟ^如下程序段實現(xiàn)。else if( wave_choice = 2 ) /三角波 if(c = 128) p0 = c; else p0 = 255 - c; c +; 4.1.6方波發(fā)生程序設(shè)計方波發(fā)生程序運用延時的方法實現(xiàn),只用一個主程序即可,因為產(chǎn)生一個方波只需要高低兩個數(shù),所以程序比較簡單。要給一

42、個頻率,再計算所需的延時即可。實現(xiàn)方波的程序如下:else if( wave_choice = 3 ) / 方波 k = zk * 256 / 100; d +; if(d = k) p0 = 0x00; else p0 = 0xff; 4.1.7鋸齒波發(fā)生程序設(shè)計鋸齒波中的斜線用一個個小臺階來逼近,在一個周期內(nèi)從最小值開始逐步遞增,當達到最大值后又回到最小值,如此循環(huán),當臺階間隔很小時,波形基本上近似于直線。適當選擇循環(huán)的時間,可以得到不同周期的鋸齒波。鋸齒波發(fā)生原理與方波類似,只是高低兩個延時的常數(shù)不同,所以用延時法,來產(chǎn)生鋸齒波。else if(wave_choice = 4) /鋸齒波

43、 if(e = 255) p0 = 255 - e; else p0=0; e+; 4.2 proteus軟件仿真4.2.1 proteus軟件仿真過程第一步,打開proteus軟件,選擇所需器件。第二步,將所有器件排列好。器件排列見圖4.4。 圖4.4 器件排列窗口 圖4.5 導(dǎo)線連接第三步,連接導(dǎo)線。如圖4.5。第四步,打開keil軟件,調(diào)出程序編譯,生成hex文件。調(diào)試窗口見圖4.6。 圖4.6 程序調(diào)試窗口 圖4.7初始化仿真窗口第五步,調(diào)試仿真。初始界面顯示ppp.hello。仿真情況如圖4.7。以下為四種波形的仿真結(jié)果示例。正弦波仿真:頻率2383hz。仿真結(jié)果如圖4.8所示。圖4

44、.8 正弦波仿真輸出三角波仿真:頻率2984hz。結(jié)果如圖4.9。圖4.9 三角波仿真輸出方波仿真:占空比50%,頻率2824hz。仿真結(jié)果如圖4.10。圖4.10 方波仿真輸出鋸齒波仿真:頻率1983hz。仿真結(jié)果如圖4.11所示。圖4.11 鋸齒波仿真輸出仿真總結(jié):采用proteus進行單片機仿真,可以大大縮短單片機的開發(fā)周期。它不僅能仿真單片機cpu 的工作情況,也能仿真單片機外圍電路或沒有單片機參與的其它電路的工作情況。本系統(tǒng)仿真結(jié)果,滿足設(shè)計需求。實際操作靈活,使用方便。5 系統(tǒng)測試報告5.1系統(tǒng)程序下載采用專用的51編程器,首先將編程器的并口線和計算機的并口連接好,其次將編程器串口

45、線和計算機的串口連接(采用串口供電)。將89s52插到編程器上,打開電源。第一步 檢測器件;第二步 擦除器件;第三步 把程序?qū)懭雴纹瑱C的flash rom 里。圖5.1 程序?qū)懭雴纹瑱C5.2系統(tǒng)使用說明本機分為兩部分。一部分是主機板,是一塊16cm10cm的電路板,另一部分是外接的變壓器。主機板一側(cè)有五根軟線。其中三根線是接變壓器的,紅線是正電壓輸入端,接變壓器輸出的紅接線柱,黑線是接變壓器的黑接線柱(即中間抽頭),黃線接變壓器的黃接線柱。在使用本機之前,先把變壓器與電源的插頭撥開,然后把主機板左上角三根線與變壓器三接線柱正確連接。這時把變壓器的插頭插入220v電源插座,主機正上方的八個數(shù)碼管

46、應(yīng)顯示“ppp.hello”,否則應(yīng)立即拔下變壓器,檢查是否接線錯誤。正確顯示“ppp.hello”之后,就可以輸入波形代號和頻率值,產(chǎn)生要求的波形了。各種波形的代號如下:“1”:正弦波“2”:三角波“3”:方波“4”:鋸齒波要產(chǎn)生一個波形,正確的操作過程如下:1.在接電源后,電源指示燈亮,按下復(fù)位鍵,顯示器顯示“ppp.hello”2.把本機右端兩根標有“輸出”字樣的線接示波器輸入端,紅線為波形輸出線,黑線為地線。3.輸入波形代號:按下鍵盤上key1鍵,同時在顯示器第三位上將顯示你鍵入的數(shù)字,這個數(shù)字被認為是你選定的波形代號。4.選好波形代號后,選擇key2-key6鍵,分別對頻率的個位、十

47、位、百位、千位、萬位進行調(diào)整。5.頻率值最多輸入5位,從0001到50000。6.輸入完波形代號與頻率后,輸出端將產(chǎn)生出想要的波形及相應(yīng)的頻率。5.3系統(tǒng)性能指標1.輸出頻率寬度正弦波:1hz8khz三角波:1hz10khz方波:1hz10khz鋸齒波:1hz15khz2.輸出波形的幅值:本機設(shè)計目標是用于中低頻小信號范圍。最高幅值:0v+12v。3.波形零點調(diào)節(jié)范圍:0v+12v。4.本機可帶的負載:rl500。5.本機輸出電流:i0+40ma,i0-20ma。5.4系統(tǒng)測試數(shù)據(jù)1.穩(wěn)壓部分輸出電壓測試通過對實際電路進行測試,得出各器件輸出電壓數(shù)據(jù)如表5.1所示。表5.1 輸出電壓測試數(shù)據(jù)表

48、穩(wěn)壓器件輸入電壓輸出電壓理想輸出電壓誤差78120v0007805+11.5v4.854%7812+13.4v11.5124.2%7912-13.3v-13.3-1210.8%從測試的數(shù)據(jù)上可以看出:采用7812,7805穩(wěn)壓輸出電壓+12v,+5v,基本符合要求。誤差都控制在5%以內(nèi)。而7912穩(wěn)壓負電壓,根本沒有起到穩(wěn)壓的作用,而且誤差也很大。我認為是損壞了,因為在一次測試中不小心將7912電源的極性接反了,直接燒壞了。所以,在測試的時候一定要小心電源的極性和用電安全。2.正弦波頻率測試在實際測試中,主要對正弦波的頻率進行了測試,測試數(shù)據(jù)如表5-2所示。表5.2 正弦波頻率測試數(shù)據(jù)表顯示頻

49、率(hz)測試頻率(hz)誤差(%)5553.72.4100103.53.38200195.22.465004902.041000970.33.0615001548.63.1420002041.12.0140003945.31.4980007842.42.01從誤差上分析,基本滿足設(shè)計要求。但是在顯示較高頻率時,數(shù)碼管的閃爍頻率太快了,根本看不清楚數(shù)字。這一點有待進一步改進。三角波,方波和鋸齒波的頻率測試不夠理想,所以不在這里列出。但是從proteus軟件仿真的結(jié)果看,三種波形都可以實現(xiàn)。6 結(jié)論與展望6.1 結(jié)論單片機控制多功能信號發(fā)生器可以用于“單片機技術(shù)”的教學(xué)實踐,也可以用于實驗信號的

50、產(chǎn)生。其比較典型的接口電路設(shè)計也為實際應(yīng)用提供參考。該儀器的研制既解決了實驗教學(xué)的需求,也節(jié)約了實驗設(shè)備投資,降低了實驗成本。經(jīng)過進一步完善后,可由學(xué)生利用課程設(shè)計的機會,親自動手制作,這樣還可以進一步降低成本,同時極大地提高了學(xué)生的動手能力,是一件一舉多得的好事。隨著科學(xué)技術(shù)的不斷發(fā)展,以及實驗教學(xué)要求的不斷更新,要求我們開發(fā)的應(yīng)用系統(tǒng)具有良好的可擴充性和更新能力,作為一名技術(shù)人員,應(yīng)時刻跟蹤科技發(fā)展的步伐,不斷豐富專業(yè)知識,不斷完善我們開發(fā)的系統(tǒng)。本設(shè)計是是自己對“單片機技術(shù)”課程的理解和實際技術(shù)的總結(jié)。論文中可能會存在一些不足之處,敬請評審專家和各位老師批評指正。6.2 展望未來 通過本次畢業(yè)設(shè)計,我感到自己應(yīng)用基礎(chǔ)知識及專業(yè)知識解決問題的能力有了很大的提高。并且這次畢業(yè)設(shè)計的選題,是一個實際應(yīng)用工程。是我學(xué)完單片機課程后,自己動手做的一個大系統(tǒng)。盡管在設(shè)計過程中碰到了不少“難題”,通過自己翻閱大量資料,解決了一個個難題。通過這次畢業(yè)設(shè)計,我深深體會到:世上無難題,只怕有心人。碰到難題不要懼怕,只要你肯鉆研,問題總會有解決的辦法。我想,通過這次畢業(yè)設(shè)計,到了工作單位后,我將能夠更快的適應(yīng)工作崗位和工作要求,我對自己未來充滿信心。 總之,這次畢業(yè)設(shè)計對我而言是受益匪淺的。參考文獻1 李杏春主編.單片機原理及

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論