課程設(shè)計報告---方波發(fā)生器設(shè)計_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課程設(shè)計(論文)說明書</p><p>  題 目: 方波發(fā)生器的設(shè)計 </p><p>  院 (系): </p><p>  專 業(yè): 電子信息工程 </p><p>  學(xué)生姓名: </p>

2、<p>  學(xué) 號: </p><p>  指導(dǎo)教師: </p><p>  職 稱: </p><p>  20 年 月 日</p><p><b>  摘 要</b&

3、gt;</p><p>  本次課程設(shè)計以AT89S51單片機(jī)為核心器件,外圍采用按鍵作為控制以及LCD1602作為顯示器所設(shè)計的方波發(fā)生器。該方波發(fā)生器能實現(xiàn)0-1kHz頻率范圍、占空比可調(diào)的方波輸出。其核心技術(shù)為單片機(jī)并行端口的應(yīng)用、單片機(jī)定時器中斷應(yīng)用和數(shù)字分離的ASCII碼液晶顯示技術(shù)。采用8個獨立的按鍵組成控制模塊,操作方便,按鍵控制模式可以通過程序進(jìn)行設(shè)定;顯示模塊則由液晶屏1602構(gòu)成,能顯示出實時

4、輸出方波的頻率及占空比,直觀明了。設(shè)計過程中遇到的問題是輸出方波的頻率、占空比與液晶顯示數(shù)據(jù)存在誤差,通過不斷調(diào)試程序,合理編寫中斷服務(wù)程序來修正誤差提高精確度,達(dá)到設(shè)計要求。該方波發(fā)生器具有線路簡單、結(jié)構(gòu)緊湊、價格低廉、性能優(yōu)越等優(yōu)點。</p><p>  關(guān)鍵詞:方波發(fā)生器;AT89S51單片機(jī);鍵盤;LCD1602 </p><p><b>  Abstract</b

5、></p><p>  The course design AT89S51 microcontroller as the core device, the external use of buttons as a control and LCD1602 displays are designed as a square wave generator. The square wave generator to

6、 achieve 0-1kHz frequency range, adjustable duty cycle square wave output. The core technology for the application of single chip parallel port, SCM applications and digital timer interrupt ASCII code separate liquid cry

7、stal display technology. 8-independent component control module buttons, easy to operat</p><p>  Keywords: Square wave generator; AT89S51 microcontroller; keyboard; liquid crystal 1602</p><p>&l

8、t;b>  目 錄</b></p><p>  引言 ………………………………………………………………………4</p><p>  1 概述…………………………………………………………………… 4</p><p>  1.1 設(shè)計內(nèi)容……………………………………………………………… 4</p><p>  1.2 設(shè)計的

9、基本要求…………………………………………………………4</p><p>  2 方波了生器設(shè)計方案…………………………………………………4</p><p>  2.1 方案介紹……………………………………………………………… 4</p><p>  2.2 方波發(fā)生器的原理與功能……………………………………………… 5</p><p>  

10、3 系統(tǒng)的硬件設(shè)計………………………………………………………5</p><p>  3.1 單片機(jī)最小系統(tǒng)…………………………………………………………5</p><p>  3.2 最小鍵盤接口電路……………………………………………………… 6</p><p>  3.3 液晶顯示電路……………………………………………………………6</p><

11、p>  4 系統(tǒng)的軟件設(shè)計……………………………………………………… 7</p><p>  4.1 主程序……………………………………………………………………7</p><p>  4.2 顯示子程序……………………………………………………………… 7</p><p>  4.3 鍵盤掃描程序……………………………………………………………7</p&g

12、t;<p>  4.3.1 頻率調(diào)節(jié)………………………………………………………………7</p><p>  4.3.2占空比調(diào)節(jié)…………………………………………………………… 7</p><p>  4.4 定時中斷服務(wù)程序………………………………………………………7</p><p>  5 調(diào)試與性能分析………………………………………………………

13、8</p><p>  5.1 硬件調(diào)試…………………………………………………………………8</p><p>  5.2 軟件調(diào)試…………………………………………………………………8</p><p>  性能及誤差分析………………………………………………………… 8</p><p>  6結(jié)論…………………………………………………………………

14、…… 8</p><p>  謝辭 ……………………………………………………………………… 10</p><p>  參考文獻(xiàn) …………………………………………………………………11</p><p>  附錄 ………………………………………………………………………12</p><p><b>  引言</b></p

