畢業(yè)論文----基于單片機的時鐘電路的設(shè)計_第1頁
已閱讀1頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  基于單片機的時鐘電路的設(shè)計</p><p>  The design of clock circuit based on MCU </p><p>  專 業(yè):電子信息科學(xué)與技術(shù)</p><p><b>  學(xué) 號: </b></p><p><b>  姓 名: <

2、;/b></p><p><b>  指導(dǎo)教師: </b></p><p>  基于單片機的時鐘電路的設(shè)計</p><p><b>  摘 要:</b></p><p>  文章主要采用AT89c51單片機最小化應(yīng)用設(shè)計,LED顯示采用動態(tài)掃描方式實現(xiàn),P0口輸出段碼數(shù)據(jù),P1.0-P1.2

3、口作掃描輸出,P0.1—P0.4口接按鈕開關(guān)S1,S2,S3,S4,S5,rest 接S6復(fù)位按鍵。P0.0控制秒的調(diào)整,每按一次加1秒;P0.1控制分的調(diào)整,每按一次加1分;P0.2控制時的調(diào)整,每按一次加1個小時。為了提供LED數(shù)碼管的驅(qū)動電流,用74ls595作電源驅(qū)動輸出。實際設(shè)計按情況采用11.0592MHz的晶振。電子時鐘電路采用12h記時方式,時間用8位數(shù)碼管顯示。該電路采用AT89c51單片機,使用5V電池供電。<

4、/p><p>  關(guān)鍵詞: 單片機;抖動;數(shù)碼管;中斷;低功耗;時鐘</p><p>  The design of clock circuit based on MCU</p><p><b>  Abstract:</b></p><p>  This article mainly uses at98c51 monoli

5、thic integrated circuit minimum application design, LED demonstrated that selects the dynamic scanning method to realize, the P0 mouth output section code data, the P1.0-P1.2 mouth makes the scan out, the P0.1-P0.4 mouth

6、 meets push-button switch S1, S2, S3, S4, S5, rest. P0.0 control of the second adjustment, and each time one second; P0.1 control points of adjustment, each time at 1 pm; P0.2 control of the adjustment, and each time one

7、 hour.In order to pro</p><p>  Key words: SCM; jitter;digital control; interrupt; low power consumption; the clock</p><p><b>  目 錄</b></p><p><b>  1 引 言1</b&

8、gt;</p><p>  2 以AT89C51單片機為核心的時鐘電路結(jié)構(gòu)和工作原理2</p><p>  2.1 AT89C51的結(jié)構(gòu)組成及引腳功能2</p><p>  2.1.1 AT89C51的結(jié)構(gòu)組成2</p><p>  2.1.2 AT89C51的引腳功能3</p><p>  2.2 時

9、鐘電路工作原理及原理圖6</p><p>  2.4 時鐘電路的消除震蕩設(shè)計9</p><p>  2.5 時鐘電路的誤差分析及功耗10</p><p>  3 以AT89C51單片機為核心的時鐘電路的程序設(shè)計12</p><p>  3.1主程序設(shè)計及系統(tǒng)主流程圖12</p><p>  3.2 時鐘電路的

10、時鐘和鬧鈴程序設(shè)計及流程圖13</p><p>  3.3 時鐘電路的顯示程序設(shè)計及流程圖14</p><p>  3.4 時鐘電路的鍵盤程序設(shè)計及流程圖15</p><p>  4 Keil 與Proteus軟件的聯(lián)調(diào)仿真16</p><p>  4.1 Keil  Software及Proteus 簡介16</p

11、><p>  4.2 時鐘電路的仿真圖如下17</p><p><b>  5 結(jié)束語19</b></p><p><b>  [參考文獻(xiàn)]20</b></p><p><b>  附 錄21</b></p><p><b>  致 謝

12、33</b></p><p><b>  1 引 言</b></p><p>  單片機模塊中最常見的是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。 數(shù)字鐘是采用數(shù)字電路實現(xiàn)對.時,分,秒.數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站

13、, 碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴大其應(yīng)用,有著非?,F(xiàn)實的

14、意義。</p><p>  現(xiàn)在流行的串行時鐘電路很多,如DS1302、DS1307、PCF8485等。這些電路的接口簡單、價格低廉、使用方便,被廣泛地采用。</p><p>  本文主要采用AT98c51單片機最小化應(yīng)用設(shè)計,LED顯示采用動態(tài)掃描方式實現(xiàn),P0口輸出段碼數(shù)據(jù),P1.0-P1.2口作掃描輸出,P0.1—P0.4口接按鈕開關(guān)S1,S2,S3,S4,S5,rest 接S6復(fù)位

