用單片機(jī)進(jìn)行方波發(fā)生器的課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  一、概述3</b></p><p>  1.1、設(shè)計(jì)內(nèi)容3</p><p>  1.2、設(shè)計(jì)的基本要求3</p><p>  二、方波發(fā)生器設(shè)計(jì)方案3</p><p>  2.1、方案介紹4</p><p>  2.2、方波發(fā)生器的原理與功能4</p

2、><p>  三、系統(tǒng)的硬件設(shè)計(jì)5</p><p>  3.1、單片機(jī)最小系統(tǒng)5</p><p>  3.2、小鍵盤接口電路6</p><p>  3.3、LED顯示電路7</p><p>  四、系統(tǒng)的軟件設(shè)計(jì)8</p><p><b>  4.1、主程序8</b>

3、;</p><p>  4.2、系統(tǒng)初始化子程序8</p><p>  4.3、顯示子程序8</p><p>  4.4、鍵盤掃描程序9</p><p>  4.5、定時(shí)器中斷子程序11</p><p>  五、調(diào)試與性能分析12</p><p>  5.1硬件調(diào)試12</p&

4、gt;<p>  5.2軟件調(diào)試12</p><p><b>  六、設(shè)計(jì)體會(huì)12</b></p><p><b>  參考文獻(xiàn)13</b></p><p>  附錄A:基于單片機(jī)方波發(fā)生器的原理圖14</p><p>  附錄B:基于單片機(jī)方波發(fā)生器的程序清單15</

5、p><p><b>  方波發(fā)生器設(shè)計(jì)</b></p><p><b>  一、概述</b></p><p>  單片機(jī)集成度高、功能強(qiáng)、可靠性高、體積小、功耗地、使用方便、價(jià)格低廉等一系列優(yōu)點(diǎn),目前已經(jīng)滲入到人們工作和生活的方方面面,幾乎“無處不在,無所不為”。單片機(jī)的應(yīng)用領(lǐng)域已從面向工業(yè)控制、通訊、交通、智能儀表等迅速發(fā)展

6、到家用消費(fèi)產(chǎn)品、辦公自動(dòng)化、汽車電子、PC機(jī)外圍以及網(wǎng)絡(luò)通訊等廣大領(lǐng)域。 </p><p>  單片機(jī)有兩種基本結(jié)構(gòu)形式:一種是在通用微型計(jì)算機(jī)中廣泛采用的,將程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合用一個(gè)存儲(chǔ)器空間的結(jié)構(gòu),稱為普林斯頓結(jié)構(gòu)。另一種是將程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器截然分開,分別尋址的結(jié)構(gòu),一般需要較大的程序存儲(chǔ)器,目前的單片機(jī)以采用程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器截然分開的結(jié)構(gòu)為多。 本課題討論的方波發(fā)生器的核心是目前應(yīng)用極為廣

7、泛的 51系列單片機(jī)。</p><p><b>  1.1、設(shè)計(jì)內(nèi)容</b></p><p>  本課程設(shè)計(jì)是設(shè)計(jì)一個(gè)方波發(fā)生器,用4位數(shù)碼管顯示方波的頻率。</p><p>  1.2、設(shè)計(jì)的基本要求</p><p>  頻率可調(diào),用一個(gè)變阻器來調(diào)整波形的頻率,頻率調(diào)節(jié)范圍為20Hz~2000Hz;</p>

8、<p>  占空比可調(diào),采用兩個(gè)按鍵來實(shí)現(xiàn)增加、減小波形的占空比作用,占空比調(diào)節(jié)步長為1%,即每按鍵一次,占空比增加或減少1%。占空比用另外兩位數(shù)碼管顯示。</p><p>  系統(tǒng)上電時(shí)頻率依變阻器的阻值設(shè)定,占空比設(shè)定為50%。</p><p>  而我們在此設(shè)計(jì)的方波發(fā)生器與要求要設(shè)計(jì)的有點(diǎn)區(qū)別,所設(shè)計(jì)的頻率調(diào)節(jié)范圍為1Hz~15000Hz,以調(diào)節(jié)變阻器的阻值來實(shí)現(xiàn)頻率