15、><p>  本次課程設(shè)計的目的是通過在“單片機(jī)原理及應(yīng)用”課堂上學(xué)習(xí)的知識,以及查閱資料,培養(yǎng)一種自學(xué)的能力完成課程設(shè)計。并且引導(dǎo)一種創(chuàng)新的思維,把學(xué)到的知識應(yīng)用到日常生活當(dāng)中。在設(shè)計的過程中,不斷的學(xué)習(xí),思考和同學(xué)間的相互討論,運用科學(xué)的分析問題的方法解決遇到的困難,掌握單片機(jī)系統(tǒng)一般的開發(fā)流程,學(xué)會對覺問題的處理方法,積累設(shè)計系統(tǒng)的經(jīng)驗,充分發(fā)揮教學(xué)與初中的結(jié)合。全能提高個人系統(tǒng)開發(fā)的綜合能力,開拓了思維,為今

16、后能在相應(yīng)工作崗位上的工作打下了堅實的基礎(chǔ)。</p><p><b>  1 概述</b></p><p>  單片機(jī)集成度高、功能強、可靠性高、體積小、功耗低、價格低廉等一系列優(yōu)點。目前已經(jīng)滲入到人們工作和生活的方方面面,單片機(jī)的應(yīng)用領(lǐng)域已從面向工業(yè)控制、通信、交通、智能儀表等迅速發(fā)展到家用消費產(chǎn)品、辦公自動化、汽車電子、PC外圍以及網(wǎng)絡(luò)通訊等廣大領(lǐng)域。</

17、p><p>  單片機(jī)有兩種基本結(jié)構(gòu)形式:一種是在能用微型計算機(jī)中廣泛應(yīng)用的,將程序存儲器和數(shù)據(jù)存儲器合用一個存儲器空間的結(jié)構(gòu),稱為普林斯頓結(jié)構(gòu)。另一種是將程序存儲器和數(shù)據(jù)存儲器截然分開,分別尋址的結(jié)構(gòu),一般需要較大的程序存儲器,目前的單片機(jī)以采用程序存儲器和數(shù)據(jù)存儲器分開的結(jié)構(gòu)較多。本課程設(shè)計的方波發(fā)生器的核心是目前應(yīng)用極為廣泛的51系列單片機(jī)。</p><p><b>  1.1

18、 設(shè)計內(nèi)容</b></p><p>  本次課程設(shè)計是設(shè)計一個方波發(fā)生器,用鍵盤控制頻率和占空比變化,使用LCD液晶屏顯示出來。</p><p>  1.2 設(shè)計的基本要求</p><p>  頻率可調(diào),用6個按鍵來分別以不同的步長控制方波的頻率變化,步長分別為+/-1Hz、+/-10Hz、+/-100Hz,頻率設(shè)計范圍為1Hz~1KHz;</p&

19、gt;<p>  占空比可調(diào),采用兩個按鍵以設(shè)計的步長實現(xiàn)增加、減小波形占空比的作用,步長為+/-5%,可調(diào)范圍5%~95%。 </p><p>  顯示,將輸出方波的頻率以及占空比通過LCD1602液晶屏顯示出來。</p><p>  2 方波發(fā)生器設(shè)計方案</p><p>  在電子技術(shù)領(lǐng)域中,實現(xiàn)方波了生器的方法有很多,可以采用不同的原理及器件

20、構(gòu)成不同的路,但可以實現(xiàn)功能。在本次的設(shè)計中,與模擬電路有些不同,比如頻率和占空比的調(diào)節(jié)并不是通過改變變阻器的阻值來完成的,而是均采用按鍵來實現(xiàn)。</p><p><b>  2.1 方案介紹</b></p><p>  微處理器模塊AT89S51,頻率與占空比顯示模塊,8個獨立鍵盤模塊,復(fù)位電路模塊,晶振電路模塊。本設(shè)計中用到定時器為定時器T0,工作在方式2下,使用