15、按鍵。</p><p>  下面我主要從硬件、程序、軟件聯(lián)調(diào)3方面來設(shè)計。</p><p>  2 以AT89C51單片機為核心的時鐘電路結(jié)構(gòu)和工作原理</p><p>  2.1 AT89C51的結(jié)構(gòu)組成及引腳功能</p><p>  2.1.1 AT89C51的結(jié)構(gòu)組成</p><p>  AT89C51是一種

16、帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃

17、爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器。AT89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示。 </p><p>  2.1.2 AT89C51的引腳功能</p><p>  AT89C51芯片的管腳說明:</p>

18、<p>  1.  VCC:供電電壓。2.  GND:接地。3.  P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗時,P0輸出原碼,此時P0外部必須被拉高。4.  P1口:P1口

19、是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 5.   P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,

20、P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部</p><p>  P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p>  7.RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。</p>

21、<p>  8. ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令

22、是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。9.  /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。10.  /EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖

23、定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。11.  XTAL1:反向振蕩放大器的</p><p>  振蕩器特性:    XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至

24、內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p>  2.2 時鐘電路工作原理及原理圖</p><p>  電路特點 :這里介紹的電子鐘,電路可稱得上極簡,它僅使用單片很少引腳完成電子鐘的全部功能。</p><p>  一片40引腳的單片機AT89C51為電子鐘主體,其顯示筆畫數(shù)據(jù)從P0口

25、分時輸出,P1口則輸出對應(yīng)的3位選通信號.由于LED數(shù)碼管點亮?xí)r耗電較大,故使用89C51單片機來完成 。</p><p>  本電子鐘程序設(shè)計時只使用了一個定時數(shù)T0,其它的中斷全部關(guān)斷,定時器工作在兩個8位自動加載初始值狀態(tài).這是保證走時精確穩(wěn)定的重要方法.很多書本教材上都讓大家用定時器中斷來執(zhí)行動態(tài)顯示程序和按鍵掃描程序,我自己認(rèn)為這是一種很不好的方法(但是這種方法是初學(xué)者必須掌握的基礎(chǔ)),除了浪費硬件資源

26、以外,還會增加程序復(fù)雜性,還會影響其它程序運行。</p><p><b>  系統(tǒng)框圖:</b></p><p>  一、 電子時鐘的技術(shù)指標(biāo)顯示范圍:時間采用12/24小時制顯示格式:時間按時分秒排列,顯示如00點01分22秒顯示為000122顯示位數(shù):8位8段LED數(shù)碼管作正常、調(diào)時和節(jié)電顯示時鐘誤差:24小時誤差3~5秒二、 硬件電路的選擇1、單片機

27、的選擇   選用AT89C51單片機,配備11.0592MHz晶振,復(fù)位電路采用上電復(fù)位。</p><p>  2、顯示電路選擇  采用軟件譯碼動態(tài)顯示。</p><p>  3、電源選擇  采用直流5V電源供電。</p><p><b>  電路圖如下:</b></p><p>  2.3

28、時鐘電路的顯示單元</p><p><b>  動態(tài)顯示技術(shù):</b></p><p>  在多位LED顯示時,由一個8位口控制,由另一個端口進(jìn)行顯示位的控制。但是,由于段選是公用的,要讓各位數(shù)碼管顯示不同的字符,就必須采用掃描方式,即動態(tài)掃描顯示方式。首先從段選線上送出字段碼,再控制位選線,字符就顯示在指定位置上,持續(xù)1~5ms時間,然后關(guān)閉所有顯示;接下來又送出新

29、的字段碼,按照上述過程又顯示在新的位置上,直到每一位數(shù)碼管都掃描完為止,即為一個掃描周期。由于人的視覺停留效應(yīng),因此當(dāng)掃描周期小到一定程度時,人就感覺不出字符的移動或閃爍,覺得每位數(shù)碼管到一直在顯示,達(dá)到一種穩(wěn)定的視覺效果。 動態(tài)掃描顯示的掃描方式有程序控制和定時中斷掃描兩種。程序控制掃描方式要占用許多CPU時間,在計算機的任務(wù)較重時,難以得到好的效果,所以在實際中常采用定時中斷掃描方式,這種方式是每隔一定時間(如1ms)顯示一

30、位數(shù)碼管,假設(shè)有8位數(shù)碼管,顯示掃描周期為2ms,顯示效果十分良好。本次設(shè)計采用這種方法。</p><p>  主要采用595來驅(qū)動,74HC595的管教如下:</p><p>  【1】74595的數(shù)據(jù)端:</p><p>  1. Q0—Q7: 八位并行輸出端,可以直接控制數(shù)碼管的8個段。</p><p>  2. Q7': 級聯(lián)

