2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論