21、工作方式2是考慮到其定時的準(zhǔn)確性以及穩(wěn)定性。用LCD1602液晶屏來顯示頻率和占空比,鍵盤的操盤是通過鍵盤掃描程序與單片機(jī)共同來控制的,鍵盤操作來完成按要求對頻率和占空比進(jìn)行調(diào)節(jié)。</p><p>  2.2 方波發(fā)生器的原理與功能</p><p>  方波發(fā)生器的原理方框圖如圖1所示</p><p>  由于系統(tǒng)的要求不高,比較單一的,再加上是通過定時器來調(diào)節(jié)頻率

22、和占空比,而非電阻,因此實現(xiàn)起來就相對簡化了。僅用鍵盤、AT89S51和液晶屏便可完成設(shè)計,達(dá)到要求實現(xiàn)的功能。</p><p>  方波發(fā)生器工作原理與功能:</p><p>  簡單的流程為:主程序掃描鍵盤,將設(shè)置的信息輸入,處理后,通過LCD顯示,并通過輸出端口輸出方波。單片機(jī)的晶振電路為12MHz,用到T0定時器,采用定時中斷的方式進(jìn)行頻率與占空比的調(diào)節(jié)。根據(jù)計算定時器T0在工作方

23、式2下初值的公式:TC=256-t*12/f 計算出定時器T0所要裝入的初值。頻率及占空比的顯示電路由LCD1602液晶屏完成,將當(dāng)前輸出頻率和占空比實時直觀地顯示在液晶上。該電路由一個復(fù)位鍵和8個功能鍵組成,其中6個按鍵實現(xiàn)不同步長頻率的增加與減小,2個按鍵實現(xiàn)占空比的調(diào)節(jié)。</p><p>  3 系統(tǒng)的硬件設(shè)計</p><p>  3.1 單片機(jī)最小系統(tǒng)</p>&l

24、t;p>  單片機(jī)各功能部件的運行都是以時鐘頻率為基準(zhǔn)的,因而時鐘頻率直接影響單片機(jī)的速度,時鐘電路的質(zhì)量也直接影響單片機(jī)系統(tǒng)的穩(wěn)定性。常用的時鐘電路方式有兩種:一種是內(nèi)部時鐘方式,一種是外部時鐘方式,這里采用的是內(nèi)部時鐘方式,外接晶振。時鐘電路由片外晶體、微調(diào)電容和單片機(jī)的內(nèi)部電路組成。選取頻率為12MHz和晶振,微調(diào)電容是瓷片電容。</p><p>  波形輸出口設(shè)定為AT89S51單片機(jī)的P3.3口,

25、若接示波器,則可通過示波器來觀察波形,是一個矩形波。</p><p>  此單元電路包括內(nèi)部振蕩方式時鐘電路、電且開關(guān)復(fù)位電路,具體電路如圖2所示:</p><p>  圖2 單片機(jī)最小系統(tǒng)</p><p>  3.2 最小鍵盤接口電路</p><p>  小鍵盤如圖3所示。它包括8個鍵,分別為K0-K8,具體功能已在前面介紹過。小鍵盤中引出

26、的8根線依次分別接單片機(jī)的P1端口。</p><p><b>  圖3 按鍵電路</b></p><p>  3.3 液晶顯示電路</p><p>  通過液晶1602顯示輸出方波的頻率和占空比,其電路及功能表如圖4、圖5所示:</p><p>  圖4 液晶屏電路 圖5 1602液晶屏引腳功能表&l

27、t;/p><p>  4 系統(tǒng)的軟件設(shè)計</p><p>  方波發(fā)生器的軟件設(shè)計包括主程序、延時了程序、液晶初始化程序、頻率顯示子程序、占空比的顯示子程序、鍵盤掃描程序、定時器中斷子程序。其中主程序用來控制整個程序的執(zhí)行,它與各子程序緊密相聯(lián),共同實現(xiàn)方波了生器的功能的執(zhí)行。</p><p><b>  4.1 主程序</b></p>

28、;<p>  主程序包括系統(tǒng)初始化(包括定時器的選擇,工作方式的選擇,定時初值的載入,液晶屏初始化及各參數(shù)的初始化)及顯示程序,是一個死循環(huán)系統(tǒng)。其流程圖如圖6所示:</p><p><b>  圖6 系統(tǒng)流程圖</b></p><p><b>  4.2 顯示子程序</b></p><p>  利用分離頻率