31、輸出端。我將它接下一個595的SI端。</p><p>  3. SI: 串行數(shù)據(jù)輸入端。</p><p>  【2】74595的控制端說明:</p><p>  1. /SCLR(10腳): 低點平時將移位寄存器的數(shù)據(jù)清零。通常我將它接Vcc。</p><p>  2. SCK(11腳):上升沿時數(shù)據(jù)寄存器的數(shù)據(jù)移位。QA-->QB

32、-->QC-->...-->QH;下降沿移位寄存器數(shù)據(jù)不變。(脈沖寬度:5V時,大于幾十納秒就行了。我通常都選微秒級)</p><p>  3. RCK(12腳):上升沿時移位寄存器的數(shù)據(jù)進(jìn)入數(shù)據(jù)存儲寄存器,下降沿時存儲寄存器數(shù)據(jù)不變。通常我將RCK置為低電平,當(dāng)移位結(jié)束后,在RCK端產(chǎn)生一個正脈沖(5V時,大于幾十納秒就行了。我通常都選微秒級),更新顯示數(shù)據(jù)。</p><p

33、>  4. /G(13腳): 高電平時禁止輸出(高阻態(tài))。如果單片機的引腳不緊張,用一個引腳控制它,可以方便地產(chǎn)生閃爍和熄滅效果。比通過數(shù)據(jù)端移位控制要省時省力。</p><p>  2.4 時鐘電路的消除震蕩設(shè)計</p><p>  在單片機應(yīng)用系統(tǒng)中,消除抖動有硬件和軟件兩種方法。硬件去抖動方法主要有利用R-S觸發(fā)器和濾波器電路,,由于按鍵消除抖動時,按下與釋放是通過機械觸點的閉

34、合與斷開來實現(xiàn)的,因機械觸點的彈性作用,在閉合與斷開的瞬間均有一個抖動過程,所以鍵閉合與斷開會產(chǎn)生如附圖所示的電壓波形,抖動時間一般在5~10ms。這個抖動對判斷鍵是否按下或釋放有較大影響,因此必需消除鍵的抖動,只有這樣,才能可靠地判斷鍵的狀態(tài)。</p><p>  軟件去抖動通常是程序檢測到鍵被按下時,延時10ms后再檢測鍵是否仍然閉合,若是則確認(rèn)是一次真正的閉合,否則就忽略次此按鍵。 本次設(shè)計時采用的軟

35、件消抖程序。</p><p>  2.5 時鐘電路的誤差分析及功耗</p><p>  【1】主要誤差來源及補償 :</p><p>  1、硬件電路在線路手工焊接時可能存在虛焊,或者有接觸不良的情況,以及外界環(huán)境的影響,通過使用印刷電路板機器焊接,可以減少硬件誤差影響。 2、采用11.0592MHz晶振計算定時計數(shù)初值時存在小數(shù)舍入誤差公式: ,定時器

36、/計數(shù)器采用工作方式1,定時器T0、T1溢出周期為50ms,計算得到N=19456=4C00H,TH0=4CH,TL0=00H.若仍采用理論上的12MHz計算初值,則有:N1=3CB0H,那么用11.0592MHz,N1不變,益出周期約為54.25ms,每次溢出比實際的要慢4.3ms,那么一秒鐘要慢85ms,從而影響24h比實際的要慢122min。修正后誤差處理通過軟件實現(xiàn),最終的時鐘誤差測得值3-5s。</p><

37、;p>  功耗問題:【2】許多實時時鐘都采用電池供電,典型應(yīng)用是利用一塊小的鋰電池在主電源掉電時直接驅(qū)動振蕩器和時鐘電路。為有效延長電池的使用壽命,振蕩器必需消耗盡可能少的能量。為了保證這一點,應(yīng)謹(jǐn)慎考慮振蕩器的設(shè)計。典型的高頻振蕩電路ESR較低,但設(shè)計中一般會留出5倍、甚至10倍的ESR裕量,而低頻晶振則具有較高的ESR。對于一個RTC振蕩器,或許留出2倍的負(fù)阻裕量即可,振蕩器的負(fù)阻裕量越小、耗電越低,但是,這種電路對寄生參數(shù)