9、的調(diào)節(jié)相對(duì)來說要麻煩些。因此,頻率也使用按鍵來進(jìn)行調(diào)節(jié),不同的頻率及占空比可以使用不同的按鍵來實(shí)現(xiàn),而以鍵盤掃描來實(shí)現(xiàn)各鍵的不同功能;顯示部分可以使用ZLG7290芯片及數(shù)碼管來實(shí)現(xiàn)。由此即可構(gòu)成一個(gè)最小單片機(jī)應(yīng)用系統(tǒng)。 </p><p>  二、方波發(fā)生器設(shè)計(jì)方案</p><p>  在電子技術(shù)領(lǐng)域中,實(shí)現(xiàn)方波發(fā)生器的方法有很多種,可以采用不同的原理及器件構(gòu)成不同的電路,但可以實(shí)現(xiàn)相同的

10、功能。在此次設(shè)計(jì)中,有些地方與課題原本的具體要求有點(diǎn)不同。如實(shí)現(xiàn)頻率調(diào)節(jié)時(shí),不是按要求利用調(diào)整變阻器的阻值來完成的,而是用按鍵來實(shí)現(xiàn)的。</p><p><b>  2.1、方案介紹</b></p><p>  微處理器模塊AT89S52,頻率與占空比信息顯示模塊,2×4矩陣鍵盤模塊,74LS164移位寄存器顯示驅(qū)動(dòng)模塊。本設(shè)計(jì)中用到兩個(gè)定時(shí)器,定時(shí)器0和定

11、時(shí)器1,其中定時(shí)器0工作在定時(shí)方式下,  決定方波的頻率;定時(shí)器1同樣工作在定時(shí)方式下,用于設(shè)定占空比。用LED顯示器來顯示頻率與占空比,鍵盤的操作是通過外中斷與單片機(jī)共同來控制的,鍵盤操作來完成按要求對(duì)頻率與占空比進(jìn)行調(diào)節(jié)。</p><p>  2.2、方波發(fā)生器的原理與功能</p><p>  方波發(fā)生器的原理方框圖如圖1所示</p><p>

12、;  由于系統(tǒng)的要求不高,比較單一的,再加上我們是通過定時(shí)器來調(diào)節(jié)頻率的,而非電阻,因此實(shí)現(xiàn)起來就相對(duì)簡化了。僅用鍵盤、AT89S52及串行顯示便可完成設(shè)計(jì),達(dá)到所要求實(shí)現(xiàn)的功能。</p><p>  方波發(fā)生器工作原理與功能:</p><p>  簡單的流程為:主程序掃描鍵盤,將設(shè)置信息輸入,處理后,輸出到LED顯示器顯示。</p><p>  單片機(jī)的晶振為11

13、.0592MHz,用到了兩個(gè)定時(shí)器,即定時(shí)器0與定時(shí)器1,分別進(jìn)行頻率與占空比的定時(shí),兩個(gè)定時(shí)器都是工作在方式1。根據(jù)計(jì)算定時(shí)器初值的公式:</p><p>  計(jì)算出定時(shí)器0與定時(shí)器1所要裝入的初值。</p><p>  頻率及占空比的顯示電路由74LS164構(gòu)成的驅(qū)動(dòng)電路和LED數(shù)碼顯示管組成,利用八個(gè)數(shù)碼管來顯示,有五位是用來顯示頻率的,有兩位是顯示占空比的,在頻率與占空比顯示管中間

14、有一個(gè)LED數(shù)碼管是用來顯示“——”的,用以區(qū)分頻率顯示與占空比顯示的。</p><p>  此電路的鍵盤是由一個(gè)狀態(tài)鍵,四個(gè)功能鍵(調(diào)節(jié)頻率與占空比的增減)組成,其特殊之處在于利用外部中斷實(shí)現(xiàn)鍵盤掃描。狀態(tài)鍵有三種狀態(tài),當(dāng)其處于狀態(tài)0時(shí),則其它的鍵會(huì)處于無用狀態(tài),當(dāng)其處于狀態(tài)1時(shí),可通過按四個(gè)調(diào)節(jié)鍵來調(diào)節(jié)頻率,處于第三種狀態(tài)時(shí),按四個(gè)調(diào)節(jié)鍵中的前兩個(gè)便可對(duì)占空比進(jìn)行調(diào)節(jié)了。</p><p&g