29、的各位數(shù)值,轉(zhuǎn)化為ASCII碼方式將各位分別顯示到LCD液晶屏上。</p><p>  4.3 鍵盤掃描程序</p><p>  鍵盤掃描采用的是線反法,逐個進(jìn)行掃描,當(dāng)有鍵按下,執(zhí)行語句。</p><p>  4.3.1 頻率調(diào)節(jié)</p><p>  掃描按鍵,分別由K1-K6實現(xiàn)頻率的加1Hz、減1Hz、加10Hz、減10Hz、</

30、p><p>  加100Hz、減100Hz,當(dāng)減到小于0時,頻率值定為0。</p><p>  4.3.2占空比調(diào)節(jié)</p><p>  掃描按鍵,分別由K7、K8實現(xiàn)占空比加5%,減5%,最大占空比為95%,最小占空比為5%。</p><p>  4.4 定時中斷服務(wù)程序</p><p>  實時器設(shè)計為100uS,采

31、用中斷方式,斷電服務(wù)函數(shù)實現(xiàn)cnt加1。計算出周期所對應(yīng)的計時個數(shù)i,i=10000/pl;以及占空比對應(yīng)的定時個數(shù)j,j=i*zkb/100;當(dāng)cnt小于j時,輸出高電位,當(dāng)cnt大于j時輸出低電位,cnt大于i時賦值為0循環(huán)實現(xiàn)方波輸出。實現(xiàn)了頻率以及占空比的調(diào)節(jié)。</p><p>  5 調(diào)試與性能分析</p><p><b>  5.1 硬件調(diào)試</b>&l

32、t;/p><p>  硬件的測試首先是檢查電路的邏輯線路是否正確,如果正確再檢查原理圖的線路連接是否正確,電路的布局安排是否合理等等。硬件問題比較少,主要體現(xiàn)在上拉電阻的使用,濾波電容的使用等,極少發(fā)生邏輯上的錯誤。硬件問題往往是致命的問題,其不易察覺,發(fā)現(xiàn)之后電路更改不容易。這就需要我們不斷的實驗,在實戰(zhàn)中吸取經(jīng)驗教訓(xùn)。</p><p><b>  5.2 軟件調(diào)試</b&g

33、t;</p><p>  軟件的測試只要是檢查程序的語法是否正確,數(shù)據(jù)結(jié)構(gòu)安排是否妥當(dāng),時序是否正確,整體流程安排是否合理。檢查妥當(dāng)后,就到了系統(tǒng)調(diào)試最關(guān)鍵的一步,軟硬件的協(xié)同調(diào)試,問題往往在此才能被發(fā)現(xiàn)。軟件問題是調(diào)試中遇到問題最多的,些系統(tǒng)中出現(xiàn)過的問題有以下幾處:</p><p>  鍵盤掃描程序不能實現(xiàn)頻率數(shù)值的加減。</p><p>  鍵盤掃描前沒有設(shè)標(biāo)

34、志,出現(xiàn)鍵值讀取變化不準(zhǔn)確。</p><p>  定時器的定時不正確及不穩(wěn)定,反復(fù)驗證后以方式2最為準(zhǔn)確與穩(wěn)定。</p><p>  頻率與占空比設(shè)定不正確,數(shù)值計算錯誤,不能正確輸出波形。</p><p>  5.3 性能及誤差分析</p><p>  該方波發(fā)生器能按基本要求實現(xiàn)了按鍵控制、液晶顯示以及方波輸出的功能,由于沒有涉及到幅度的

35、調(diào)節(jié),故沒有附加外圍放大電路。通過顯波器驗證,得到了頻率及占空比可調(diào)的方波,但存在一些誤差。</p><p>  誤差出現(xiàn)的原因主要由以下兩點:(1)晶振的準(zhǔn)確度問題,這是由于器件本身存在的問題,而定時值比較小,因此出現(xiàn)誤差;(2)程序執(zhí)行需要時間,使得定時時間存在微小的誤差。</p><p>  解決辦法:通過驗證,適當(dāng)調(diào)整定時器的定時值以主周期計數(shù)初值,修正存在的誤差,使輸出方波的頻率

36、及占空比與液晶屏顯示的結(jié)果一致。</p><p><b>  6 結(jié)論</b></p><p>  用單片機(jī)進(jìn)行方波發(fā)生器的設(shè)計,我不僅加深了對單片機(jī)的理論的理解,將理論很好地應(yīng)用到實際當(dāng)中去,而且學(xué)會了如何去培養(yǎng)我們的創(chuàng)新精神,將自己的想法通過硬件及軟件去實現(xiàn)出來,從而不斷戰(zhàn)勝困難,超越自己。我在這一設(shè)計過程中,遇到了很多困難,出現(xiàn)了很多不如意的地方,但我沒有氣餒