38、、噪聲非常敏感。此外,振蕩電路的負(fù)載電容對功耗也有一定影響,雖然12.5pF內(nèi)部負(fù)載的RTC的耗電要比6pF負(fù)載的RTC大,但是,它通常具有更高的抗干擾能力。</p><p>  在有些應(yīng)用中(如VCR),時鐘和日期信息在系統(tǒng)掉電時將會丟失,而在大多數(shù)應(yīng)用中要求系統(tǒng)主電源斷電時仍保持時鐘和日期有效。為保持時鐘振蕩器持續(xù)運轉(zhuǎn),可采用主/輔電池結(jié)構(gòu)或大電容配合主電源為時鐘電路供電,這樣,RTC芯片內(nèi)部還必須提供兩組電

39、源的切換電路。如果用電池(如Li+電池)作為備份電源,RTC設(shè)計還應(yīng)該注重低功耗指標(biāo),以使其在電池供電時具有盡可能低的功耗。電源切換控制電路通常由主電源供電,需要時可切換到電池供電,并將RTC置為低功耗模式,電池供電時,可禁止微處理器與RTC之間的通信(通常被稱為寫保護(hù)),以使電池電流降至最小,同時避免數(shù)據(jù) 被破壞。  在采用電池為電路系統(tǒng)供電時,時鐘電路耗電最大的部件是振蕩器,對于那些嵌入了晶振和電池的時鐘模塊(如DS12C887)

40、,由于振蕩器在出廠時處于禁止?fàn)顟B(tài),因此電池的損耗電流主要是電池的自放電,室溫下,電池自放電每年的消耗能量大約占電池容量的0.5%。有些時間保持NVRAM模塊利用時鐘來控制IC和SRAM,出廠時,振蕩器處于禁止?fàn)顟B(tài)、SRAM與電池斷開,只有模塊在主電源供電并第一次與時鐘電路斷開時,電池才與SRAM接通。這一功能常被稱作電池保</p><p>  3 以AT89C51單片機為核心的時鐘電路的程序設(shè)計</p>

41、;<p>  3.1主程序設(shè)計及系統(tǒng)主流程圖</p><p>  主程序  :設(shè)計中采用定時器T0中斷完成,其余狀態(tài)循環(huán)調(diào)用顯示子程序。系統(tǒng)主流程圖如圖所示:</p><p>  3.2 時鐘電路的時鐘和鬧鈴程序設(shè)計及流程圖</p><p>  時鐘采用11.0256MHZ的脈沖控制, 鬧鈴采用整點報時功能。</p><

42、p>  3.3 時鐘電路的顯示程序設(shè)計及流程圖</p><p><b>  顯示子程序:</b></p><p>  數(shù)碼管顯示的數(shù)據(jù)存放在內(nèi)存單元70H-75H中,其中70H~71H存放秒數(shù)據(jù),72H~73H存放分?jǐn)?shù)據(jù),74H~75H存放時數(shù)據(jù),每一地址單元內(nèi)均為十進(jìn)制BCD碼。由于采用軟件動態(tài)掃描實現(xiàn)數(shù)據(jù)顯示功能,顯示用十進(jìn)制BCD碼數(shù)據(jù)的對應(yīng)段碼存放在RO

43、M表中。顯示時,先取出70H~75H某一地址中的數(shù)據(jù),然后查的對應(yīng)的顯示段碼從P1口輸出。P3口將對應(yīng)的數(shù)碼管選中,就是顯示該地址單元的數(shù)據(jù)值,每個LED數(shù)碼管亮1MS時間再逐位循環(huán)。</p><p>  3.4 時鐘電路的鍵盤程序設(shè)計及流程圖</p><p>  P0口輸出段碼數(shù)據(jù),P1.0-P1.2口作掃描輸出,P0.1—P0.4口接按鈕開關(guān)S1,S2,S3,S4,S5,rest 接S

44、6復(fù)位按鍵。P0.0控制秒的調(diào)整,每按一次加1秒;P0.1控制分的調(diào)整,每按一次加1分;P0.2控制時的調(diào)整,每按一次加1個小時。</p><p>  4 Keil 與Proteus軟件的聯(lián)調(diào)仿真</p><p>  4.1 Keil  Software及Proteus 簡介</p><p>  在這里我們對KEIL和PROTEUS簡單介紹下:</p

45、><p>  [1] Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。 Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生

46、成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。</p><p>  Keil C51單片機軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu) :C51工具包的整體結(jié)構(gòu)中uVision與Ishell分別是C51 for Windows和for Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后

47、分別由C51及A51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存貯器如EPROM中。</p><p>  [2] Proteus軟件是來自英國Labcen