15、t;<b>  三、系統(tǒng)的硬件設(shè)計(jì)</b></p><p>  3.1、單片機(jī)最小系統(tǒng)</p><p>  單片機(jī)各功能部件的運(yùn)行都是以時(shí)鐘頻率為基準(zhǔn)的,有條不紊地進(jìn)行工作。因而時(shí)鐘頻率直接影響單片機(jī)的速度,時(shí)鐘電路的質(zhì)量也直接影響單片機(jī)系統(tǒng)的穩(wěn)定性。常用的時(shí)鐘電路方式有兩種:一種是內(nèi)部時(shí)鐘方式,一種是外部時(shí)鐘方式,這里采用的是內(nèi)部時(shí)鐘方式,外接晶振。時(shí)鐘電路由片外晶

16、體、微調(diào)電容和單片機(jī)的內(nèi)部電路組成。選取頻率為11.0592MHz的晶振,微調(diào)電容是瓷片電容。</p><p>  89S52單片機(jī)的P0.7口作為波形輸出口,若接示波器,則可通過示波器來觀察波形,是一個(gè)矩形波。</p><p>  此單元電路包括時(shí)鐘電路、復(fù)位電路,具體電路如圖2所示:</p><p>  MAX708 可同時(shí)輸出高電平有效和低電平有效的

17、復(fù)位信號(hào)復(fù)位信號(hào)可由VCC電壓手動(dòng)復(fù)位輸入或由獨(dú)立的比較器觸發(fā)</p><p>  3.2、小鍵盤接口電路</p><p>  小鍵盤如圖3所示。它包括8個(gè)鍵,系統(tǒng)中用到的鍵只有5個(gè),分別為0號(hào)、1號(hào)、2號(hào)、3號(hào)、4號(hào)鍵。其中0號(hào)鍵是狀態(tài)鍵,采用外部中斷控制,用它來確定其它幾個(gè)鍵的按鍵功能,具體作用在前述的系統(tǒng)功能中已做介紹了;另外4個(gè)鍵為功能鍵,調(diào)節(jié)頻率與占空比的。小鍵盤中引出的6根線依

18、次分別接單片機(jī)的P1.0、P1.1、P1.2、P1.3、P1.4、P1.5口。</p><p>  圖3 小鍵盤接口電路 (CD4012是雙四輸入與非門)</p><p>  3.3、LED顯示電路</p><p>  采用靜態(tài)顯示來實(shí)現(xiàn)顯示功能,如圖4所示。移位寄存器74LS164,實(shí)現(xiàn)串行輸入,并行輸出。串行數(shù)據(jù)由RXD輸出,從74LS164的A、B端口輸入寄

