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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

11、p>  4 系統(tǒng)的軟件設(shè)計(jì)……………………………………………………… 7</p><p>  4.1 主程序……………………………………………………………………7</p><p>  4.2 顯示子程序……………………………………………………………… 7</p><p>  4.3 鍵盤(pán)掃描程序……………………………………………………………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 定時(shí)中斷服務(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ì)的目的是通過(guò)在“單片機(jī)原理及應(yīng)用”課堂上學(xué)習(xí)的知識(shí),以及查閱資料,培養(yǎng)一種自學(xué)的能力完成課程設(shè)計(jì)。并且引導(dǎo)一種創(chuàng)新的思維,把學(xué)到的知識(shí)應(yīng)用到日常生活當(dāng)中。在設(shè)計(jì)的過(guò)程中,不斷的學(xué)習(xí),思考和同學(xué)間的相互討論,運(yùn)用科學(xué)的分析問(wèn)題的方法解決遇到的困難,掌握單片機(jī)系統(tǒng)一般的開(kāi)發(fā)流程,學(xué)會(huì)對(duì)覺(jué)問(wèn)題的處理方法,積累設(shè)計(jì)系統(tǒng)的經(jīng)驗(yàn),充分發(fā)揮教學(xué)與初中的結(jié)合。全能提高個(gè)人系統(tǒng)開(kāi)發(fā)的綜合能力,開(kāi)拓了思維,為今

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

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

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

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

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

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

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

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

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

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

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

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

28、;<p>  主程序包括系統(tǒng)初始化(包括定時(shí)器的選擇,工作方式的選擇,定時(shí)初值的載入,液晶屏初始化及各參數(shù)的初始化)及顯示程序,是一個(gè)死循環(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án)掃描程序</p><p>  鍵盤(pán)掃描采用的是線(xiàn)反法,逐個(gè)進(jìn)行掃描,當(dāng)有鍵按下,執(zhí)行語(yǔ)句。</p><p>  4.3.1 頻率調(diào)節(jié)</p><p>  掃描按鍵,分別由K1-K6實(shí)現(xiàn)頻率的加1Hz、減1Hz、加10Hz、減10Hz、</

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

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

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

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

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

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

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

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

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

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

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

41、gt;  [2]周堅(jiān).單片機(jī)輕松入門(mén)(第2版)[M]. 北京:北京航空航天大學(xué)出版社,2007.</p><p>  [3]李群芳,肖看.單片機(jī)原理接口與應(yīng)用[M].北京:清華大學(xué)出版社,2005.</p><p>  [4]馬忠梅等.單片機(jī)C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,1997.</p><p>  [5]高峰.單片微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)及實(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>  { // 延時(shí)子程序</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>  {// 測(cè)試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>  {// 寫(xiě)入指令數(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>  {//寫(xiě)入字符顯示數(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//定時(shí)器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;//定時(shí)器0工作方式二</p><p>  TH0=0xA5; //高速定時(shí)為256-166=90uS</p><p><b>  TL0=0xA5;</b></p><p>  PT0=1; //置主定時(shí)器最高優(yōu)先級(jí),減少對(duì)定時(shí)的影響</p><p>  E

78、A = 1; //開(kāi)總中斷</p><p>  ET0 = 1; //開(kāi)T0中斷</p><p>  TR0 = 1; //啟動(dòng)T0定時(shí)器</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; //周期計(jì)數(shù)值</p><p>  j=i*zkb/100; //占空比計(jì)數(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個(gè)</p><p>  LCD1602液晶屏 1塊</p><p>  12M晶振 1個(gè)</p><p>  30pF電容 2片</p>

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論