48、ter electronics公司的EDA工具軟件。Proteus軟件有十多年的歷史,在全球廣泛使用,除了其具有和其它EDA工具一樣的原理布圖、PCB自動或人工布線及電路仿真的功能外,其革命性的功能是,他的電路仿真是互動的,針對微處理器的應(yīng)用,還可以直接在基于原理圖的虛擬原型上編程,并實現(xiàn)軟件源碼級的實時調(diào)試,如有顯示及輸出,還能看到運行后輸入輸出的效果,配合系統(tǒng)配置的虛擬儀器如示波器、邏輯分析儀等,您不需要別的,Proteus為您建立

49、了完備的電子設(shè)計開發(fā)環(huán)境!尤其重要的是Proteus Lite可以完全免費,也可以花微不足道的費用注冊達(dá)到更好的效果;功能最強的Proteus專業(yè)版也非常便宜,人人用得起,對高校還有更多優(yōu)惠。 Proteus組合了高級原理布圖、混合模式SPICE仿真,PCB設(shè)計以及自動布線來實現(xiàn)一個完整的電子設(shè)計系統(tǒng)。此系統(tǒng)受益于15年來的持續(xù)開發(fā),被《電子世界》在其對PCB設(shè)計系統(tǒng)的比較文章中評為最好產(chǎn)品—“The Route to PCB

50、 CAD”。Proteus 產(chǎn)品系列也包含了我們革命性的VSM技術(shù),用戶</p><p>  4.2 時鐘電路的仿真圖如下</p><p>  用proteus仿真的電路</p><p>  在keil編寫的時鐘程序:</p><p><b>  5 結(jié)束語</b></p><p>  本次設(shè)計

51、采用單片機作為核心控制器,實現(xiàn)具有定時、校時功能的數(shù)字鐘。隨著人們生活水平的提高,人們對數(shù)字鐘的要求越來越高,有單一的計時功能到發(fā)展到現(xiàn)在有溫度檢測、濕度檢測等多功能數(shù)字鐘。這些多功能數(shù)字鐘多用在工業(yè)里作為檢測元件,因此需要能夠在惡劣的環(huán)境下工作。利用單片機作為數(shù)字鐘的控制核心可以做到硬件電路簡單穩(wěn)定,減小電磁干擾和其他環(huán)境干擾,充分發(fā)揮軟件編程的優(yōu)點,減少因元器件精度不夠引起的誤差。設(shè)計中了解到數(shù)字鐘的迅猛發(fā)展,它已經(jīng)普遍應(yīng)用到人們?nèi)?/p>

52、常生產(chǎn)和生活之中了。數(shù)字鐘有很強的發(fā)展空間,因此我們有理由相信將來數(shù)字鐘會與我們的生產(chǎn)和生活更加緊密相連。</p><p><b>  [參考文獻(xiàn)]</b></p><p>  [1]汪德彪.《MCS-51單片機原理及接口技術(shù)》[M].北京:電子工業(yè)出版社,2003.8.</p><p>  [2]丁元杰.《單片微機原理及應(yīng)用》[M].北京:機

53、械工業(yè)出版社,2005.1.</p><p>  [3]聶毅.《單片機定時器中斷時間誤差的分析及補償》[J]. 微計算機信息,2002.18 (4):37~38.</p><p>  [4]樓然苗,李光飛.《51系列單片機設(shè)計實例》[M].北京:航空航天大學(xué)出版社,2003.3.</p><p>  [5]謝自美.《電子線路設(shè)計、實驗、測試 》[M].武漢:華中理工

54、大學(xué)出版社,2000.</p><p>  [6]何書森,何華斌.《實用數(shù)字電路原理與設(shè)計速成》[M].福州:福建科學(xué)技術(shù)出版社,2000.6.</p><p>  [7]白駒衍.《單片計算機及應(yīng)用》[M].北京:電子工業(yè)出版社, 1999.2.</p><p>  [8]譚浩強 .《C語言程序設(shè)計教程》[M] .北京:清化大學(xué)出版,2000.1.</p>

55、;<p>  [9]周潤景,張麗娜,劉印群.《Keil 與Proteus聯(lián)調(diào)教程》[M].北京:機械工業(yè),2007.9.1.</p><p>  [10]付家才.《單片機控制工程實踐技術(shù)》[M]. 北京:化學(xué)工業(yè)出版社,2004.</p><p>  [11]孫育才,王榮興等.《新型AT89S52系列單片機及其應(yīng)用》[M]. 北京:清華大學(xué)出版社,2005

56、.</p><p>  [12]朱定華.《單片機原理及接口技術(shù)實驗》[M].北京:北方交通大學(xué)出版社,2002.</p><p>  [13]胡漢才. 單片機原理及其接口技術(shù)(第2版)[M]. 北京:清華大學(xué)出版社,2003.</p><p>  [14]蔣延彪.《單片機原理及應(yīng)用(MCS-51)》[M].重慶:重慶大學(xué)出版社,2003.<