19、存器,移位時(shí)鐘由TXD提供。在移位時(shí)鐘作用下,存放顯示器段碼的串行發(fā)送緩沖器數(shù)據(jù)逐位由A、B端移入到74LS164中,再由Q0到Q7并行輸出到顯示數(shù)碼管相應(yīng)的LED上。8片74LS164首尾相串,而時(shí)鐘端則接在一起。這部分的最終功能是顯示頻率與占空比。</p><p>  顯示部分具體電路如圖4所示:</p><p>  圖4 LED顯示電路 (74164 是8位串入、并出移位寄

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

21、gt;</p><p>  主程序包括系統(tǒng)初始化及顯示程序,是一個(gè)死循環(huán)系統(tǒng)。其流程圖如圖5所示:</p><p>  4.2、系統(tǒng)初始化子程序</p><p>  在此程序中,給所有變量賦初值,有鍵盤掃描口、選擇串行口工作方式SCON、狀態(tài)標(biāo)志位flag、初始頻率與占空比及其定時(shí)、定時(shí)器0與定時(shí)器1的工作方式等。初始化時(shí)啟動(dòng)了定時(shí)器0與定時(shí)器1。</p>

22、;<p><b>  4.3、顯示子程序</b></p><p>  利用分離頻率的各位數(shù)值,將各位數(shù)值分別顯示出來。在程序中利用了頻率顯示的高位滅零的方法以致最高位為0時(shí)就不顯示,以致顯示效果美觀化。一共有五位是顯示頻率的,若頻率小于10000時(shí),則萬位不顯示;若頻率小于1000時(shí),則萬位與千位都不顯示,依次類推。</p><p>  占空比的顯示規(guī)律

23、與頻率的一樣。</p><p>  顯示子程序流程圖如圖6所示:</p><p>  4.4、鍵盤掃描程序</p><p>  鍵盤掃描用外中斷0實(shí)現(xiàn),采用的是線反法,鍵盤掃描碼采用逐行掃描的方法。</p><p>  關(guān)于鍵盤掃描程序的說明:</p><p>  頻率可調(diào)時(shí),占空比保持原狀不變,反之亦然,只能進(jìn)行單一

24、變量的調(diào)節(jié),狀態(tài)標(biāo)志flag的初始值為0。</p><p><b>  (1)頻率調(diào)節(jié):</b></p><p>  i==0時(shí),按鍵為狀態(tài)鍵,此時(shí)flag加1,即flag==1,此時(shí)進(jìn)行頻率的調(diào)節(jié)??梢赃M(jìn)行加1Hz、減1Hz、加100Hz、減100Hz操作,分別由1號(hào)鍵、2號(hào)鍵、3號(hào)鍵、4號(hào)鍵控制。如果按住某個(gè)鍵不放,便會(huì)執(zhí)行連續(xù)加值或減值操作。這里的頻率的最大值為

25、15000Hz,當(dāng)頻率增至最大值時(shí),還按增值鍵,此時(shí)頻率會(huì)自動(dòng)跳到1Hz開始繼續(xù)增加。同理,頻率的最小值為1Hz,當(dāng)減頻率減至最小值時(shí),再按減頻率鍵,則頻率會(huì)跳到15000Hz。</p><p><b> ?。?)占空比調(diào)節(jié):</b></p><p>  當(dāng)狀態(tài)值flag==2時(shí),此時(shí)頻率保持不變,進(jìn)行占空比調(diào)節(jié)。只可進(jìn)行加1與減1操作,分別由1號(hào)鍵、2號(hào)鍵控制。&l

26、t;/p><p>  要注意的是占空比的初值是50%,我們定義的ZKB為50(百分比的分子部分,為一整數(shù)),故調(diào)節(jié)占空比時(shí),ZKB會(huì)進(jìn)行加1,減1操作。ZKB的最大值為99,當(dāng)增到最大值時(shí),便會(huì)返回到值1,如此循環(huán)。</p><p> ?。?)為了減輕單片機(jī)的工作量,在軟件設(shè)計(jì)中采取了這樣的措施,在修改參數(shù)確定后才進(jìn)行定時(shí)器初值TC0、TC1的計(jì)算。</p><p> 

27、 鍵盤中斷處理子程序流程圖與鍵處理流程圖分別如圖7、圖8所示:</p><p>  4.5、定時(shí)器中斷子程序</p><p>  定時(shí)器中斷子程序中有定時(shí)器0與定時(shí)器1中斷,頻率定時(shí)器0中斷流程圖與占空比定時(shí)器1流程圖分別如圖9、圖10所示。</p><p>  (1)定時(shí)器0遇中斷執(zhí)行的操作有復(fù)位,啟動(dòng)自身進(jìn)行頻率定時(shí),同時(shí)啟動(dòng)定時(shí)器1,進(jìn)行占空比定時(shí),輸出高電平

28、。</p><p> ?。?)定時(shí)器1遇中斷,停止自身的計(jì)時(shí),輸出低電平。</p><p><b>  五、調(diào)試與性能分析</b></p><p><b>  5.1硬件調(diào)試</b></p><p>  硬件的測試首先是檢查電路的邏輯線路是否正確,如果正確再檢查原理圖的線路連接是否正確,電路的布局安

