版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 畢業(yè)設(shè)計(論文)任務(wù)書</p><p> 1.畢業(yè)設(shè)計(論文)題目:單片機定時器設(shè)計</p><p> 2.畢業(yè)設(shè)計(論文)使用的原始資料數(shù)據(jù)及設(shè)計技術(shù)要求:</p><p> 定時時間1。1s~99s,可調(diào)。</p><p> 定時時間2。1s~99s,可調(diào)。</p><p> 定時時
2、間3。1min~99min,可調(diào)。</p><p> 所有時間數(shù)字均可調(diào)。用LED數(shù)碼管顯示剩余時間。</p><p> 3.畢業(yè)設(shè)計(論文)工作內(nèi)容及完成時間:定時器可以實現(xiàn)三個時間的顯示,</p><p> 將程序?qū)懭?1單片機中,通過調(diào)節(jié)按鍵控制時間并在LED上顯示出來。 </p><p> 日期:自2
3、011年1月12日至2011年2月24日</p><p><b> 指導(dǎo)老師評語:</b></p><p> ________________________________________________________________________________________________________________________________
4、___________________________________________________________________________________________________________________________________________________ </p><p><b> 目錄</b></p><p><b&
5、gt; 1設(shè)計任務(wù)4</b></p><p><b> 2設(shè)計意義4</b></p><p> 3整體方案設(shè)計4</p><p> 3.1方案設(shè)計5</p><p> 3.2方案選擇6</p><p> 4硬件電路的設(shè)計7</p>&l
6、t;p> 4.1STC單片機的最小系統(tǒng)8</p><p> 4.2LED顯示與單片機接口9</p><p> 4.3發(fā)光二極管、按鍵、繼電器與單片機的接線12</p><p><b> 5軟件設(shè)計14</b></p><p> 5.1程序中硬件功能介紹14</p><
7、;p> 5.2發(fā)光二極管指示程序16</p><p> 5.3鍵掃描程序17</p><p> 5.4數(shù)碼管顯示程序20</p><p><b> 6設(shè)計附錄23</b></p><p> 6.1源程序23</p><p> 6.2電路原理圖32</
8、p><p> 6.3元件清單33</p><p><b> 7設(shè)計總結(jié)33</b></p><p><b> 8參考文獻34</b></p><p><b> 單片機定時器設(shè)計</b></p><p><b> 設(shè)計任務(wù)<
9、;/b></p><p> 設(shè)計一個基于單片機控制的專用定時器。要求定時器可以實現(xiàn)三個時間的顯示,而且每個時間的初值都可以改變,獨立完成系統(tǒng)的分析、設(shè)計和程序的編寫,記錄開發(fā)過程中的問題及解決方法,要有設(shè)計過程和原理圖,并且自行設(shè)計滿足本設(shè)計任務(wù)的穩(wěn)壓電源。</p><p><b> 設(shè)計的主要參數(shù):</b></p><p> 定時
10、時間1。1s~99s,可調(diào)。</p><p> 定時時間2。1s~99s,可調(diào)。</p><p> 定時時間3。1min~99min,可調(diào)。</p><p> 所有時間數(shù)字均可調(diào)。</p><p> 用LED數(shù)碼管顯示剩余時間。</p><p><b> 設(shè)計意義</b></p&g
11、t;<p> 近年來隨著科技的飛速發(fā)展,單片機的應(yīng)用正在不斷走向深入,同時帶動傳統(tǒng)控制檢測日新月異地更新。在實時檢測和自動控制的單片機應(yīng)用系統(tǒng)中,單片機往往作為一個核心部件來使用,根據(jù)具體硬件結(jié)構(gòu)以及具體應(yīng)用對象的特點,與軟件相結(jié)合,加以完善。單片機之所以在工業(yè)控制中有大量的應(yīng)用,就在于它有獨特的定時、計數(shù)功能。在工業(yè)檢測、控制中,許多場合都要用到計數(shù)或定時功能。例如對外部脈沖進行計數(shù)、產(chǎn)生精確的定時時間等。人類最早使用
12、的定時工具是沙漏或水漏,但在鐘表誕生發(fā)展成熟之后,人們開始嘗試使用這種全新的計數(shù)工具來改進定時器,達到準(zhǔn)確控制時間的目的。</p><p> “定時器”總的來說有兩種類型。一種是基于模擬技術(shù)的傳統(tǒng)產(chǎn)品,這種定時器功能簡單,盡管曾被廣泛應(yīng)用過,但已進入淘汰之列。另一種是基于數(shù)字技術(shù)的新一代產(chǎn)品,這種產(chǎn)品功能強,是前者的換代之物。</p><p> 本設(shè)計開發(fā)了一種基于單片機的多用途定時器
13、,它造價低,功能全,整體功能價格比較高,配以小鍵盤和LED顯示器,可行適應(yīng)各種場合的定時預(yù)警之用。</p><p><b> 整體方案設(shè)計</b></p><p> 基于單片機系統(tǒng)的定時器電路包含了如下的功能模塊:</p><p><b> 基本的單片機系統(tǒng)</b></p><p><b
14、> 單片機的定時中斷</b></p><p><b> 單片機的外圍電路</b></p><p><b> 外部按鍵的輸入裝置</b></p><p> 數(shù)碼管LED的顯示裝置</p><p> 圖 1 定時器時間輸出Y1、Y2、Y3</p><p&g
15、t; 設(shè)計要求輸出見圖 1所示的時間定時輸出,并顯示每個時間的剩余時間。其中三個時間有各自的調(diào)節(jié)范圍T1,1s~99s;T2,1s~99s;T3,1min~99min。</p><p><b> 方案設(shè)計</b></p><p> 方案一:利用單片機的定時器完成定時要求。</p><p> 利用單片機定時輸出Y1、Y2、Y3,定時時間分
16、別為T1、T2、T3,并用發(fā)光二極管表示其時間長短,用LED顯示定時的剩余時間。時間長短通過按鍵調(diào)節(jié)。繼電器是定時后的具體應(yīng)用器件。串口用來對單片機在線編程。</p><p> 方案一的原理框圖見圖2。</p><p> 方案二:高頻脈沖信號作為定時器的時間基準(zhǔn),計數(shù)器實現(xiàn)定時。</p><p> 該系統(tǒng)的工作原理是:振蕩器產(chǎn)生的穩(wěn)定的高頻脈沖信號,作為定時器
17、的時間基準(zhǔn),經(jīng)分頻器輸出標(biāo)準(zhǔn)脈沖。T1減計數(shù)器計時時通過T1預(yù)置數(shù)顯示器顯示T1的剩余時間,同時使T1的時間輸出器和指示燈工作,當(dāng)T1計數(shù)滿之后T2減計數(shù)器開始工作,并對T2預(yù)置數(shù)。T2減計數(shù)器工作方式同T1。當(dāng)T2計數(shù)滿之后T3減計數(shù)器開始工作。工作方式同T1、T2,如此循環(huán),便能實現(xiàn)該設(shè)計的功能。原理框圖見圖 3方案二原理框圖。</p><p><b> 方案選擇</b></p&
18、gt;<p> 對以上兩個方案進行論證,并加以選擇,確定該設(shè)計的總體方案框圖以便進一步設(shè)計。</p><p><b> 方案一:</b></p><p> 優(yōu)點是利用單片機的定時器定時,時間精確、穩(wěn)定、可靠,并可以利用單片機的功能很好地進行時間的顯示、指示,輸出。原理簡單,使用的元器件少,相對來說在實物調(diào)試時出現(xiàn)的問題就少。該方案還有一個好處是成本
19、低。此外,經(jīng)過無數(shù)人的證明,用單片機完全可以實現(xiàn)定時功能,失敗的風(fēng)險小。</p><p> 缺點是使用單片機要求寫程序,對于不熟悉軟件的人來說要單獨完成該設(shè)計有一定的難度。</p><p><b> 方案二:</b></p><p> 優(yōu)點是該方案應(yīng)用穩(wěn)定的高頻脈沖信號作為定時器的時間基準(zhǔn),可以說也有同單片機一樣的精確、穩(wěn)定、可靠的輸出時
20、間,且對軟件編寫要求的不高,能很好的實現(xiàn)設(shè)計要求的功能。</p><p> 缺點是該方案復(fù)雜,一般不容易弄明白它的道理,而且它應(yīng)用的元器件較多,在實物調(diào)試時出現(xiàn)的問題可能比較多。由于元器件比較多,所以相對來說實物的成本也比較高,而且在PCB布線時更加麻煩。由于原理復(fù)雜,所以成功完成該設(shè)計的概率較低。</p><p> 通過對以上方案比較,該設(shè)計選用方案一進行設(shè)計。</p>
21、<p><b> 硬件電路的設(shè)計</b></p><p> 該設(shè)計選用STC單片機,STC單片機內(nèi)部框圖見圖 4 STC單片機內(nèi)部框圖所示。</p><p> STC89S52系統(tǒng)單片機是兼容8051內(nèi)核的單片機,是高速、低功耗的新一代8051單片機,12時鐘/機器周期和6時鐘/機器周期可反復(fù)設(shè)置,最新的D版本內(nèi)部集成MAX810專用復(fù)位電路。用S
22、TC提供的STC-ISP.exe工具將你原有的代碼下載進STC相關(guān)單片機即可,或用通用編程器編程。RC/RD+系列為真正的看門狗,默認為關(guān)閉(冷啟動),啟動后無法關(guān)閉,可放心省去外部看門狗。內(nèi)部的FLASH擦寫次數(shù)為100000次以上,STC89S52RC/RD+系列單片機出廠時就已完全加密,無法解密。用戶程序是用ISP/IAp機制寫入,一邊校驗一邊寫,無讀出命令。</p><p> 選用STC89S52單片機
23、的理由:加密性強,無法解密;超強抗干擾,輕松過4KV快速脈沖干擾(EFT);高抗靜電(ESD),6KV靜電可直接承受在芯片管腳上;超低功耗,Power Down<0.1uA,可外部中斷喚醒;中斷優(yōu)先級可設(shè)置成4級;PLCC-44、FQFP-44封裝,有P4口(可位尋址);并增加兩個外部中斷,int2/P4.3、int1/P4.2;6時鐘/機器周期或12時鐘/機器周期可任意設(shè)置;在系統(tǒng)可編程,無需編程器,可遠程升級;可供內(nèi)部集成MA
24、X810專用復(fù)位電路,原復(fù)位電路可保留,也可以不用,不用時RESET引腳直接短接到地。</p><p> STC89系列單片機大部分具有在系統(tǒng)可編程(ISP)特性,ISP的好處是省去了購買通用編程器的開銷,單片機在用戶系統(tǒng)上即可下載/燒錄用戶程序,無須將單片機從生產(chǎn)好的產(chǎn)品上拆下,再用通用編程器將程序代碼燒錄進單片機內(nèi)部。由于可以將程序直接下載進單片機查看運行結(jié)果,故也可不用仿真器。</p>&l
25、t;p> STC單片機的最小系統(tǒng)</p><p><b> 復(fù)位電路</b></p><p> 單片機復(fù)位電路包括片內(nèi)、片外兩部分。片外復(fù)位信號通過引腳RST加到內(nèi)部復(fù)位電路上。內(nèi)部復(fù)位電路在每個機器周期S5P2對片外復(fù)位信號采樣一次,當(dāng)RST引腳出現(xiàn)連續(xù)兩個機器周期的高電平時,單片機就完成一次復(fù)位。</p><p> 外部復(fù)位電
26、路就是為內(nèi)部復(fù)位電路提供兩個機器周期以上的高電平而設(shè)計的。STC單片機</p><p> 通常采用上電自動復(fù)位和按鍵手動復(fù)位兩種方式。</p><p> 圖6是上電復(fù)位電路。在通電瞬間,在RC電路充電過程中,RST端出現(xiàn)正脈沖,從而使單片機復(fù)位。由于單片機內(nèi)的等效電阻的作用,不用圖中的電阻R也能達到上電復(fù)位的目的。</p><p> 按鍵手動復(fù)位又分為按鍵電平
27、復(fù)位和按鍵脈沖復(fù)位,按鍵電平復(fù)位是將復(fù)位端通過電阻與VCC相連,按鍵脈沖復(fù)位是利用RC微分電路產(chǎn)生正脈沖來達到復(fù)位目的。</p><p> 該設(shè)計的復(fù)位電路我們選擇使用上電復(fù)位電路。</p><p><b> 晶振電路</b></p><p> 單片機的晶振電路是一種典型的電路,分為內(nèi)部時鐘和外部時鐘兩種方式。</p>&l
28、t;p> 內(nèi)部時鐘電路如圖7所示。</p><p> 圖 7 內(nèi)部時鐘電路</p><p> 內(nèi)部時鐘電路的晶振頻率一般選擇在4MHZ~12MHZ之間(該設(shè)計選擇11.0592MHZ),外接兩個諧振電容,該電容的典型值為30pF,該設(shè)計選用22 pF。</p><p> LED顯示與單片機接口</p><p> 常用LED顯示
29、器有7段、8段及米字型,在本設(shè)計中我們選用8段LED作為顯示器。LED發(fā)光器件一般常用的有兩類:數(shù)碼管和點陣。8段LED又稱為8字型LED,分為8段:A、B、C、D、E、F、G、P。其中P為小數(shù)點。數(shù)碼管常用的有10根管腳,每一段有一根管腳,另外兩根管腳為一個數(shù)碼管的公共端,兩根之間相互連通,如圖8所示。</p><p> 圖8 共陰極LED內(nèi)部結(jié)構(gòu)</p><p> 從電路上,數(shù)碼管
30、分為共陰和共陽兩種。本設(shè)計中選用的是共陰極。</p><p> 共陰極LED顯示器的發(fā)光二極管的陰極連接在一起,通常該共陰極接地。當(dāng)某個發(fā)光二極管的陽極為高電平時,發(fā)光二極管點亮,相應(yīng)的段被顯示。</p><p> 使用LED顯示器時,為了顯示數(shù)字或符號,要為LED顯示器提供代碼,因為這些代碼是通過段的亮與滅來顯示不同字形的,因此稱之為段碼。</p><p>
31、 7段發(fā)光二極管,再加上一個小數(shù)點位,共計8段,因此提供給LED顯示器的段碼正好一個字節(jié)。各段字節(jié)中各位的對應(yīng)關(guān)系如表1所示。</p><p><b> 表1</b></p><p> 由于單片機I/O的電氣特性決定了單片機的端口驅(qū)動能力有限,一般地,單片機的端口只是驅(qū)動TTL電平,不提供或者提供很小的驅(qū)動電流所以在帶負載時,單片機應(yīng)當(dāng)在I/O口加驅(qū)動芯片。該設(shè)計
32、使用ULN2803驅(qū)動芯片。</p><p> 發(fā)光二極管工作電流在10mA左右,而一般I/O接口不能提供這么大的電流,需要使用驅(qū)動電路,常用的有ULN2003A,7段驅(qū)動;ULN2803,8段驅(qū)動。</p><p> LED與單片機的連線如圖9所示。</p><p> 圖9 LED與單片機的接線</p><p> 使用ULN280
33、3驅(qū)動芯片對LED進行驅(qū)動,ULN2803相當(dāng)于一個反向驅(qū)動器,其內(nèi)部具體結(jié)構(gòu)如圖10所示。</p><p> 圖10 ULN2803內(nèi)部結(jié)構(gòu)</p><p> ULN2803的特點:</p><p> 最大反向驅(qū)動能力可達500mA;</p><p><b> 反向驅(qū)動;</b></p><
34、;p> 需要限流電阻,數(shù)碼管越多,限流電阻的阻值越小。</p><p> Uln2803的額定值如表 2所示。</p><p><b> 表 2</b></p><p> 發(fā)光二極管、按鍵、繼電器與單片機的接線</p><p> 發(fā)光二極管、按鍵、繼電器與單片機的接線如圖11所示。</p>
35、<p><b> 發(fā)光二極管</b></p><p> 發(fā)光二極管在兩端的電壓差超出其導(dǎo)通壓降時開始工作,發(fā)光二極管的導(dǎo)通壓降一般為1.7V~1.9V。此外,工作電流要滿足該二極管的工作電流,滿足電流和電壓的要求,發(fā)光二極管就可以發(fā)光了。單片機系統(tǒng)往往是數(shù)字信號,其電源不是5V就是0V,所以只要將二極管的正負極的電源對應(yīng)上就可以了。</p><p>
36、在發(fā)光二極管前面要接一個電阻,這個電阻的作用在于限制二極管的電流,從而達到減少功耗或者滿足端口對最大電流的限制。</p><p> 一般二極管的點亮電流為5mA~10mA,在5V電源驅(qū)動時,廠家多采用470?。</p><p> 限流電阻,在該設(shè)計中選用510?,這樣既不會超出單片機的I/O口最大限流,二極管也比較明亮。</p><p><b> 按
37、鍵</b></p><p> 按鍵使用上拉電阻方式接入單片機。末按下時對單片機輸入一個高電平,按下后輸入一個低電平。它在設(shè)計中的作用是用來調(diào)節(jié)T1、T2和T3的大小。</p><p> 鍵的閉合與否,反映在行線輸出電壓上就是呈現(xiàn)出高電平或低電平,如果高電平表示斷開的話,那么低電平就表示閉合,所以通過對行線電平高低狀態(tài)的檢測,便可以確認按鍵按下與否。為了確保CPU對一次按鍵動
38、作只確認一次按鍵,必須消除抖動。</p><p> 消除抖動有兩種方法:一種是采用軟件延時5mS進行消除抖動;另一種方法是采用R-S觸發(fā)器電路進行消除抖動。由于需要消除抖動的按鍵比較少,故采用R-S觸發(fā)器進行消除抖動。</p><p><b> 繼電器</b></p><p> 繼電器在這個設(shè)計中作為輸出設(shè)備,即是輸出該定時時間的中轉(zhuǎn)站。
39、繼電器是一個感性元件,感性元件在使用過程中要加一個保護二極管,然而在上圖中并沒有這個二極管,不是該圖設(shè)計不合理,而是在設(shè)計中使用的驅(qū)動芯片uln2803中已經(jīng)帶有這個起保護作用的二極管了。</p><p><b> 軟件設(shè)計</b></p><p> 首先介紹程序中硬件功能,再進行發(fā)光二極管指示程序、鍵掃描程序和數(shù)碼管的顯示程序的設(shè)計。</p>&l
40、t;p><b> 程序中硬件功能介紹</b></p><p><b> 電路原理和器件選擇</b></p><p> STC89S52:單片機,控制LED的數(shù)據(jù)顯示。</p><p> LED:兩個一位的七段LED,用于顯示單片機的數(shù)據(jù)。</p><p> 74LS573:鎖存器,7
41、4LS573輸入的D端與輸出的Q端依次排列在芯片的兩側(cè),為繪制印制電路板時的布線提供了方便。其功能與74LS573相同,可用來替代74LS373。</p><p> ULN2803:驅(qū)動LED,相當(dāng)于一個反相器。</p><p> 按鍵S3:S3=1時時間正常運行,S3=0時開始控制三個時間中的一個,再次讓S3=0時表示復(fù)位,時間又開始正常運行。</p><p>
42、; 按鍵S2:當(dāng)S2=0時每按一次表示時間自減一,當(dāng)S2=1時時間不變。</p><p> 按鍵S1:當(dāng)S1=0時每按一次表示時間自增一,當(dāng)S2=1時時間不變。</p><p> D1~D5:發(fā)光二極管,通過單片機的P1.0~P1.4控制,用于觀看三個時間的變化。</p><p><b> 地址分配和連接</b></p>
43、<p> P2.7、P2.6:和uln2803驅(qū)動電路確定字位口的地址0x80、0x40。</p><p> D0~D7:單片機的數(shù)據(jù)總線,LED的顯示內(nèi)容通過數(shù)據(jù)線從單片機傳送到LED。</p><p><b> 功能簡介</b></p><p> LED顯示模塊與單片機的連線中,對LED顯示模塊讀寫和字位、字段通道的選擇是
44、通過單片機的P2.7、P2.6口完成的。按鍵S1~S3完成按鍵的復(fù)位,定時時間的自增和自減功能。而發(fā)光二極管D1~D5則反映了定時時間的不同亮滅就不同。</p><p><b> 程序?qū)崿F(xiàn)的功能</b></p><p> 1~99s的時間調(diào)整。</p><p> 1~99min的時間調(diào)整。</p><p><
45、b> 時間的數(shù)碼顯示。</b></p><p> 程序流程圖如圖12所示。</p><p> 部分關(guān)鍵的變量的關(guān)系說明如表3所示。</p><p><b> 表3</b></p><p> 變量和端口的定義如表4所示。</p><p><b> 表4<
46、/b></p><p> 圖13 發(fā)光二極管指示流程圖</p><p><b> 發(fā)光二極管指示程序</b></p><p> 發(fā)光二極管的亮滅指示了此刻數(shù)碼管顯示的時間是三個定時時間中的哪一個。</p><p> 流程圖如圖13所示。</p><p><b> 程序代
47、碼如下:</b></p><p> if(T>time1+time2+time3*60)</p><p><b> {</b></p><p><b> return;</b></p><p><b> }</b></p><p&g
48、t; else if(T>(time1+time2))</p><p><b> {</b></p><p> if(sec05==2)</p><p><b> {</b></p><p><b> L1=OFF;</b></p><p&g
49、t;<b> L2=ON;</b></p><p><b> L4=ON;</b></p><p><b> L3=OFF;</b></p><p><b> J=0x04;</b></p><p><b> }</b>&l
50、t;/p><p><b> }</b></p><p> else if(T>time1)</p><p><b> {</b></p><p> if(sec05==1)</p><p><b> {</b></p><
51、p><b> L0=0FF;</b></p><p><b> L1=ON;</b></p><p><b> J=0x02;</b></p><p><b> L3=ON;</b></p><p><b> }</b>
52、;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(sec05==0)</p><p><b> {</b></p>
53、;<p><b> L0=ON;</b></p><p><b> J=0x01;</b></p><p><b> L3=ON;</b></p><p><b> }</b></p><p><b> }</b&g
54、t;</p><p><b> 鍵掃描程序</b></p><p> 鍵掃描程序流程圖如圖14所示。</p><p> 圖14 按鍵子程序流程圖</p><p> 通過三個鍵KEY_ST、KEY_UP、KEY_DW及按鍵S3、S2、S1,來實現(xiàn)三個定時時間即time1、time2、time3的自增和自減及復(fù)位功
55、能。</p><p> 在該程序的設(shè)計中要注意按鍵的去抖動程序。按鍵本身就是機械開關(guān),由于機械觸點的彈性以及電壓突跳等原因,在觸點閉合或者是斷開的瞬間會出現(xiàn)電壓抖動的情況。在發(fā)生抖動時單片機很難判別此時的按鍵是否被按下,為此,就需要進行對按鍵的去抖動處理。去抖動的辦法一般有兩種:一種是采用硬件電路,另一種是采用軟件的時間延時程序以躲過抖動時間,待信號穩(wěn)定后再進行按鍵掃描。在這里采用軟件方法去抖動。</p&
56、gt;<p><b> 程序代碼如下:</b></p><p> Void Onsetting(void)</p><p><b> {</b></p><p><b> Delay(4);</b></p><p> while(!KEY_ST);<
57、;/p><p> flag_run=0;</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(KEY_UP)</p><p><b> {</b></p><p&g
58、t;<b> Delay(4);</b></p><p> While(!KEY_UP);</p><p><b> time1++;</b></p><p><b> time2++;</b></p><p><b> time3++;</b>
59、</p><p> if(time1>99) time1=1;</p><p> if(time2>99) time2=1;</p><p> if(time3>99) time3=1;</p><p><b> Reload();</b></p><p><b&g
60、t; SetLED();</b></p><p><b> }</b></p><p> if(KEY_DW)</p><p><b> {</b></p><p><b> Delay(4);</b></p><p> Whi
61、le(!KEY_DW);</p><p><b> time1--;</b></p><p><b> time2--;</b></p><p><b> time3--;</b></p><p> if(time1<0) time1=99;</p>
62、<p> if(time2<0) time2=99;</p><p> if(time3<0) time3=99;</p><p><b> Reload();</b></p><p><b> SetLED();</b></p><p><b> }&l
63、t;/b></p><p> if(!KEY_ST)</p><p><b> {</b></p><p><b> Delay(4);</b></p><p> while(!KEY_ST);</p><p> flag_run=1;</p>
64、<p><b> return;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 數(shù)碼管顯示程序</b></
65、p><p> LED顯示器有靜態(tài)顯示和動態(tài)掃描顯示兩種工作方式。</p><p> 靜態(tài)顯示。顯示驅(qū)動電路具有輸出鎖存功能,單片機將所要顯示的數(shù)據(jù)送出后就不在控制LED,直到下一次顯示時再傳送一次新的顯示數(shù)據(jù)。靜態(tài)顯示的數(shù)據(jù)穩(wěn)定,占用CPU時間少。靜態(tài)顯示中,每一個顯示器都要占用單獨的具有鎖存功能的I/O接口,該接口用于筆劃段字形代碼。這樣單片機只要把顯示的字形代碼發(fā)送到接口電路,該字段就
66、可以顯示發(fā)送的字形。要顯示新的數(shù)據(jù)時,單片機再次發(fā)送新的字形碼。</p><p> 動態(tài)掃描顯示:動態(tài)掃描方法是用其接口電路把所有顯示器的8個筆劃段a~h同名端連在一起,而每個顯示器的公共極COM各自獨立受I/O線控制。CPU向字段輸出口送出字形碼時,所有顯示器接收到相同的字形碼,但究竟哪一個顯示器亮,就取決于COM端,而這一端是由I/O口控制的,由單片機決定何時顯示哪一位。動態(tài)掃描用分時的方法輪流控制各個顯示
67、器的COM端,使各個顯示器輪流點亮。在輪流點亮掃描過程中,每位顯示器的點亮?xí)r間極為短暫,但由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù)。</p><p> 這兩種顯示方式各有利弊:靜態(tài)顯示雖然數(shù)據(jù)顯示穩(wěn)定,占用CPU的時間少,但是每個顯示單元都需要單獨的顯示驅(qū)動電路,使用的電路硬件較多;動態(tài)掃描顯示需要CPU時刻對顯示器件進行數(shù)據(jù)刷新,顯示數(shù)據(jù)有閃爍感,占用的CPU時間多,但是使
68、用的硬件少,能節(jié)省線路板空間。在一般較為簡單的系統(tǒng)中,為了降低成本,動態(tài)方案具備一定的實用性,也是目前單片機數(shù)碼管顯示中較為常用的顯示方法。</p><p> 該設(shè)計使用動態(tài)掃描顯示方式</p><p> 2個LED的段選端與鎖存器的數(shù)據(jù)輸出端相連,位選端分別連接單片機的P2.6、P2.7口,由STC89S52控制相應(yīng)的LED點亮。</p><p> 采用掃描
69、顯示方式,即在某一時刻,只讓某一位的位選線處于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài),同時,段選線上輸出相應(yīng)位的顯示字符的段碼。這樣同一時刻,4位LED中只有選通的那一位字符,而其它三位則是熄滅的。同樣,在下一時刻,只讓下一位的位選線處于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài),同時,在段選線上輸出相應(yīng)位將要顯示字符的段碼,則同一時刻,只有選通位顯示出相應(yīng)的字符,而其他各位則是熄滅的。如此循環(huán)下去,就可以使各位顯示出將要顯示的字符,雖
70、然這些字符是在不同時刻出現(xiàn)的,而且同一時刻,只有一位顯示,其他各位熄滅,但由于LED顯示器的余輝和人眼視覺暫留作用,只要每位顯示間隔足夠短,可以造成多位同時亮的假象,達到同時顯示的目的。</p><p> 如何確定LED不同位顯示的時間間隔,例如對8位LED顯示器,假若顯示一位保持1ms時間,則是顯示完所有8位之后,只需要8ms。上述保持1ms的時間應(yīng)根據(jù)實際情況而定。不能太短,因為發(fā)光二極管從導(dǎo)通到發(fā)光有一定
71、的延時,導(dǎo)通時間太短,發(fā)光太弱人眼無法看清;也不能太長,因為畢竟要受限于臨界閃爍頻率,而且此時間越長,占用CPU時間也越多。另外顯示位增多,也將占用大量的CPU時間,因此動態(tài)顯示實質(zhì)是以犧牲CPU的時間來換取元件的減少。</p><p> 定時器0中斷服務(wù)程序,用于數(shù)碼管的動態(tài)掃描,在動態(tài)LED顯示程序中,需要不停的掃描字位口,從而實現(xiàn)不同字位的數(shù)據(jù)的動態(tài)顯示效果。</p><p>
72、中斷流程圖如圖15所示。</p><p><b> 圖15 中斷流程圖</b></p><p><b> 程序代碼如下:</b></p><p> Void timer0_Interruput(void) interrupt 1</p><p><b> {</b>&l
73、t;/p><p><b> TR0=0;</b></p><p> TH0=TIMER0H;</p><p> TL0=TIMER0L;</p><p><b> TR0=1;</b></p><p><b> time++;</b></p&
74、gt;<p> if(time==100)</p><p><b> {</b></p><p> T=T+1;/*到達1秒后T加1</p><p><b> }</b></p><p> Index++;/*顯示索引,用于標(biāo)識當(dāng)前顯示的數(shù)碼管和緩沖區(qū)的偏移量</p&g
75、t;<p> Index &=0x01;</p><p> P0=TableLED[buff[Index[]];</p><p> Switch(Index)</p><p><b> {</b></p><p> Case 0:P2=0x80|J;break;</p>&l
76、t;p> Case 1:P2=0x40|J;break;</p><p><b> }</b></p><p><b> pps++;</b></p><p> if(!flag_run) return;</p><p> if(pps==50)</p><p&
77、gt;<b> {</b></p><p><b> pps=0;</b></p><p><b> sec05++;</b></p><p><b> flag=1;</b></p><p> if(sec05==3)</p>&
78、lt;p><b> {</b></p><p><b> sec05=0;</b></p><p><b> sec--;</b></p><p> if(sec==0)</p><p><b> {</b></p><
79、p><b> Reload();</b></p><p><b> s=-s;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
80、;<p><b> }</b></p><p><b> 設(shè)計附錄</b></p><p><b> 源程序</b></p><p> #include<reg52.h></p><p> #define TIMER0H 0xD8</p
81、><p> #define TIMER0L 0xF0</p><p> #define uchar unsigned char</p><p> #define ON 0</p><p> #define OFF 1</p><p> TableLED[]={0x3F,0x06,0x5B,0x4F,0x66,0x
82、6D,0x7D,0x07,0x7F,0x6F};</p><p> sbit L0=P1^0;</p><p> sbit L1=P1^1</p><p> sbit L2=P1^2;</p><p> sbit L3=P1^3;</p><p> sbit L4=P1^4;</p>
83、<p> sbit KEY_UP=P1^5;</p><p> sbit KEY_DW=P1^6;</p><p> sbit KEY_ST=P1^7;</p><p> sbit KEY_T2=P3^2;</p><p> sbit KEY_T3=P3^3;</p><p>
84、uchar code</p><p> uchar preSet;</p><p> uchar Index;</p><p> uchar buff[2];</p><p> uchar flag;</p><p> uchar time,T,J;</p><p> uchar p
85、ps;</p><p> uchar sec;</p><p> uchar sec05;</p><p><b> uchar s;</b></p><p> uchar flag_run;</p><p> uchar time1,time2,time3;</p>&l
86、t;p> void InitDevice(void);</p><p> void SetLED(void);</p><p> void Reload(void);</p><p> void Onrunning(void);</p><p> void delay(void);</p><p>
87、void Onsetting(void);</p><p><b> main()</b></p><p><b> {</b></p><p> InitDevice();</p><p><b> time1=10;</b></p><p>
88、<b> time2=20;</b></p><p><b> time3=6;</b></p><p><b> time=0;</b></p><p><b> T=0;</b></p><p> flag=0x00;</p>
89、<p><b> sec=0;</b></p><p><b> s=0;</b></p><p><b> sec05=0;</b></p><p><b> Reload();</b></p><p><b> L0=ON
90、;</b></p><p><b> L1=OFF;</b></p><p><b> L2=OFF;</b></p><p><b> L3=ON;</b></p><p><b> L4=OFF;</b></p>&l
91、t;p> flag_run=1;</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(KEY_ST==1)</p><p><b> {</b></p><p> OnRun
92、ning();</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> Onsetting();</p><p><b> }</b><
93、;/p><p><b> }</b></p><p><b> }</b></p><p> Void Onsetting(void)</p><p><b> {</b></p><p><b> Delay(4);</b>
94、</p><p> while(!KEY_ST);</p><p> flag_run=0;</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(KEY_UP)</p><p>&
95、lt;b> {</b></p><p><b> Delay(4);</b></p><p> While(!KEY_UP);</p><p><b> time1++;</b></p><p><b> time2++;</b></p>
96、<p><b> time3++;</b></p><p> if(time1>99) time1=1;</p><p> if(time2>99) time2=1;</p><p> if(time3>99) time3=1;</p><p><b> Reload(
97、);</b></p><p><b> SetLED();</b></p><p><b> }</b></p><p> if(KEY_DW)</p><p><b> {</b></p><p><b> Delay
98、(4);</b></p><p> While(!KEY_DW);</p><p><b> time1--;</b></p><p><b> time2--;</b></p><p><b> time3--;</b></p><p&
99、gt; if(time1<0) time1=99;</p><p> if(time2<0) time2=99;</p><p> if(time3<0) time3=99;</p><p><b> Reload();</b></p><p><b> SetLED();</
100、b></p><p><b> }</b></p><p> if(!KEY_ST)</p><p><b> {</b></p><p><b> Delay(4);</b></p><p> while(!KEY_ST);</p
101、><p> flag_run=1;</p><p><b> return;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&l
102、t;p> void delay(uchar u)</p><p><b> {</b></p><p><b> int i;</b></p><p> while(u--)</p><p><b> {</b></p><p><
103、b> i=1000;</b></p><p> while(i--);</p><p><b> }</b></p><p><b> }</b></p><p> void OnRunning(void)</p><p><b> {
104、</b></p><p><b> if(flag)</b></p><p><b> {</b></p><p><b> flag=0;</b></p><p><b> SetLED();</b></p><p
105、> if(T>time1+time2+time3*60)</p><p><b> {</b></p><p><b> return;</b></p><p><b> }</b></p><p> else if(T>(time1+time2))
106、</p><p><b> {</b></p><p> if(sec05==2)</p><p><b> {</b></p><p><b> L1=OFF;</b></p><p><b> L2=ON;</b>&l
107、t;/p><p><b> L4=ON;</b></p><p><b> L3=OFF;</b></p><p><b> J=0x04;</b></p><p><b> }</b></p><p><b> }
108、</b></p><p> else if(T>time1)</p><p><b> {</b></p><p> if(sec05==1)</p><p><b> {</b></p><p><b> L0=0FF;</b&g
109、t;</p><p><b> L1=ON;</b></p><p><b> J=0x02;</b></p><p><b> L3=ON;</b></p><p><b> }</b></p><p><b>
110、 }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(sec05==0)</p><p><b> {</b></p><p><b> L0=ON;&l
111、t;/b></p><p><b> J=0x01;</b></p><p><b> L3=ON;</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
112、; }</b></p><p><b> }</b></p><p> void SetLED(void)</p><p><b> {</b></p><p> if(sec>100)</p><p><b> {</b>
113、</p><p> buff[0]=sec/600;</p><p> buff[1]=sec/60-buff[0]*10;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>
114、</p><p> buff[0]=sec/10;</p><p> buff[1]=sec-buff[0]*10;</p><p><b> }</b></p><p><b> }</b></p><p> void Reload(void)</p>
115、<p><b> {</b></p><p> if(T>time1+time2+time3*60)</p><p><b> {</b></p><p><b> return;</b></p><p><b> }</b>
116、</p><p> else if(T>(time1+time2))</p><p><b> {</b></p><p> sec=time3*60;</p><p><b> return;</b></p><p><b> }</b>
117、;</p><p> else if(T>=time1)</p><p><b> {</b></p><p> sec=time2;</p><p><b> return;</b></p><p><b> }</b></p&g
118、t;<p><b> else</b></p><p><b> {</b></p><p> sec=time1;</p><p><b> return;</b></p><p><b> }</b></p>&l
119、t;p><b> }</b></p><p> void timer0_Interruput(void) interrupt 1</p><p><b> {</b></p><p><b> TR0=0;</b></p><p> TH0=TIMER0H;&l
120、t;/p><p> TL0=TIMER0L;</p><p><b> TR0=1;</b></p><p><b> time++;</b></p><p> if(time==100)</p><p><b> {</b></p>
121、<p><b> T=T+1;</b></p><p><b> }</b></p><p> Index++;Index &=0x01;</p><p> P0=TableLED[buff[Index[]];</p><p> Switch(Index)</p&
122、gt;<p><b> {</b></p><p> Case 0:P2=0x80|J;break;</p><p> Case 1:P2=0x40|J;break;</p><p><b> }</b></p><p><b> pps++;</b>&
123、lt;/p><p> if(!flag_run) return;</p><p> if(pps==50)</p><p><b> {</b></p><p><b> pps=0;</b></p><p><b> sec05++;</b>&
124、lt;/p><p><b> flag=1;</b></p><p> if(sec05==3)</p><p><b> {</b></p><p><b> sec05=0;</b></p><p><b> sec--;</b
125、></p><p> if(sec==0)</p><p><b> {</b></p><p><b> Reload();</b></p><p><b> s=-s;</b></p><p><b> }</b>
126、;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void initDevice(void)</p><p><b> {</b><
127、;/p><p><b> Index=0;</b></p><p><b> pps=0;</b></p><p> TH0=TIMER0H;</p><p> TL0=TIMER0L;</p><p> TMOD=0x01;</p><p>&
128、lt;b> TR0=1;</b></p><p><b> ET0=1;</b></p><p><b> EA=1;</b></p><p><b> }</b></p><p><b> 電路原理圖</b></p>
129、;<p> 本設(shè)計電路原理圖如圖16所示。</p><p><b> 元件清單</b></p><p> 元器件清單表5如下所示。</p><p><b> 設(shè)計總結(jié)</b></p><p> 實踐是檢驗真理的唯一標(biāo)準(zhǔn),當(dāng)然也是檢驗學(xué)習(xí)成果的標(biāo)準(zhǔn)。在經(jīng)過一段時間的學(xué)習(xí)之后,我
130、們需要了解自己的所學(xué)應(yīng)該如何應(yīng)用在實踐中,因為任何知識都源于實踐,歸于實踐,所以要將所學(xué)的知識在實踐中來檢驗。</p><p> 做畢業(yè)設(shè)計期間,在周延老師的指導(dǎo)下,通過自身的不斷努力,無論是思想上,學(xué)習(xí)上還是工作上,都取得了長足的發(fā)展和巨大的收獲,現(xiàn)將工作總結(jié)如下:思想上,學(xué)會了用科學(xué)的精神去解決問題。很多事情看起來是很簡單的問題,但實際做起來去會發(fā)現(xiàn)有許多奧妙!這是因為其中蘊含著許多科學(xué)的問題。運用科學(xué)的方
131、法去解決問題,這是我通過這次畢業(yè)設(shè)計給我?guī)淼乃枷肷系母淖?。學(xué)習(xí)上。自從參加工作以來,我從沒有放棄學(xué)習(xí)理論知識。工作上。我工作中取得的一點成績,這與單位領(lǐng)導(dǎo)和同事們的幫助是分不開的。</p><p> 實習(xí)之前覺得這三個月太短,也學(xué)不到什么實質(zhì)性的東西。但當(dāng)我真正著手處理時,就不能有絲毫小瞧的意思了。一切的一切都需要我們用心去領(lǐng)悟并結(jié)合所學(xué)知識去操作。</p><p> 前面我們看到的
132、是機械制造行業(yè)其自身的發(fā)展。然而,作為社會發(fā)展的一個部分,它將和其它的行業(yè)有更廣泛的結(jié)合。21世紀(jì)電子制造業(yè)的重要性表現(xiàn)在它的全球化,網(wǎng)絡(luò)化,虛擬化,智能化以及環(huán)保協(xié)調(diào)的綠色制造等。它將使人類不僅要擺脫繁重的體力勞動,而且要從繁瑣的計算,分析等腦力勞動中解放出來,以便有更多的精力從事高層次的創(chuàng)造性勞動,它使生產(chǎn)系統(tǒng)具有更完善的判斷力與適應(yīng)能力。當(dāng)然這一切還需要我們大家進一步的努力。</p><p> 實踐,是一
133、面很亮的鏡子,能夠通過它看出我們自身的缺點,能夠通過它查找出自身缺乏的知識。通過這次設(shè)計,我明顯感覺到“書到用時方恨少”。在以后的生活中我會不斷地學(xué)習(xí)充實自己。</p><p><b> 參考文獻</b></p><p> 余孟嘗. 數(shù)字電子技術(shù)基礎(chǔ)(第三版). 北京: 清華大學(xué)電子學(xué)教研組,2006</p><p> 陳大欽. 模擬技術(shù)
134、基礎(chǔ). 武漢: 華中科技大學(xué)出版社,2000</p><p> 張毅剛,新編MCS-51單片機應(yīng)用設(shè)計. 哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2003</p><p> 譚家玉,單片機原理及接口技術(shù). 哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2004</p><p> 謝自美,電子線路設(shè)計.實驗.測試. 武昌:華中科技大學(xué)出版社,2002</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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機定時器
- 單片機實驗二 定時器
- 基于單片機的音樂定時器畢業(yè)設(shè)計
- 單片機課程設(shè)計智能定時器
- 單片機課程設(shè)計--秒表定時器
- 單片機課程設(shè)計--定時器實驗
- 單片機課程設(shè)計---加熱定時器
- 基于單片機的智能定時器畢業(yè)設(shè)計
- 單片機定時器的使用總結(jié)
- 定時器畢業(yè)論文
- 畢業(yè)論文——單片機定時鬧鐘
- 基于單片機的多用途定時器裝置畢業(yè)設(shè)計論文
- 音樂提示定時器--單片機課程設(shè)計
- 單片機經(jīng)典數(shù)字定時器課程設(shè)計
- 第五章-單片機定時器
- 測控技術(shù)與儀器 畢業(yè)論文范文——基于單片機的專用定時器
- 基于單片機的定時器的設(shè)計與實現(xiàn)畢業(yè)設(shè)計
- 使用定時器延時單片機課程設(shè)計報告
- 智能定時器畢業(yè)設(shè)計--基于51單片機的智能定時控制器系統(tǒng)設(shè)計
- 單片機定時器的應(yīng)用與誤差糾正
評論
0/150
提交評論