57、/p><p>  [15]Yang. Y., Yi. J., Woo, Y.Y. ‘Optimum design for linearity and efficiency of microwave Doherty amplifier using a new load matching technique’, Microw. [J]., 2001, 44, (12), pp. 20–36.</p><

58、;p>  [16] R. Dye, “Visual Object-Orientated Programming,” Dr. Dobbs Macintosh Journal [J], Sept. 1st ( 1991).</p><p>  [17]Intel Corporation.MCS-51 Microcontroller family uer’s manual[M].1994.</p>

59、<p><b>  附 錄</b></p><p>  A:以單片機為系統(tǒng)的總體設(shè)計方案</p><p>  B: 時鐘電路的時鐘程序</p><p>  void WR_595(unsigned char data num2 ) </p><p><b>  {</b></p&

60、gt;<p>  unsigned char data count1;</p><p>  for(count1=0;count1<=7;count1++){</p><p>  if((num2&0x80)==0x80) //最高位為1,則向SDATA_595發(fā)送1</p><p>  SDATA_595=1; /

61、/發(fā)出數(shù)據(jù)的最高位</p><p><b>  else </b></p><p>  SDATA_595=0;</p><p>  num2<<=1; //右移位</p><p>  SCLK_595=0; //產(chǎn)生上生沿</p><p

62、><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  SCLK_595=1;</p><p><b>  } </b></p><p><b>  }</b></p><

63、;p>  void Out_595(void)</p><p><b>  {</b></p><p>  RCK_595=0;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p&

64、gt;  RCK_595=1; /*上升沿鎖存數(shù)據(jù)*/</p><p><b>  }</b></p><p>  /*void Led_Init(void)</p><p><b>  {</b></p><p>  WR_595(0xff);</p><p>  WR_

65、595(0xff);</p><p>  Out_595(); </p><p><b>  }*/</b></p><p>  C: 時鐘電路的顯示程序</p><p>  /*---------------------------------------------------------------------

66、-------------------------</p><p><b>  07.6.30</b></p><p>  共陽數(shù)碼管接法見資料本,暫為整理添加</p><p>  ----------------------------------------------------------------------------------

67、-------------*/ </p><p>  #include <reg51.H></p><p>  #include <intrins.h></p><p>  // 數(shù)碼管驅(qū)動相關(guān)接口 </p><p>  sbit SDATA_595 = P1^0 ; /*串行數(shù)據(jù)輸入*/ </