29、排是否合理等等。軟件的測試只要是檢查程序的語法是否正確,數(shù)據(jù)結(jié)構(gòu)安排是否妥當(dāng),時(shí)序是否正確,整體流程安排是否合理。上面兩部檢查妥當(dāng)后,就到了系統(tǒng)調(diào)試最關(guān)鍵的一步,軟硬件的協(xié)同調(diào)試,問題往往在此才能被發(fā)現(xiàn)。</p><p><b>  5.2軟件調(diào)試</b></p><p>  在軟硬件協(xié)同調(diào)試時(shí),硬件問題比較少,主要體現(xiàn)在上拉電阻的使用,濾波電容的使用等,極少發(fā)生邏輯

30、上的錯(cuò)誤。硬件的問題往往是致命的問題,其不易察覺,發(fā)現(xiàn)之后電路更改也不容易。這就需要我們不斷的實(shí)驗(yàn),在實(shí)戰(zhàn)中摸索出規(guī)律,吸取經(jīng)驗(yàn)教訓(xùn),在以后的電路設(shè)計(jì)中能設(shè)計(jì)出穩(wěn)定的抗干擾能力強(qiáng)的電路。軟件問題是調(diào)試中遇到問題最多的,此系統(tǒng)中出現(xiàn)過的問題有以下幾處:</p><p>  1、鍵盤中斷處理程序中中斷入口后,沒有關(guān)掉外部中斷,出現(xiàn)鍵值讀取不正確,不能正確操作鍵盤。解決方法,在中斷入口處關(guān)掉外中斷,并在出口時(shí)再開外中斷

31、;</p><p>  2、鍵盤掃描前沒有軟件延時(shí)消抖,出現(xiàn)鍵值讀取不準(zhǔn)確。解決方法,在鍵盤中斷入口后在鍵值掃描前軟件延時(shí)5ms,消去鍵盤抖動(dòng)所帶來的誤操作;</p><p>  3、程序中有個(gè)別地方將“=”與“==”混淆,造成結(jié)果不準(zhǔn)確,解決辦法,仔細(xì)查找,將混淆出更正。</p><p>  再把到計(jì)時(shí)設(shè)定時(shí)子程序加進(jìn)來,看是否能通過菜單正確調(diào)用,返回。能否修改到

32、計(jì)時(shí)。整個(gè)調(diào)試完畢。</p><p><b>  六、設(shè)計(jì)體會(huì)</b></p><p>  在單片機(jī)課程設(shè)計(jì)中,我不僅加深了對(duì)單片機(jī)理論的理解,將理論很好地應(yīng)用到實(shí)際當(dāng)中去,而且我還學(xué)會(huì)了如何去培養(yǎng)我們的創(chuàng)新精神,從而不斷地戰(zhàn)勝自己,超越自己。更重要的是,我在這一設(shè)計(jì)過程中,學(xué)會(huì)了堅(jiān)持不懈,不輕易言棄。設(shè)計(jì)過程,也好比是我們?nèi)祟惓砷L的歷程,常有一些不如意,也許這就是在

33、對(duì)我們提出了挑戰(zhàn),勇敢過,也戰(zhàn)勝了,勝利的鐘聲也就一定會(huì)為我們而敲響。</p><p>  但是,由于平時(shí)對(duì)單片機(jī)知識(shí)學(xué)習(xí)得不夠扎實(shí),理解得不夠透徹、一知半解,致使在運(yùn)用是不能貫通,導(dǎo)致在設(shè)計(jì)過程中困難重重,往往無從下手,但是通過和同組的同學(xué)一起探討,最后還是一步一步的把所有的問題給一一解決了。在這次設(shè)計(jì)過程中,我也對(duì)word、protel、畫圖板等軟件有了更進(jìn)一步的了解,這使我在以后的學(xué)習(xí)中更加熟練。</