37、,努力鉆研,克服了種種困難。</p><p>  雖然學(xué)習(xí)過單片機(jī)相關(guān)的課程,但由于平時上課對單片機(jī)知識學(xué)習(xí)得不夠扎實,理解得不夠透徹、一知半解,致使在運用時不能貫通,特別是編寫程序?qū)崿F(xiàn)硬件功能部分,導(dǎo)致在設(shè)計過程中困難重重,往往無從下手,但是通過向老師、同學(xué)請教,最后還是一步步把問題一一解決了。在這次設(shè)計過程中,我也對protel99,keil等軟件有了更進(jìn)一步的了解,這使我在以后的學(xué)習(xí)中更加熟練。</p

38、><p>  這次的課程設(shè)計讓我懂得了很多:第一,學(xué)習(xí)要踏踏實實才能學(xué)好,掌握扎實的理論知識;第二,對資料的搜索,整理、總結(jié)是一個很重要的能力;第三,要學(xué)會向他人學(xué)習(xí);第四,要不斷實踐,提高自己的動手操作能力;第五,要有堅持不懈,努力研究的精神。因此,只有不斷提高自己的各方面能力,進(jìn)入社會才能找到自己的立足之地。</p><p><b>  謝 辭</b></p&

39、gt;<p>  本次課程設(shè)計能夠得以很好地完成,首先感謝指導(dǎo)老師的指導(dǎo),在題目的選取以及設(shè)計框架上給予了大量建議和幫助。在此向袁老師表示感謝。</p><p>  課課程設(shè)計的順利完成,也離不開其它各位老師、同學(xué)和朋友的關(guān)心和幫助。在整個的課程設(shè)計過程中,各位老師、同學(xué)和朋友積極的幫助我查資料,并提出了很好的建議和意見,在他們的幫助下,電路的設(shè)計以及報告得以不斷的完善,最終完成了課程設(shè)計。 另外,

40、要感謝所有傳授我知識的老師,是你們的教導(dǎo)使我有了良好的專業(yè)課知識,這也是課程設(shè)計得以完成的基礎(chǔ)。</p><p>  同時還要感謝二院科協(xié)提供了各種設(shè)備。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]李群芳等.單片微型計算機(jī)與接口技術(shù)(第3版)[M].北京電子工業(yè)出版社,2008.</p><p&

41、gt;  [2]周堅.單片機(jī)輕松入門(第2版)[M]. 北京:北京航空航天大學(xué)出版社,2007.</p><p>  [3]李群芳,肖看.單片機(jī)原理接口與應(yīng)用[M].北京:清華大學(xué)出版社,2005.</p><p>  [4]馬忠梅等.單片機(jī)C語言應(yīng)用程序設(shè)計[M].北京:北京航空航天大學(xué)出版社,1997.</p><p>  [5]高峰.單片微機(jī)應(yīng)用系統(tǒng)設(shè)計及實用

42、技術(shù)[M].北京:工業(yè)出版社,2004.</p><p><b>  附 錄</b></p><p><b>  附錄一:原理圖</b></p><p><b>  附錄二:PCB圖</b></p><p><b>  附錄三:程序</b></p&

43、gt;<p>  #include <reg51.h></p><p>  #include <intrins.h></p><p>  typedef unsigned char BYTE;</p><p>  typedef unsigned int WORD;</p><p>  typedef b

44、it BOOL ; </p><p>  sbit rs= P3^0;</p><p>  sbit rw = P3^1;</p><p>  sbit ep = P3^2;</p><p>  sbit Out= P3^3;</p><p>  sbit K1 = P1^0;</p><p&

45、gt;  sbit K2 = P1^1;</p><p>  sbit K3 = P1^2;</p><p>  sbit K4 = P1^3;</p><p>  sbit K5 = P1^4;</p><p>  sbit K6 = P1^5;</p><p>  sbit K7 = P1^6;</p>

46、<p>  sbit K8 = P1^7;</p><p>  long int i,j,cnt,pl,zkb;</p><p>  BYTE code dis1[] = {"P L:"};</p><p>  BYTE code dis2[] = {"Hz"};</p><p>  BY