68、p><p>  sbit SCLK_595 = P1^1; /*移位時鐘脈沖*/</p><p>  sbit RCK_595 = P1^2; /*輸出鎖存器控制脈沖*/</p><p>  unsigned char code LED_Tab[9]={0xFF,

69、 //滅燈</p><p>  0xfd,0xBF,0xfb,0x7f,0xF7,0xef,0xfe,0xdf}; //從低到高指示1-8級</p><p>  //共陰數(shù)碼管段碼表,連線如上所注釋 </p><p>  unsigned c

70、har code Duan_Tab[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0-9</p><p>  //待顯示內(nèi)容的位碼表</p><p>  unsigned char code Wei_Tab[8]={0x08,0x04,0x02,0x01,0x80,0x40,0x20,0x10}; <

71、;/p><p>  /*-------------------------------------------------------------------------------</p><p>  向74595輸出一字節(jié)數(shù)據(jù)子程序</p><p>  ---------------------------------------------------------

72、------------------------*/</p><p>  void WR_595(unsigned char data num2 ) </p><p><b>  {</b></p><p>  unsigned char data count1;</p><p>  for(count1=0;coun

73、t1<=7;count1++){</p><p>  if((num2&0x80)==0x80) //最高位為1,則向SDATA_595發(fā)送1</p><p>  SDATA_595=1; //發(fā)出數(shù)據(jù)的最高位</p><p><b>  else </b></p><p>  SD

74、ATA_595=0;</p><p>  num2<<=1; //右移位</p><p>  SCLK_595=0; //產(chǎn)生上生沿</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b>

75、;</p><p>  SCLK_595=1;</p><p><b>  } </b></p><p><b>  }</b></p><p>  /*------------------------------------------------------------------------

76、-------</p><p>  打開鎖存,更新74595輸出子程序</p><p>  ---------------------------------------------------------------------------------*/</p><p>  void Out_595(void)</p><p><b

77、>  {</b></p><p>  RCK_595=0;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  RCK_595=1; /*上升沿鎖存數(shù)據(jù)*/</p><p><

78、;b>  }</b></p><p>  /*void Led_Init(void)</p><p><b>  {</b></p><p>  WR_595(0xff);</p><p>  WR_595(0xff);</p><p>  Out_595(); </p

79、><p><b>  }*/</b></p><p>  /*--------------------------------------------------------------------------------------</p><p>  顯示函數(shù) </p>&

80、lt;p>  ----------------------------------------------------------------------------------------*/</p><p>  void Led_Display(unsigned char data Buffer[])</p><p>  { </p>&

81、lt;p>  static unsigned char count=0; </p><p>  WR_595(Wei_Tab[count]);</p><p>  if(count==3||count==5)</p><p>  WR_595((~Duan_Tab[Buffer[count]])&0x7f);</p><p>

82、;<b>  else</b></p><p>  WR_595(~Duan_Tab[Buffer[count]]);</p><p>  Out_595(); </p><p><b>  count++;</b></p><p>  if(count>=8)count=0;</p

83、><p><b>  }</b></p><p>  D: 時鐘電路的鍵盤程序</p><p>  #include <reg51.H></p><p>  sbit minute_temper= P0^0 ; /*串行數(shù)據(jù)輸入*/ </p><p>  sbit

84、 hour_temper= P0^1; /*移位時鐘脈沖*/</p><p>  sbit week_temper= P0^2; /*輸出鎖存器控制脈沖*/</p><p>  sbit de_flog= P0^3; </p><p>  sbit key_flog_time12= P0^4;</p>&l

85、t;p>  extern unsigned char week;</p><p>  extern unsigned char hour;</p><p>  extern unsigned char minute;</p><p>  extern bit flog_time12;</p><p>  void Scan_Key(vo

86、id)</p><p><b>  {</b></p><p>  static bit Pre_State_Key1=1; //按鍵的上一次狀態(tài)</p><p>  static bit Last_State_Key1=1; //按鍵的當(dāng)前狀態(tài)</p><p>  static bit P

87、re_State_Key2=1;</p><p>  static bit Last_State_Key2=1; </p><p>  static bit Pre_State_Key3=1;</p><p>  static bit Last_State_Key3=1; </p><p>  static bit Pre_State_Ke

88、y4=1;</p><p>  static bit Last_State_Key4=1; </p><p>  Pre_State_Key1=Last_State_Key1; //保存上次按鍵狀態(tài)</p><p>  Last_State_Key1=minute_temper; //讀入當(dāng)前按鍵狀態(tài)</p

89、><p>  Pre_State_Key2=Last_State_Key2;</p><p>  Last_State_Key2=hour_temper;</p><p>  Pre_State_Key3=Last_State_Key3;</p><p>  Last_State_Key3=week_temper;</p><

90、p>  Pre_State_Key4=Last_State_Key4;</p><p>  Last_State_Key4=key_flog_time12;</p><p>  if(Pre_State_Key1==1&&Last_State_Key1==0)</p><p><b>  {</b></p>

91、<p>  if(de_flog==0)</p><p><b>  {</b></p><p><b>  minute--;</b></p><p>  if(minute>65)minute=59; </p><p><b>  }</b></p

92、><p><b>  else </b></p><p><b>  {</b></p><p><b>  minute++;</b></p><p>  if(minute>59)minute=0;</p><p><b>  }<

93、/b></p><p><b>  }</b></p><p>  if(Pre_State_Key2==1&&Last_State_Key2==0)</p><p><b>  {</b></p><p>  if(de_flog==0)</p><p&g

94、t;<b>  {</b></p><p><b>  hour--;</b></p><p>  if(hour>65)hour=23; </p><p><b>  }</b></p><p><b>  else {</b></p&g

95、t;<p><b>  hour++;</b></p><p>  if(hour>23)hour=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(Pre_State_Key3==1&&

96、amp;Last_State_Key3==0)</p><p><b>  {</b></p><p>  if(de_flog==0)</p><p><b>  {</b></p><p><b>  week--;</b></p><p>  if

97、(week<1)week=7; </p><p><b>  }</b></p><p><b>  else {</b></p><p><b>  week++;</b></p><p>  if(week>7)week=1;</p><

98、;p><b>  }</b></p><p><b>  }</b></p><p>  if(Pre_State_Key4==1&&Last_State_Key4==0)</p><p><b>  {</b></p><p>  flog_time12

99、=!flog_time12;</p><p><b>  }</b></p><p><b>  }</b></p><p>  E: 時鐘電路的總程序</p><p>  //*************************************************************

100、*********************</p><p>  //**********************************************************************************</p><p>  //***********************說明******************************************

101、*************</p><p>  //*******電子時鐘 *******************************</p><p>  #include <reg51.H></p><p>  #include <intrins.h></p><p>  #include <led.h&g

102、t;</p><p>  #include <key.h></p><p>  sbit speker=P1^5;</p><p>  sbit am=P2^0;</p><p>  sbit pm=P2^1;</p><p>  unsigned char ledbuffer[8];<

103、;/p><p>  unsigned char week;</p><p>  unsigned char hour;</p><p>  unsigned char minute;</p><p>  unsigned char second;</p><p>  bit flog_second=0;</p>

104、<p>  bit flog_time12=0;</p><p>  Start_Int(void)</p><p><b>  {</b></p><p>  TMOD=0X11; //T0方式1,T1方式2串口波特率發(fā)生器 </p><p>  TH1=0Xf8;TL1=0X30; //

105、2.0ms定時初值 </p><p>  ET1=1; TR1=1;</p><p>  TH0=0X3c;TL0=0Xaf; //50.0ms定時初值 </p><p>  ET0=1; TR0=1;</p><p><b>  EA=1;</b></p><p><b>  }&

106、lt;/b></p><p>  void buffer()</p><p><b>  {</b></p><p>  if(flog_time12==1)</p><p><b>  {</b></p><p>  ledbuffer[0]=week;</p&

107、gt;<p>  ledbuffer[1]=10;</p><p>  if(hour==0||hour>12)</p><p><b>  {</b></p><p><b>  am=0;</b></p><p><b>  pm=1;</b></

108、p><p>  ledbuffer[2]=(hour-12)/10;</p><p>  ledbuffer[3]=(hour-12)%10;</p><p>  if(hour==0)</p><p><b>  {</b></p><p>  ledbuffer[2]=1;</p>

109、<p>  ledbuffer[3]=2;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p&g

110、t;<b>  am=1;</b></p><p><b>  pm=0;</b></p><p>  ledbuffer[2]=hour/10;</p><p>  ledbuffer[3]=hour%10;</p><p><b>  }</b></p>&l

111、t;p>  ledbuffer[4]=minute/10;</p><p>  ledbuffer[5]=minute%10;</p><p>  ledbuffer[6]=second/10;</p><p>  ledbuffer[7]=second%10; </p><p><b>  }</b><

112、;/p><p><b>  else</b></p><p><b>  {</b></p><p><b>  am=1;</b></p><p><b>  pm=1;</b></p><p>  ledbuffer[0]=week

113、;</p><p>  ledbuffer[1]=10;</p><p>  ledbuffer[2]=hour/10;</p><p>  ledbuffer[3]=hour%10;</p><p>  ledbuffer[4]=minute/10;</p><p>  ledbuffer[5]=minute%10;

114、</p><p>  ledbuffer[6]=second/10;</p><p>  ledbuffer[7]=second%10; </p><p><b>  } </b></p><p><b>  }</b></p><p>  void T0com(void)

115、 interrupt 1 </p><p><b>  {</b></p><p>  static unsigned char conutsecond;</p><p>  TH0=0X3c;TL0=0Xaf; //50.0ms定時初值 </p><p>  conutsecond++;</p>&l

116、t;p>  if(conutsecond>=20)</p><p>  { conutsecond=0;</p><p>  flog_second=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void

117、 T1com(void) interrupt 3</p><p><b>  {</b></p><p>  static unsigned char a=0;</p><p>  static unsigned int c=0;</p><p>  TH1=0Xf8;TL1=0X30; //2.0ms定時初值 &l

118、t;/p><p>  Led_Display(ledbuffer);</p><p><b>  a++;</b></p><p><b>  c++;</b></p><p><b>  if(a>=20)</b></p><p><b>

119、  {</b></p><p><b>  a=0;</b></p><p>  Scan_Key();</p><p><b>  buffer();</b></p><p><b>  } </b></p><p><b> 

120、 }</b></p><p><b>  main()</b></p><p><b>  {</b></p><p>  Start_Int();</p><p><b>  speker=1;</b></p><p><b> 

121、 while(1)</b></p><p><b>  {</b></p><p>  for(week=1;week<8;week++)</p><p>  for(hour=0;hour<24;hour++)</p><p>  for(minute=0;minute<60;minute

122、++)</p><p>  for(second=0;second<60;second++)</p><p><b>  {</b></p><p>  flog_second=0;</p><p>  while(!flog_second);</p><p>  if(second==0&

溫馨提示

  • 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

提交評論