34、p><p>  總之,本次單片機(jī)課程設(shè)計(jì)讓我悟出了許多東西:第一,就是對(duì)資料的搜索、整理、歸類、總結(jié)、保存的能力是一個(gè)至關(guān)重要的個(gè)人能力。如果沒有這種能力,在大學(xué)學(xué)習(xí)階段,那么我們的學(xué)習(xí)將會(huì)是一種負(fù)擔(dān);今后我們走出校門,甚至在整個(gè)人生階段,也將會(huì)碌祿無為;第二,我們要學(xué)會(huì)堅(jiān)持不懈,不輕易言棄,這對(duì)于我們非常的重要。如果我們沒有這種精神,一旦我們遇到一點(diǎn)挫折,我們也許就會(huì)被打敗,以后進(jìn)入社會(huì)就會(huì)沒有我們的立足之地。因此

35、,我們要珍惜大學(xué)時(shí)光,循序漸進(jìn)的培養(yǎng)這些能力,這樣才不會(huì)被瞬息萬變的時(shí)代所淘汰。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 何立民.MCS51單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2003.</p><p>  [2] 徐君毅.單片微型機(jī)原理與應(yīng)用[M].上海:上海科技出版社,1995</

36、p><p>  [3] 公茂法.單片機(jī)人機(jī)接口實(shí)例集[M].北京:航空航天大學(xué)出版社,1998.</p><p>  [4] 沈紅衛(wèi).基于單片機(jī)的智能系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[M].北京:電子工業(yè)出版社, 2005.</p><p>  [5] 李廣弟,朱月秀等.單片機(jī)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社, 2003.</p><p>  附錄A:基

37、于單片機(jī)方波發(fā)生器的原理圖</p><p>  附錄B:基于單片機(jī)方波發(fā)生器的程序清單</p><p>  #include<reg51.h></p><p>  #include<intrins.h></p><p>  #define uchar unsigned char </p><p>

38、;  #define uint unsigned int </p><p>  #define KEY_PORT P1 //P1口為鍵盤掃描口</p><p>  sbit OutPut=P0^7; //矩形波輸出口</p><p>  /* 設(shè)全局變量 */</p><p>  float fosc=110

39、59200; //系統(tǒng)時(shí)鐘頻率</p><p>  float length=65536; //方式1計(jì)數(shù)長度</p><p>  uchar flag; //狀態(tài)鍵標(biāo)志</p><p>  uchar ZKB; //占空比</p><p>  uint PL; //頻率</p

40、><p>  uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H; //定時(shí)器0和1的定時(shí)初值</p><p>  uchar code tabl[12]=</p><p>  {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00}; //LED共陰極代碼</p&g

41、t;<p>  uchar code tabl2[18]=</p><p>  {0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88}; //鍵值表</p><p>  /*****************************************</p&

42、gt;<p><b>  延時(shí)子程序</b></p><p>  *****************************************/</p><p>  void delay1ms(uchar n) //延時(shí)n ms</p><p><b>  {</b></p>

43、<p><b>  uchar j;</b></p><p>  while(n--) </p><p>  for(j=0;j<122;j++)</p><p>  { ; } </p><p><b>  }</b></p

44、><p>  /*****************************************</p><p><b>  系統(tǒng)初始化</b></p><p>  *****************************************/</p><p>  void system_init(void ) &