47、TE code dis3[] = {"ZKB:"};</p><p>  BYTE code dis4[] = {"%"};</p><p>  void key(void);</p><p>  delay(BYTE ms)</p><p>  { // 延時子程序</p>&l

48、t;p><b>  BYTE i;</b></p><p>  while(ms--)</p><p>  {for(i = 0; i< 250; i++)</p><p>  {_nop_();</p><p><b>  _nop_();</b></p><

49、p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p&

50、gt;<p>  BOOL lcd_bz()</p><p>  {// 測試LCD忙碌狀態(tài)</p><p>  BOOL result;</p><p><b>  rs = 0;</b></p><p><b>  rw = 1;</b></p><p&

51、gt;<b>  ep = 1;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_()

52、;</b></p><p>  result = (BOOL)(P2 & 0x80);</p><p><b>  ep = 0;</b></p><p>  return result;</p><p><b>  }</b></p><p>  lc

53、d_wcmd(BYTE cmd)</p><p>  {// 寫入指令數(shù)據(jù)到LCD</p><p>  while(lcd_bz());</p><p><b>  rs = 0;</b></p><p><b>  rw = 0;</b></p><p><

54、b>  ep = 0;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  P2 = cmd;</b></p><p><b>  _nop_();<

55、/b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  ep = 1;</b></p><

56、;p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  ep

57、= 0;</b></p><p><b>  }</b></p><p>  lcd_pos(BYTE pos)</p><p>  {//設(shè)定顯示位置</p><p>  lcd_wcmd(pos | 0x80);</p><p><b>  }</b&

58、gt;</p><p>  lcd_wdat(BYTE dat)</p><p>  {//寫入字符顯示數(shù)據(jù)到LCD</p><p>  while(lcd_bz());</p><p><b>  rs = 1;</b></p><p><b>  rw = 0;</

59、b></p><p><b>  ep = 0;</b></p><p><b>  P2 = dat;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><

60、;p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  ep = 1;</b></p><p><b>  _nop_();</b></p><p><b>  _nop

61、_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  ep = 0;</b></p><p><b>  }</b></p>&

62、lt;p>  lcd_init()</p><p>  {//LCD初始化設(shè)定</p><p>  lcd_wcmd(0x38);//</p><p><b>  delay(1);</b></p><p>  lcd_wcmd(0x0c);//</p><p><

63、;b>  delay(1);</b></p><p>  lcd_wcmd(0x06);//</p><p><b>  delay(1);</b></p><p>  lcd_wcmd(0x01);//清除LCD的顯示內(nèi)容</p><p><b>  delay(1);</

64、b></p><p><b>  }</b></p><p>  void showpl(WORD pinglv) //頻率顯示程序</p><p><b>  {BYTE i; </b></p><p>  WORD a,b,c,d,e; </p><p&g

65、t;  e=0x30+(pinglv/10000)%10;</p><p>  d=0x30+(pinglv/1000)%10;</p><p>  c=0x30+(pinglv/100)%10;</p><p>  b=0x30+(pinglv/10)%10;</p><p>  a=0x30+(pinglv%10);</p>

66、<p>  lcd_pos(0);</p><p><b>  i = 0;</b></p><p>  while(dis1[i] != '\0')</p><p><b>  {</b></p><p>  lcd_wdat(dis1[i]);</p

67、><p><b>  i++;</b></p><p><b>  }</b></p><p>  lcd_pos(5);</p><p>  lcd_wdat(e);</p><p>  lcd_pos(6);</p><p>  lcd_wdat(

68、d);</p><p>  lcd_pos(7);</p><p>  lcd_wdat(c);</p><p>  lcd_pos(8);</p><p>  lcd_wdat(b);</p><p>  lcd_pos(9);</p><p>  lcd_wdat(a);</p&

69、gt;<p>  lcd_pos(10);</p><p><b>  i = 0;</b></p><p>  while(dis2[i] != '\0')</p><p>  {lcd_wdat(dis2[i]);</p><p><b>  i++;</b>&

70、lt;/p><p><b>  }</b></p><p><b>  } </b></p><p>  void showzkb(WORD zkb) //占空比顯示程序</p><p><b>  {BYTE i; </b></p><p&g

71、t;  WORD a,b; </p><p>  b=0x30+(zkb/10)%10;</p><p>  a=0x30+(zkb%10);</p><p>  lcd_pos(0x40);</p><p><b>  i = 0;</b></p><p>  while(dis3[i] !=

72、 '\0')</p><p>  {lcd_wdat(dis3[i]);</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  lcd_pos(0x48);</p><p>  lcd_wdat(b);&

73、lt;/p><p>  lcd_pos(0x49);</p><p>  lcd_wdat(a);</p><p>  lcd_pos(0x4a);</p><p><b>  i = 0;</b></p><p>  while(dis4[i] != '\0')</p>

74、;<p>  {lcd_wdat(dis4[i]);</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  void timer0() interrupt 1 usi

75、ng 1//定時器T0中斷服務(wù)程序</p><p><b>  {cnt++;</b></p><p>  if(cnt>=i)</p><p><b>  cnt=0;</b></p><p><b>  if(cnt<j)</b></p><

76、;p><b>  Out=1;</b></p><p><b>  else</b></p><p><b>  Out=0;</b></p><p><b>  } </b></p><p>  void main()</p>

77、<p>  { TMOD=0x02;//定時器0工作方式二</p><p>  TH0=0xA5; //高速定時為256-166=90uS</p><p><b>  TL0=0xA5;</b></p><p>  PT0=1; //置主定時器最高優(yōu)先級,減少對定時的影響</p><p>  E

78、A = 1; //開總中斷</p><p>  ET0 = 1; //開T0中斷</p><p>  TR0 = 1; //啟動T0定時器</p><p>  pl=100; //設(shè)定頻率初值</p><p>  zkb=50; //設(shè)定占空比初值

79、</p><p>  cnt=0; </p><p>  lcd_init();// 初始化LCD</p><p>  while(1) </p><p><b>  { </b></p><p>  showpl(pl); //顯示頻率

80、</p><p>  showzkb(zkb); //顯示占空比 </p><p><b>  key();</b></p><p>  i=10000/pl; //周期計數(shù)值</p><p>  j=i*zkb/100; //占空比計數(shù)值</p><p><

81、;b>  } </b></p><p><b>  }</b></p><p>  void key(){</p><p>  if(K1==0)//K1鍵按下頻率加1</p><p>  {while(K1==0);</p><p><b>  pl++;</

82、b></p><p><b>  }</b></p><p>  else if(K2==0&&pl>=1) //K2鍵按下頻率減1</p><p>  {while(K2==0);</p><p><b>  pl--;</b></p><

83、p><b>  }</b></p><p>  else if(K3==0) //K3鍵按下頻率加10</p><p>  {while(K3==0);</p><p><b>  pl+=10;</b></p><p><b>  }</b></p>

84、;<p>  else if(K4==0) //K4鍵按下頻率減10</p><p>  {while(K4==0);</p><p><b>  pl-=10;</b></p><p>  if(pl<0)pl=0;</p><p><b>  }</b></p

85、><p>  else if(K5==0) //K5鍵按下頻率加100</p><p>  {while(K5==0);</p><p><b>  pl+=100;</b></p><p><b>  }</b></p><p>  else if(K6==0)

86、 //K6鍵按下頻率減100</p><p>  {while(K6==0);</p><p><b>  pl-=100;</b></p><p>  if(pl<0) pl=0;</p><p><b>  }</b></p><p>  else if(K7==

87、0&&zkb<95) //K7鍵按下占空比加5%</p><p>  {while(K7==0);</p><p><b>  zkb+=5;</b></p><p><b>  }</b></p><p>  else if(K8==0&&zkb>5

88、) //K8鍵按下占空比減5%</p><p>  {while(K8==0);</p><p><b>  zkb-=5;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>

89、;  附錄四:元件清單</b></p><p>  單片機(jī)AT89S51 1塊</p><p>  單片機(jī)底座 1個</p><p>  LCD1602液晶屏 1塊</p><p>  12M晶振 1個</p><p>  30pF電容 2片</p>

90、<p>  10uF電解電容 1個</p><p>  10K可變電阻器 1個</p><p>  10k電阻 1個</p><p>  1k排阻 1個</p><p>  按鍵 9個</p><p>  雙口插座 2個</p>

溫馨提示

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

評論

0/150

提交評論