45、lt;/p><p><b>  {</b></p><p>  KEY_PORT=0x0f;</p><p>  SCON=0x00;</p><p><b>  flag=0;</b></p><p><b>  PL=1000;</b></p>

46、;<p><b>  ZKB=50; </b></p><p>  TL0=0x66; //初始頻率1KHz定時(shí)1ms</p><p><b>  TH0=0xfc;</b></p><p>  TL1=0x33; //初始占空比50定時(shí)0.5ms</p><p&g

47、t;<b>  TH1=0xfe;</b></p><p>  TMOD=0x11; //定時(shí)器1和定時(shí)器0工作在方式1,的定時(shí)模式</p><p>  IT0=0; //選擇INT0為低電平觸發(fā)方式</p><p>  EX0=1; //外部中

48、斷0允許</p><p>  ET0=1; //定時(shí)器1和定時(shí)器0中斷允許</p><p><b>  ET1=1;</b></p><p>  EA=1; //系統(tǒng)中斷允許</p><p>  TR0=1; /

49、/定時(shí)器1和定時(shí)器0開始定時(shí)</p><p><b>  TR1=1;</b></p><p><b>  }</b></p><p>  /*****************************************</p><p><b>  發(fā)送數(shù)據(jù)</b><

50、/p><p>  *****************************************/</p><p>  void send(uchar d)</p><p><b>  {</b></p><p><b>  SBUF=d;</b></p><p>  whi

51、le(!TI);</p><p><b>  TI=0; </b></p><p><b>  }</b></p><p>  /*****************************************</p><p><b>  顯示子程序</b></p>

52、;<p>  *****************************************/</p><p>  void display(uint PL,uchar ZKB)</p><p><b>  {</b></p><p>  uchar a,b,c,d,e,m,n;</p><p>  a

53、=PL/10000; //分離頻率的各位數(shù)值</p><p>  b=PL/1000;</p><p><b>  b=b%10;</b></p><p><b>  c=PL/100;</b></p><p><b>  c=c%10;</b></p>&

54、lt;p><b>  d=PL%100;</b></p><p><b>  d=d/10;</b></p><p><b>  e=PL%10;</b></p><p>  if(a==0) //頻率顯示的高位滅零</p><p><b>  {&l

55、t;/b></p><p><b>  a=10;</b></p><p><b>  if(b==0)</b></p><p><b>  {</b></p><p><b>  b=10;</b></p><p><

56、b>  if(c==0)</b></p><p><b>  {</b></p><p><b>  c=10;</b></p><p><b>  if(d==0)</b></p><p><b>  {d=10;</b></p&

57、gt;<p>  if(e==0)e=10;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p&g

58、t;  m=ZKB/10; //分離占空比各位數(shù)值</p><p><b>  n=ZKB%10;</b></p><p><b>  if(m==0) </b></p><p>  {m=10; //占空比顯示的高位滅零</p><p>  if(n==0)n=10;&

59、lt;/p><p><b>  }</b></p><p>  send(tabl[a]);</p><p>  send(tabl[b]);</p><p>  send(tabl[c]);</p><p>  send(tabl[d]);</p><p>  send(ta

60、bl[e]);</p><p>  send(0x02); //頻率和占空比中間加一橫線“-”以示區(qū)別</p><p>  send(tabl[m]);</p><p>  send(tabl[n]);</p><p>  delay1ms(200);</p><p>  delay1ms(200);//延時(shí)

61、開鍵盤中斷,處理好(避免又利用)連擊問題</p><p><b>  }</b></p><p>  /*****************************************</p><p><b>  鍵盤掃描(線反法)</b></p><p>  ******************

62、***********************/</p><p>  void Key_Scan() interrupt 0 //鍵盤掃描用外中斷0 </p><p><b>  { </b></p><p>  uchar scancode,keycode,i;</p><p>  float T

63、C0,TC1;</p><p>  EX0=0; //關(guān)中斷</p><p>  delay1ms(5);</p><p>  scancode=0xef; //鍵盤掃描碼,采用逐行掃描的方法</p><p>  while(scancode!=

64、0xff)</p><p><b>  {</b></p><p>  KEY_PORT=scancode; //輸入掃描碼,掃描P1.4對(duì)應(yīng)的行</p><p>  keycode=KEY_PORT; //讀出數(shù)據(jù),看是否在此行上的某列鍵盤被按下 </p>&

65、lt;p>  if((keycode&0x0f)!=0x0f) break; //掃描到按下的鍵,則退出 </p><p>  scancode=(keycode<<1)|0x0f; //否則,更新掃描碼繼續(xù)掃描 </p><p><b>  } </b></p><p>  keycode=

66、~keycode; </p><p>  for(i=0;i<8;i++)</p><p>  if(tabl2[i]==keycode)break; //取得鍵號(hào)</p><p>  if(i==0) flag++;</p><p>  if(flag==1) //狀態(tài)1下對(duì)頻率進(jìn)行調(diào)整</p>

67、<p><b>  {</b></p><p>  if(i==1) //按鍵為1號(hào),頻率加1</p><p><b>  {PL++;</b></p><p>  if(PL>15000) PL=15;</p><p><b>  }</b>&l

68、t;/p><p>  if(i==2) //按鍵為2號(hào),頻率減1</p><p><b>  {PL--;</b></p><p>  if(PL<15) PL=15000;</p><p><b>  }</b></p><p>  if(i==3)

69、 //按鍵為3號(hào),頻率加100</p><p><b>  {PL+=100;</b></p><p>  if(PL>15000) PL=15;</p><p><b>  }</b></p><p>  if(i==4) //按鍵為4號(hào),頻率減100</p>

70、;<p>  {PL=PL-100;</p><p>  if(PL<15) PL=15000;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(flag==2) //狀態(tài)2下對(duì)占空比進(jìn)行調(diào)整</p&g

71、t;<p><b>  {</b></p><p>  if(i==1) //按鍵為1號(hào),占空比加1</p><p><b>  {ZKB++;</b></p><p>  if(ZKB>99) ZKB=1;</p><p><b>  }</

72、b></p><p>  if(i==2) //按鍵為2號(hào),占空比減1</p><p><b>  {ZKB--;</b></p><p>  if(ZKB<1) ZKB=99;</p><p><b>  }</b></p><p><

73、b>  } </b></p><p>  if(flag==3) //狀態(tài)返回,正常工作</p><p><b>  {</b></p><p>  flag=0; //清狀態(tài)標(biāo)志</p><p>  TC0=(length-fosc/(

74、12*PL)+0.5); //頻率定時(shí)初值</p><p>  TC1=(length-(fosc*ZKB)/(12*100*PL)+0.5); //占空比定時(shí)初值</p><p>  TIMER0_L=(uint)TC0/256; //計(jì)算定時(shí)器0和定時(shí)器1的初值</p><p>  TIMER0_H=(uint)TC0

75、%256; </p><p>  TIMER1_L=(uint)TC1/256;</p><p>  TIMER1_H=(uint)TC1%256;</p><p><b>  } </b></p><p>  display(PL,ZKB);</p><p>  KEY_PO

76、RT=0x0f;//給鍵盤掃描口賦初值,以便下次按鍵正確讀入</p><p>  EX0=1; //開中斷</p><p><b>  }</b></p><p>  /*****************************************</p><p><b>

77、  定時(shí)器中斷子程序</b></p><p>  *****************************************/</p><p>  void Timer0_PL() interrupt 1 //頻率定時(shí)器0中斷 </p><p><b>  { </b></p><p> 

78、 TR1=1;//啟動(dòng)定時(shí)器1,占空比定時(shí)</p><p>  TL0=TIMER0_L;</p><p>  TH0=TIMER0_H;</p><p>  OutPut=1; //輸出高電平</p><p><b>  }</b></p><p>  void T

79、imer1_PL() interrupt 3 //占空比定時(shí)器1中斷 </p><p><b>  {</b></p><p>  TR1=0;//定時(shí)器1停止</p><p>  TL1=TIMER1_L;</p><p>  TH1=TIMER1_H;</p><p&g

80、t;  OutPut=0; //輸出高電平</p><p><b>  }</b></p><p>  /*****************************************</p><p><b>  主函數(shù)</b></p><p>  **************

81、***************************/</p><p>  void main()</p><p><b>  {</b></p><p>  uint PL0=0;</p><p>  uchar ZKB0=0;</p><p>  system_init();

82、//系統(tǒng)初始化</p><p>  while(1)//死循環(huán),顯示頻率和占空比</p><p><b>  {</b></p><p>  if(flag==0) //狀態(tài)0時(shí),正常顯示頻率和占空比</p><p>  display(PL,ZKB);</

83、p><p>  if(flag==1) //狀態(tài)1時(shí),頻率調(diào)整狀態(tài),頻率閃爍</p><p><b>  {</b></p><p>  display(PL0,ZKB);</p><p>  display(PL,ZKB);</p><p><b&g

84、t;  }</b></p><p>  if(flag==2) //狀態(tài)2時(shí),占空比調(diào)整狀態(tài),占空比閃爍</p><p><b>  {</b></p><p>  display(PL,ZKB0);</p><p>  display(PL,ZKB);</p

溫馨提示

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

評(píng)論

0/150

提交評(píng)論