第一篇:基于單片機(jī)的時鐘控制器設(shè)計
時鐘控制器設(shè)計任務(wù)書
1.設(shè)計目的與要求
設(shè)計出一個用于數(shù)字時鐘的控制器,準(zhǔn)確地理解有關(guān)要求,獨(dú)立完成系統(tǒng)設(shè)計,要求所設(shè)計的電路具有以下功能:
(1)顯示: 可以顯示時、分和秒
(2)調(diào)時功能:時(0-24)、分和秒(0-60)可以連續(xù)可調(diào)(3)時間日誤差< 2秒(4)增加整點(diǎn)報時功能(5)增加鬧鐘任意設(shè)定功能 2.設(shè)計內(nèi)容
(1)畫出電路原理圖,正確使用邏輯關(guān)系;(2)確定元器件及元件參數(shù);(3)進(jìn)行電路模擬仿真;(4)SCH文件生成與打印輸出;(5)PCB文件生成與打印輸出; 3.編寫設(shè)計報告
寫出設(shè)計的全過程,附上有關(guān)資料和圖紙,有心得體會。4.答辯
在規(guī)定時間內(nèi),完成敘述并回答問題。
目錄
1.引言…………………………………………………………………………-1-2 總體設(shè)計方案………………………………………………………………-1-2.1 設(shè)計思路…………………………………………………………………-1-2.2 方案確立…………………………………………………………………-1-2.3 設(shè)計方框圖………………………………………………………………-2-3 設(shè)計原理分析………………………………………………………………-2-3.1 系統(tǒng)硬件電路設(shè)計 ……………………………………………………-2-3.2 主控器件AT89S51 ………………………………………………………-2-3.3 譯碼器74HC245 …………………………………………………………-3-3.4 顯示電路 …………………………………………………………………3-3.5 按鍵電路…………………………………………………………………-4-3.6 復(fù)位電路…………………………………………………………………-4-3.7 蜂鳴電路…………………………………………………………………-5-3.8 時鐘電路…………………………………………………………………-5-3.9 總體原理圖………………………………………………………………-5-3.10程序框圖…………………………………………………………………-5-4 結(jié)束語………………………………………………………………………-7-參考文獻(xiàn)………………………………………………………………………-8-附錄 1 電路總原理圖 ………………………………………………………-9-附錄 2 總程序………………………………………………………………-10-
基于單片機(jī)控制的時鐘控制器
摘要:本設(shè)計以Atmel公司的AT89S51單片機(jī)為控制系統(tǒng)的核心,模型采用單片機(jī)作為主控制器,以匯編語言為程序設(shè)計的基礎(chǔ),設(shè)計的一個用兩個四位一體數(shù)碼管串口顯示的時鐘控制電路,包含了時鐘控制電路的基本功能:數(shù)碼顯示,時間調(diào)整,鬧鐘設(shè)定,秒表顯示等,按照二十四小時循環(huán),具有調(diào)節(jié)方便,簡單實用,可靠性強(qiáng)的優(yōu)點(diǎn),有很高的利用價值。關(guān)鍵詞:單片機(jī) AT89C51 74LS245 數(shù)碼管 引言
數(shù)字鐘是采用數(shù)字電路實現(xiàn)對時、分、秒及數(shù)字顯示的計時裝置,廣泛用于個人家庭、車站、碼頭、辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵罚捎跀?shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴(kuò)展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非常現(xiàn)實的意義。為了適應(yīng)時代的潮流,本設(shè)計采用AT89S51單片機(jī)為核心,使得計時的精度有了很大的提高,而且調(diào)節(jié)也變的簡單實用,采用數(shù)字顯示也跟加的直觀方便。總體設(shè)計方案
2.1 設(shè)計思路
本設(shè)計采用AT89S51單片機(jī)為控制核心,產(chǎn)生精確的時鐘震蕩,來控制數(shù)碼管顯示電路來進(jìn)行數(shù)碼顯示,外圍電路主要有復(fù)位電路,震蕩電路,按鍵電路,顯示電路,蜂鳴電路組成;復(fù)位電路可及時的對單片機(jī)進(jìn)行復(fù)位,恢復(fù)到初始的狀態(tài),震蕩電路主要用于計數(shù),定時,產(chǎn)生合適的波特率,按鍵電路主要是給人們提供一個合適的人機(jī)對話的界面,方便人們進(jìn)行實時的調(diào)節(jié),顯示電路主要用于數(shù)碼的顯示,蜂鳴電路用于鬧鈴設(shè)定等輔助功能。2.2 方案確立
本設(shè)計主要有包含了時鐘電路,按鍵掃描,顯示電路等幾個部分。由單片機(jī)實現(xiàn)時鐘功能單片機(jī)內(nèi)部具有定時器,可方便實現(xiàn)定時功能。按鍵電路:鍵盤分為矩陣式鍵盤掃描電路和獨(dú)立式按鍵電路。。矩陣式鍵盤電路,此類鍵盤是采用行列掃描方式,優(yōu)點(diǎn)是當(dāng)按鍵較多時可以降低占用單片機(jī)的I/O口數(shù)目,缺點(diǎn)是電路復(fù)雜且會加大編程難度。獨(dú)立按鍵電路,每個鍵單獨(dú)占有一根I/O接口線,每個I/O口的工作狀態(tài)互不影響,此類鍵盤采用端口直接掃描方式。缺點(diǎn)是當(dāng)按鍵較多時占用單片機(jī)的I/O數(shù)目較多,優(yōu)點(diǎn)是電路設(shè)計簡單,且編程極其容易。由于該系統(tǒng)采用了常規(guī)鐘表式的校對方式,用鍵較少,系統(tǒng)資源足夠用,故采用了獨(dú)立按鍵電路。顯示電路分為:靜態(tài)顯示法與動態(tài)顯示法,由于靜態(tài)顯示法需要數(shù)據(jù)鎖存器等硬件,接口復(fù)雜一些,又考慮到時鐘顯示只有6位,且系統(tǒng)沒有其它復(fù)雜的處理任務(wù),所以決定采用動態(tài)顯示法。2.3 硬件設(shè)計方框圖
電路的設(shè)計以AT89S51單片機(jī)為核心,包含了按鍵電路,復(fù)位電路,震蕩電路,數(shù) 碼顯示電路,整點(diǎn)報時電路等一系列獨(dú)立環(huán)節(jié),下面介紹一下電路設(shè)計過程中的總體框圖,如圖1所示。
圖1 時鐘電路總體框圖 設(shè)計原理分析
用AT89S51單片機(jī)控制的數(shù)字時鐘電路,外接震蕩電路,按鍵電路,顯示電路,蜂鳴電路等:用單片機(jī)電路P0口來輸出7段碼數(shù)據(jù),P2.0~P2.5口作列掃描輸出;按鍵用P1口控制,分別用于調(diào)節(jié)時,分,以及秒表和鬧鐘的設(shè)定;P1.7口接5V的小蜂鳴器,用于按鍵發(fā)音以及定時提醒,整點(diǎn)報時提醒等;采用74HC245作為數(shù)碼管的段碼驅(qū)動,為了提供共陽LED數(shù)碼管的列掃描驅(qū)動電壓,用三極管8550做電源的驅(qū)動輸出;采用12MHZ晶振,可提高秒計時的精確性;在軟件設(shè)計方面,應(yīng)完成時鐘控制電路的各項要求。
3.1 系統(tǒng)硬件電路設(shè)計
系統(tǒng)硬件電路主要組成:主控制器AT89S52、譯碼器74HC245、顯示電路、蜂鳴器電路,復(fù)位電路時鐘電路。3.2 主控器件AT89C51 AT89S51是一款低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,AT89S51在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。管腳如圖2所示。
圖2 DIP-40封裝89C51引腳圖
3.3譯碼器74LS245 74LS245是我們常用的芯片,用來驅(qū)動led或者其他的設(shè)備,它是8路同相三態(tài)雙向總線收發(fā)器,可雙向傳輸數(shù)據(jù)。74LS245還具有雙向三態(tài)功能,既可以輸出,也可以輸入數(shù)據(jù)。當(dāng)89S51單片機(jī)的P0口總線負(fù)載達(dá)到或超過P0最大負(fù)載能力時,必須接入74LS245等總線驅(qū)動器。當(dāng)片選端/CE低電平有效時,DIR=“0”,信號由 B 向 A 傳輸;(接收)DIR=“1”,信號由 A 向 B 傳輸;(發(fā)送)當(dāng)CE為高電平時,A、B均為高阻態(tài)。P0口與74LS245輸入端相連,E端接地,保證數(shù)據(jù)線暢通。管腳如圖3所示。
圖3 74LS245管腳圖
3.4 顯示電路
LED顯示塊是由發(fā)光二極管顯示字段的顯示器件。這種顯示塊有共陰與共陽兩種結(jié)構(gòu)。共陰極LED顯示塊的發(fā)光二極管陰極共地,當(dāng)某個發(fā)光二極管的陽極為高電平時,發(fā)光二極管點(diǎn)亮。共陽極LED顯示塊的放光二極管陽極并接。顯示塊與單片機(jī)接口非常容易,只要將一個8位并行輸出口語顯示塊的發(fā)光二極管引腳相連即可(AT89S51需要加上拉電阻)。此次電路采用2個4位共陽LED數(shù)碼管,從P0口輸出段碼,列掃描用P2.0~P2.7來實現(xiàn)。如圖4所示。
圖4 74LS245驅(qū)動段碼顯示電路圖
3.5 按鍵電路
按鍵調(diào)節(jié)電路有四個獨(dú)立的按鍵接到P1口的P1.0—P1.3端口,控制著電路的調(diào)時,調(diào)分以及秒表功能和鬧鐘的設(shè)定。具體電路如下圖5所示。
圖5 按鍵電路圖
3.6 復(fù)位電路
AT89S51單片機(jī)的復(fù)位電路,如圖5所示中左邊電路。在RESET輸入端出現(xiàn)高電平時實現(xiàn)復(fù)位和初始化。在震蕩器運(yùn)行的情況下,要實現(xiàn)復(fù)位操作,必須使RST引腳至少 保持兩個機(jī)器周期的高電平。在CPU在第二個機(jī)器周期內(nèi)執(zhí)行內(nèi)部復(fù)位操作,以后每一個機(jī)器周期重復(fù)一次,直至RST端電平變低復(fù)位期間不產(chǎn)生ALE信號。當(dāng)RST引腳返回低電平以后,CPU從0地址開始執(zhí)行程序。3.7 蜂鳴電路
蜂鳴器是廣泛應(yīng)用于各種電子產(chǎn)品的一種元器件,它用于提示、報警、音樂等許多應(yīng)用場合。三極管8550作蜂鳴器的驅(qū)動,增加了蜂鳴器的驅(qū)動電流。蜂鳴器的正極性的一端接到三極管的集電極,另一端連接到地,三極管的基極由單片機(jī)的P1.7管腳控制,底電平時蜂鳴器響,高電平時不響。另外,蜂鳴器的聲音大小及音調(diào)可以通過調(diào)整P1.7管腳的置低時間及輸出的波形進(jìn)行控制。蜂鳴器的連接電路的原理圖如圖5所示。3.8 時鐘電路
AT89S51內(nèi)部片內(nèi)有一個由反相放大器構(gòu)成的振蕩電路,XTAL1和XTAL2分別為震蕩電路的輸入端和輸出端。時鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生。在XTAL1和XTAL2引腳上外接定時元件,內(nèi)部震蕩電路就產(chǎn)生自己震蕩。定時元件通常采用石英晶體和電容組成的并聯(lián)諧振回路。外部方式的時鐘電路,XTAL1接地,XTAL2接外部振蕩器。一般要求輸入方波信號的頻率低于33Mhz。本文設(shè)計的系統(tǒng)采用的是內(nèi)部方式的時鐘電路。如圖6所示。
圖6 時鐘電路原理圖
3.9 總體原理圖
見附錄1 3.10程序框圖
主程序如圖7所示首先是初始化部分,主要是計時單元清零,中斷初始化,啟動定時器工作,然后是調(diào)用顯示子程序,接著是判斷有無按鍵。無按鍵則回到調(diào)用顯示子程序處;有按鍵,則執(zhí)行按鍵處理子程序,執(zhí)行完后回到調(diào)用顯示子程序處,重復(fù)循環(huán)。定時器T0中斷如圖8所示
圖7 主程序流程圖
圖8 中斷程序流程圖 結(jié)束語
三周實習(xí)很快就過去了,通過自行設(shè)計、焊接和調(diào)試一個單片機(jī)系統(tǒng),我熟悉了單片機(jī)基本的開發(fā)流程和單片機(jī)的深入學(xué)習(xí)。在完成這個設(shè)計的同時,我復(fù)習(xí)了書本上的許多相關(guān)內(nèi)容,受益匪淺。因此我在獲得理論知識的同時,實踐中也獲得了許多書本上沒有的東西。提高了調(diào)試以及查找并解決問題的能力,我深入了解了焊普通元件與電路元件的技巧、數(shù)字時鐘的工作原理及其它各電路元件的作用等。這些知識不僅在課堂上有效,對以后的學(xué)習(xí)工作有很大的指導(dǎo)意義,在日常生活中更是有著現(xiàn)實意義;也對自己的動手能力是個很大的鍛煉。實踐出真知,縱觀古今,所有發(fā)明創(chuàng)造無一不是在實踐中得到檢驗的。沒有足夠的動手能力,就奢談在未來的科研尤其是實驗研究中有所成就。最后,感謝老師對我們這次實習(xí)的辛勤指導(dǎo)和幫助。
參考文獻(xiàn)
[1] 李光飛,樓然苗,胡佳文編著.單片機(jī)課程設(shè)計實例指導(dǎo).北京:北京航空航天大學(xué)出版社.2004 [2] 黃仁欣主編.單片機(jī)原理及應(yīng)用技術(shù).北京: 清華大學(xué)出版社.2005.[3] 高吉祥主編.電子技術(shù)基礎(chǔ)實驗與課程設(shè)計.北京:電子工業(yè)出版社.2002 [4] 肖玲妮.印刷電路板設(shè)計教程.[M].北京:清華大學(xué)出版社,2003.[5] 康華光.電子技術(shù)基礎(chǔ).[M].北京;高等教育出版社,2006.[6] 余小平等.電子系統(tǒng)設(shè)計.[M].北京:北京航空航天大學(xué)出版社,2007.附錄1: 11 電路總原理圖
附錄2: 總程序
ORG 0000H LJMP START ORG 000BH LJMP INIT0 START: MOV 70H,#0 MOV 71H,#0 MOV 72H,#0 MOV 73H,#0 MOV 74H,#0 MOV 75H,#0 MOV 76H,#0 MOV 77H,#0 MOV 78H,#0 MOV 79H,#0 MOV 7AH,#0 MOV 7BH,#0 MOV 7CH,#0 MOV 7DH,#0 MOV 7EH,#0 MOV 72H,#0AH;對連字符進(jìn)行裝值
MOV 75H,#0AH MOV 60H,#0 MOV 61H,#0 MOV 63H,#0 MOV 64H,#0 CLR P1.7 MOV TMOD,#01H;選擇定時器/計數(shù)器T0的方式1 MOV TL0,#0B0H;對低位賦初值 MOV TH0,#03CH;高位賦初值 SETB EA SETB ET0 SETB TR0 START1: LCALL SCAN LCALL KEYSCAN SJMP START1 DL1MS: MOV R6,#14H;延時1子程序 DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET DELAY: MOV R6,#10 D1: MOV R7,#30 DJNZ R7,$ DJNZ R6,D1 RET
DL20MS: ACALL SCAN;延時20ms子程序 ACALL SCAN ACALL SCAN RET
;整點(diǎn)報時將秒和分的單元與零比較 SCAN: MOV A,7EH;7F單元的內(nèi)容為0
CJNE A,79H,NEXT MOV A,7DH
CJNE A,7AH,NEXT SETB P1.7 AJMP NEXT1 NEXT: CLR P1.7 NEXT1:
MOV A,79H
CJNE A,#0,NEXT2 MOV A,78H
CJNE A,#0,NEXT2 SETB P1.7 LJMP NEXT3 NEXT2:CLR P1.7
;數(shù)碼管總顯示程序開始分兩部分
;校正時間和數(shù)碼管正常工作的顯示程序 NEXT3: MOV A,78H MOV B,#0AH
DIV AB;時間秒的十位送給A,時間秒的個位送B
MOV 71H,A;時間秒要顯示的十位
MOV 70H,B;時間秒要顯示的個位
MOV A,79H MOV B,#0AH
DIV AB;時間分的十位送給A,時間分的個位送B
MOV 74H,A;時間分要顯示的十位送地址
MOV 73H,B;時間分要顯示的個位送地址
MOV A,7AH MOV B,#0AH DIV AB;時間時的十位送給A,時間時的個位送B MOV 77H,A;時間時顯示的十位送地址
MOV 76H,B;時間時要顯示的個位送地址
MOV R1,#70H LCALL DL1MS JB P1.2,LAST HERE3:JNB P1.2,HERE3 INC 7EH MOV A,7EH
CJNE A,#3CH,LOOP3 MOV 7EH,#00H;調(diào)制鬧鈴的時間顯示 LOOP3: MOV DPTR,#TAB MOV R5,#0FEH MOV A,7DH MOV R3,#09H
MOV B,#10 SCAN1: MOV A,R5;數(shù)碼管正常工作的顯 DIV AB 示程序
MOV 64H,A MOV P2,A MOV 63H,B MOV A,@R1 MOV A,7EH MOV DPTR,#TAB
MOV B,#10 MOVC A,@A+DPTR;對字段表取值 DIV AB 顯示
MOV 61H,A MOV P0,A MOV 60H,B MOV A,R5 MOV P2,#0F7H LCALL DL1MS MOV A,60H INC R1 MOVC A,@A+DPTR MOV A,R5 MOV P0,A RL A LCALL DELAY MOV R5,A MOV P2,#0EFH DJNZ R3,SCAN1 MOV A,61H MOV P2,#00H MOVC A,@A+DPTR MOV P0,#00H MOV P0,A JB P1.3,QQ LCALL DELAY LCALL DL1MS MOV P2,#0DFH JB P1.3,QQ MOV P0,#40H HERE: JNB P1.3,HERE LCALL DELAY SJMP LOOP1 MOV P2,#0BFH
MOV A,63H QQ: LJMP LAST MOVC A,@A+DPTR LOOP1:JB P1.1,LOOP2 MOV P0,A LCALL DL1MS LCALL DELAY JB P1.1,LOOP2 MOV P2,#07FH HERE1:JNB P1.1,HERE1 MOV A,64H INC 7DH MOVC A,@A+DPTR MOV A,7DH
MOV P0,A CJNE A,#18H,LOOP2 LCALL DELAY MOV 7DH,#00H JB P1.3,LOOP4 LOOP2:JB P1.2,LOOP3 LCALL DL1MS 14 JB P1.3,LOOP4 HERE4:JNB P1.3,HERE4 LJMP LAST LOOP4:LJMP LOOP1 LAST: RET;“0~9”和“-”的字段表 TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
;定時/計數(shù)器T0中斷程序 INIT0: PUSH ACC PUSH PSW CLR ET0 CLR TR0 MOV TL0,#0B0H MOV TH0,#03CH SETB TR0 INC 7BH MOV A,7BH CJNE A,#14H,OUTT0;50ms是否到20次,沒有到就繼續(xù)執(zhí)行50ms的延時
MOV 7BH,#00 INC 78H MOV A,78H CJNE A,#3CH,OUTT0;一秒的延時是否計到60次,沒有就繼續(xù)執(zhí)行
MOV 78H,#00 INC 79H MOV A,79H CJNE A,#3CH,OUTT0 MOV 79H,#00 INC 7AH MOV A,7AH CJNE A,#18H,OUTT0;60分鐘的延時是否計到24次,沒有就繼續(xù)執(zhí)行程序 MOV 7AH,#00 OUTT0: SETB ET0;啟動定時器T0 POP PSW POP ACC RETI;按鍵處理程序 KEYSCAN:CLR EA
JNB P1.0,KEYSCAN0;P1.0有按鍵按下則跳轉(zhuǎn)到子程序
JNB P1.1,KEYSCAN1;P1.1有按鍵按下則跳轉(zhuǎn)到子程序
JNB P1.2,KEYSCAN2;P1.2有按鍵按下則跳轉(zhuǎn)到子程序
KEYOUT: SETB EA RET
KEYSCAN0:LCALL DL20MS;20ms的延時消抖
JB P1.0,KEYOUT WAIT0: JNB P1.0,WAIT0;判斷按鍵是否松手,松手就往下執(zhí)行程序 INC 7CH MOV A,7CH CLR ET0 CLR TR0
CJNE A,#04H,KEYOUT;按下第一次和第二次對時、分選定
MOV 7CH,#00;按下第三次時就啟動計時
SETB ET0 SETB TR0 LJMP KEYOUT
KEYSCAN1:LCALL DL20MS;按鍵加一的程序
JB P1.1,KEYOUT WAIT1: JNB P1.1,WAIT1 MOV A,7CH
CJNE A,#03H,KSCAN11;如果功能鍵按下則對時加一調(diào)整 INC 78H MOV A,78H
CJNE A,#60,KEYOUT MOV 78H,#00 LJMP KEYOUT
KSCAN11: CJNE A,#02H,KSCAN12 INC 79H MOV A,79H
CJNE A,#60,KEYOUT;如果加到60則清零
MOV 79H,#00 LJMP KEYOUT KSCAN12:CJNE A,#01H,KEYOUT INC 7AH;如果功能鍵是按下第二次則對分進(jìn)行加一調(diào)整
MOV A,7AH CJNE A,#18H,KEYOUT MOV 7AH,#00 LJMP KEYOUT KEYSCAN2:LCALL DL20MS;延時消抖程序 JB P1.2,KEYOUT WAIT2: JNB P1.2,WAIT2;判斷是否放開按鍵
MOV A,7CH;如果功能鍵是按下第一次對時進(jìn)行減一 CJNE A,#03H,KSCAN22 DEC 78H MOV A,78H CJNE A,#00H,KEYOUT MOV 78H,#3BH LJMP KEYOUT KSCAN22:CJNE A,#02H,KSCAN23 DEC 79H MOV A,79H CJNE A,#00H,KEYOUT1 MOV 79H,#3BH LJMP KEYOUT KSCAN23:CJNE A,#01H,KEYOUT1 DEC 7AH MOV A,7AH;如果功能鍵是按下第二次則對分進(jìn)行減一 CJNE A,#00H,KEYOUT1 MOV 7AH,#17H LJMP KEYOUT1 KEYOUT1: SETB EA RET END
第二篇:基于單片機(jī)的時鐘控制器設(shè)計論文
單片機(jī)原理與應(yīng)用技術(shù)課程設(shè)計報告
基于單片機(jī)控制的時鐘控制器
專業(yè)班級: _電氣XX班_ __ 姓
名:__ ___XXX__ ___ 時 間:2013/11/25~12/15 指導(dǎo)教師: XXXX XXX
2013年12月11日
基于單片機(jī)控制的時鐘控制器課程設(shè)計任務(wù)書
1。設(shè)計目的與要求
設(shè)計出一個基于單片機(jī)控制的時鐘控制器。通過向單片機(jī)輸入不同的指令可以實現(xiàn)24小時制時鐘的基本顯示和連續(xù)的調(diào)時,調(diào)分和調(diào)秒的功能,同時又?jǐn)U展了整點(diǎn)報時功能。該電路硬件較為簡單、計時精度高、可控性好,可以隨時調(diào)整和設(shè)定時間,并且調(diào)時間的誤差小,操作簡單、通用性強(qiáng)。
(1)基本功能
<1>、顯示:可以顯示時、分和秒
<2>、調(diào)時功能:時(0-24)、分和秒(0-60)可以連續(xù)可調(diào)(2)性能:時間日誤差< 2秒(3)擴(kuò)展功能 <1>.增加整點(diǎn)報時功能 <2>.增加鬧鐘任意設(shè)定功能 2.設(shè)計內(nèi)容
(1)畫出電路原理圖,正確使用邏輯關(guān)系;(2)確定元器件及元件參數(shù);(3)進(jìn)行電路模擬仿真;(4)SCH文件生成與打印輸出; 3.編寫設(shè)計報告
寫出設(shè)計的全過程,附上有關(guān)資料和圖紙,有心得體會。4.答辯
在規(guī)定時間內(nèi),完成敘述并回答問題。
目錄
摘要...................................................................1 1.引言................................................................1 2.設(shè)計目的和要求......................................................1 3.總體設(shè)計方案........................................................1 3.1 方案設(shè)計要求.......................................................1 3.2 方案設(shè)計與論證.....................................................1 3.3 整體設(shè)計框圖.......................................................2 3.4 系統(tǒng)設(shè)計流程圖.....................................................2 4.設(shè)計原理分析........................................................3 4.1 外接晶振電路..................................................3 4.2 復(fù)位電路...........................................................3 4.3 數(shù)碼管顯示電路.....................................................3 4.4 鍵盤控制電路.......................................................4 4.5 Proteus仿真電路....................................................4 4.6 單片機(jī)程序的編寫...................................................5 4.7 電路的檢測.........................................................5 4.8 CAD電路的連接及PCB電路布線并做出電路板............................5 4.9 軟件與硬件的調(diào)試...................................................5 5.總結(jié)與體會..........................................................5 6.附錄................................................................5 6.1 CAD電路連接圖......................................................5 6.2 PCB電路布線圖......................................................6 6.3 時鐘控制器參考源程序...............................................6 7.參考文獻(xiàn)...........................................................13
基于單片機(jī)控制的時鐘控制器 班級:電氣115班 姓名:趙傳陽
摘要:近年來隨著計算機(jī)在社會領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機(jī)的應(yīng)用不斷地走向深入,由于它具有功能強(qiáng),體積小,功耗低,價格便宜,工作可靠,使用方便等特點(diǎn)。本次設(shè)計的時鐘控制器是以單片機(jī)(AT89C51)為核心,結(jié)合相關(guān)的元器件(3個2位共陽數(shù)碼管,一個發(fā)光二極管和一個蜂鳴器)和應(yīng)用程序(在Proteus軟件和KEIL編譯軟件),構(gòu)成相應(yīng)的應(yīng)用系統(tǒng)。
關(guān)鍵詞:單片機(jī) AT89C51 共陽數(shù)碼管 發(fā)光二極管 蜂鳴器 Proteus軟件 KEIL編譯軟件 中斷
1.引言
隨著科技的發(fā)展,電子技術(shù)得到了飛速的發(fā)展,尤其是單片機(jī)的應(yīng)用更為普遍。單片機(jī)的應(yīng)用已深入眾多技術(shù)領(lǐng)域,從軍事、工業(yè)到家庭日常生活,單片機(jī)因體積小、功能強(qiáng)、價格低廉而得到廣泛應(yīng)用。在此基礎(chǔ)上,越來越多各式各樣的時鐘也逐漸走進(jìn)我們的生活,它們設(shè)計精巧、方便、耐用、美觀,深得各領(lǐng)域的厚愛。隨著科技的進(jìn)步,基于單片機(jī)控制的時鐘控制器的出現(xiàn)則打破了人們對時鐘的傳統(tǒng)概念,因為數(shù)字時鐘不僅可以通過數(shù)字直觀地顯示出時間,還可以定時發(fā)出各種聲、光、電信號,以啟動各種設(shè)備實現(xiàn)實時控制、時間順序控制。該課程設(shè)計既有一般時鐘的基本顯示和調(diào)整功能,同時又增加了整點(diǎn)報時功能,復(fù)位功能及實時時鐘控制功能。
2.設(shè)計目的與要求
設(shè)計出一個基于單片機(jī)控制的時鐘控制器。通過向單片機(jī)輸入不同的指令可以實現(xiàn)24小時制時鐘的基本顯示和連續(xù)的調(diào)時,調(diào)分和調(diào)秒的功能,同時又?jǐn)U展了整點(diǎn)報時功能。該電路硬件較為簡單、計時精度高、可控性好,可以隨時調(diào)整和設(shè)定時間,并且調(diào)時間的誤差小,操作簡單、通用性強(qiáng)。
在一個單片機(jī)應(yīng)用系統(tǒng)中,時鐘有兩方面的含義:一是指為保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機(jī)系統(tǒng)工作的快慢;二是指系統(tǒng)的標(biāo)準(zhǔn)定時時鐘,即定時時間。
本文主要介紹用單片機(jī)為核心部件的時鐘控制器,本設(shè)計由單片機(jī)AT89C51芯片和3個兩位一體的共陽極的數(shù)碼管為核心,輔以必要的電路,構(gòu)成了一個單片機(jī)時鐘控制器。基本要求:1.顯示: 可以顯示時、分和秒
2.調(diào)時功能:時(0-24)、分和秒(0-60)可以連續(xù)可調(diào)并進(jìn)行校準(zhǔn) 3.能夠完成時間的顯示、定時鬧鐘、整點(diǎn)報時及復(fù)位功能
3.總體設(shè)計方案
3.1.方案設(shè)計要求
設(shè)計制作一個時鐘控制器,要求能實現(xiàn)基本走時,并以數(shù)字形式顯示時、分、秒,采用24小時制,能實現(xiàn)校時、校分連續(xù)可調(diào)、整點(diǎn)報時功能、復(fù)位功能以及鬧鐘任意設(shè)定功能。3.2方案設(shè)計與論證
方案一:采用各種純數(shù)字芯片實現(xiàn)數(shù)字時鐘的設(shè)計。優(yōu)點(diǎn):各個模塊功能清晰,電路易于理解實現(xiàn)。缺點(diǎn):各個模塊功能已定不能進(jìn)行智能化調(diào)整,整體電路太龐大。
方案二:采用 FPGA模塊用硬件語言實現(xiàn)功能。優(yōu)點(diǎn):運(yùn)算速度快,走時精度高,算法簡單。缺點(diǎn):成本高,大材小用。
方案三:采用單片機(jī)最小系統(tǒng)實現(xiàn)功能。優(yōu)點(diǎn):電路簡單,能通過程序進(jìn)行隨機(jī)調(diào)整并擴(kuò)展功能,成本低,易于實現(xiàn)。缺點(diǎn):走時有一定的誤差。
經(jīng)過綜合考慮成本問題以及電路實現(xiàn)問題,選擇第三種方案實現(xiàn)設(shè)計要求。3.3整體設(shè)計框圖
整體設(shè)計框圖如圖1所示:
4.設(shè)計原理分析
4.1外接晶振電路
晶振連接電路圖如圖3,以12MHZ晶振為基準(zhǔn)。
圖3 外接晶振電路連接圖
XTAL1、XTAL2:XTAL1是片內(nèi)振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時,外部振蕩信號應(yīng)直接加到XTAL1,而XTAL2懸空。內(nèi)部方式時,時鐘發(fā)生器對振蕩脈沖二分頻,如晶振為12MHz,時鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇,一般選用12MHZ晶振,電容取30PF左右。4.2復(fù)位電路
常用復(fù)位電路圖如圖4:
圖4 復(fù)位電路連接圖
在振蕩器運(yùn)行時,有兩個機(jī)器周期(24個振蕩周期)以上的高電平出現(xiàn)在此引:腳時,將使單片機(jī)復(fù)位,只要這個腳保持高電平,51芯片便循環(huán)復(fù)位。復(fù)位后P0-P3口均置1引腳表現(xiàn)為高電平,程序計數(shù)器和特殊功能寄存器SFR全部清零。4.3 數(shù)碼管顯示電路
二位一體共陽極數(shù)碼管電路連接圖如圖5,以PNP三極管為驅(qū)動。
圖5 數(shù)碼管顯示電路連接圖
4.4 鍵盤控制電路
鍵盤控制電路如圖6。
圖6 時鐘按鍵控制電路圖
通過S1、S2、S3和S4四個按鍵,對時間進(jìn)行修改和鬧鐘的設(shè)置,S0控制鬧鐘的啟動和停止。按下S4鍵顯示鬧鐘,松開后顯示時間;按下S1鍵進(jìn)入時間修改模式,再按S1鍵時間的時加1,按S3分加1,調(diào)整結(jié)束后按下S4恢復(fù)正常顯示;按下S2鍵進(jìn)入鬧鐘修改模式,再按S3鍵鬧鐘的時加1,按S3分加1,調(diào)整結(jié)束后按下S4恢復(fù)正常顯示。在按鍵按下和放開時會出現(xiàn)抖動現(xiàn)象。通過延時程序,可以進(jìn)行去抖動設(shè)計。4.5 Proteus仿真電路
整體電路連接圖如圖7:
圖7 整體電路連接圖
4.6 單片機(jī)程序的編寫
用KEIL編譯軟件進(jìn)行程序的設(shè)計、編譯并生成可執(zhí)行文件。4.7 電路的檢測
電路連接完畢后,應(yīng)用單片機(jī)程序燒錄工具進(jìn)行程序燒錄,然后單擊運(yùn)行按鈕進(jìn)行仿真,檢測電路是否有誤。
4.8 CAD電路的連接及PCB電路布線并做出電路板
待仿真電路檢測無誤后,則通過CAD軟件進(jìn)行電路圖的連接并對元件進(jìn)行封裝,確定無誤后生成PCB圖進(jìn)行電路的布線,之后做出電路板進(jìn)行元件的焊接。4.9 軟件與硬件的調(diào)試
單片機(jī)應(yīng)用系統(tǒng)的調(diào)試包括硬件和軟件兩部分,但是它們并不能完全分開。一般的方法是排除明顯的硬件故障,再進(jìn)行綜合調(diào)試,排除可能的軟件或硬件故障。
軟件調(diào)試是指用仿真軟件進(jìn)行仿真調(diào)試,驗證系統(tǒng)的各項功能;硬件調(diào)試即軟件調(diào)試成功后,將程序下載至AT89C51芯片中,用焊接好的電路來進(jìn)行各項功能的驗證與檢測。
需要特別注意的是軟件調(diào)試與硬件調(diào)試的差異,軟件調(diào)試只是初步的估測,硬件的調(diào)試才是最真實的。
5總結(jié)與體會
經(jīng)過三周的實習(xí)設(shè)計,我設(shè)計的時鐘控制器實現(xiàn)了它最基本功能,三個星期的緊張實習(xí),讓我獲益非淺,更加熟練的掌握了Proteus軟件、KEIL軟件及CAD軟件的應(yīng)用,使我看到了自己專業(yè)知識的淺薄與不足。通過本次的課程設(shè)計,我對單片機(jī)這門課程有了更深的了解,單片機(jī)課程設(shè)計則是人生課程,我學(xué)到了很多課堂上無法學(xué)到的東西,懂得了學(xué)習(xí)的不容易,在以后的學(xué)習(xí)中我會更加努力的去學(xué)習(xí)和研究,以取得更好的成績。
6.附錄
6.1 CAD電路連線圖如圖8。
圖8 CAD電路連接圖
6.2 PCB電路布線圖如圖9。
圖9 PCB布線電路圖(注:未連線的端口用外接線連接)
6.3 時鐘控制器參考源程序
使用keil軟件編寫源程序 ORG 0000H LJMP START ORG 000BH LJMP TIME;********初始化********* START: MOV SP, #50H MOV 20H,#00H;定義秒
MOV 21H,#00H;定義分 MOV 22H,#00H;定義時
MSTOP1: MOV C,P1.3;P1.3為0時轉(zhuǎn)移 JNC MSTOP1 LCALL DELAY1;延時
MOV A,50H
INC 50H
CJNE A,#00H,HJ1
LJMP L0 HJ1: MOV C,P1.3 JNC MSTOP1 INC 22H;小時自加一 MOV A,22H CJNE A,#18H,GO12;MOV 22H,#00H;MOV 34H,#00H MOV 35H,#00H LJMP L0 L1: JB P1.1,L2;P1.1=1 MOV C,P1.1 JC L1 LCALL DELAY1;JC L1 MSTOP2: MOV C,P1.1 JNC MSTOP2 LCALL DELAY1;MOV C,P1.1 JNC MSTOP2 INC 21H;MOV A,21H CJNE A,#3CH,GO11;MOV 21H,#00H;MOV 32H,#00H MOV 33H,#00H LJMP L0 GO11: MOV B,#0AH DIV AB MOV 32H,B;MOV 33H,A;LJMP L0 GO12: MOV B,#0AH DIV AB MOV 34H,B;MOV 35H,A;LJMP L0 L2: JB P1.0,L0;P1.0 MOV C,P1.0 JC L2 LCALL DELAY1;MOV C,P1.0 JC L2 STOP1: MOV C,P1.0 JNC STOP1
小時計數(shù)循環(huán)
復(fù)位 時轉(zhuǎn)移 延時;P1.1=0時轉(zhuǎn)移 延時 分鐘加一 分鐘計數(shù)循環(huán) 復(fù)位 將A的低4位存入32單元 將A的高4位存入33單元 將A的低4位存入34單元 將A的高4位存入35單元=1時轉(zhuǎn)移 延時;P1.0=0時轉(zhuǎn)移
LCALL DELAY1;延時 MOV C,P1.0 JNC STOP1
MOV 50H,#00H LJMP MAIN;*******設(shè)置鬧鐘******* SETATIME:LCALL DISPLAY2;調(diào)用DISPLAY2顯示鬧鐘 N0: LCALL DISPLAY2 MM2: JB P1.2,N1;P1.2=1時轉(zhuǎn)移 MOV C,P1.2 JC MM2 LCALL DELAY1;JC MM2 MSTOP3: MOV C,P1.2 JNC MSTOP3 LCALL DELAY1;
LJMP N0 HJ2: MOV C,P1.2 JNC MSTOP3 INC 24H;MOV A,24H CJNE A,#24,GO22;MOV 24H,#00H;MOV 38H,#00H MOV 39H,#00H LJMP N0 N1: JB P1.1,N2;P1.1 MOV C,P1.1 JC N1 LCALL DELAY1;JC N1 MSTOP4: MOV C,P1.1 JNC MSTOP4 LCALL DELAY1;MOV C,P1.1 JNC MSTOP4 INC 23H;MOV A,23H CJNE A,#60,GO21;MOV 23H,#00H;MOV 36H,#00H MOV 37H,#00H LJMP N0 GO21: MOV B,#0AH DIV AB MOV 36H,B;MOV 37H,A;LJMP N0
延時 =0時轉(zhuǎn)移 延時 小時加一 小時計數(shù)循環(huán) 復(fù)位 =1時轉(zhuǎn)移 延時 =0時轉(zhuǎn)移 延時 分鐘加一 分鐘計數(shù)循環(huán) 復(fù)位 將A的低4位存入36單元 將A的高4位存入37單元
;P1.2 MOV A,50H INC 50H CJNE A,#00H,HJ2;P1.1
GO22: MOV B,#0AH DIV AB MOV 38H,B;將A的低4位存入38單元 MOV 39H,A;將A的高4位存入39單元 LJMP N0 N2: JB P1.0 ,N0;P1.0=1時轉(zhuǎn)移 MOV C,P1.0 JC N2 LCALL DELAY1;延時 MOV C,P1.0 JC N2 STOP2: MOV C,P1.0 JNC STOP2 LCALL DELAY1 MOV C,P1.0 JNC STOP2
MOV 50H,#00H LJMP MAIN;*******鬧鐘判斷***************** TIMEPRO: MOV A,21H MOV B,23H CJNE A,B,BK;判斷定時鬧鐘的分鐘 MOV A,22H MOV B,24H CJNE A,B,BK;判斷定時鬧鐘的小時 SETB 25H.0 MOV C,25H.0 LCALL TIMEOUT;調(diào)用TIMEOUT BK:RET;**************喇叭報警***************** TIMEOUT: X1: LCALL BZ;調(diào)用喇叭響應(yīng)程序 CLR 25H.0;調(diào)用喇叭響應(yīng)程序結(jié)束 LCALL DELAY;延時 CLR 25H.0 LJMP DISPLAY1 BZ:MOV C,25H.1 MOV P1.6,C CLR P1.7 MOV R7,#0FFH;喇叭響應(yīng)時間 T2: MOV R6,#0FFH T3: DJNZ R6,T3 DJNZ R7,T2 SETB P1.7 RET;*************顯示鬧鐘時間************ LOOKATIME:LCALL DISPLAY2 MM: JNB P1.0,LOOKATIME LCALL DELAY1 LJMP MAIN DELAY1: MOV R4,#14H;時間延時
0
POP ACC RETI;********顯示子程序********** DISPLAY1: MOV R0,#30H MOV R3,#0FEH MOV A,R3 PLAY1: MOV P2,A MOV A,@R0;取要顯示的數(shù)據(jù) MOV DPTR,#DSEG1;指向字形段碼首地址 MOVC A,@A+DPTR CJNE R0,#34H,PA ORL A,#80H PA:CJNE R0,#32H,PB ORL A,#80H PB:CPL A;MOV P0,A;LCALL DL1 MOV P2,#0FFH MOV A,R3;RL A;JNB ACC.6,LD1 INC R0;MOV R3,A LJMP PLAY1 LD1: RET DISPLAY2: PUSH ACC;PUSH PSW MOV R0,#36H MOV R3,#0FBH MOV A,R3
PLAY2: MOV P2,A MOV A,@R0;MOV DPTR,#DSEG1;MOVC A,@A+DPTR CJNE R0,#38H,PP ORL A,#80H PP:CPL A;MOV P0,A;LCALL DL1;MOV P2,#0FFH MOV A,R3;RL A;JNB ACC.6,LD2 INC R0;MOV R3,A LJMP PLAY2;LD2: POP PSW POP ACC;RET;******DELAY*******
查表取字形段碼 指向P0口 判斷是否顯示到最低位 左移一位 緩沖器地址加一 保護(hù)現(xiàn)場 取要顯示的數(shù)據(jù) 指向字形段碼首地址 查表取字形段碼 指向P0口 調(diào)用DL1 判斷是否顯示到最低位左移一位 緩沖器地址加一 調(diào)用PLAY2 恢復(fù)現(xiàn)場
DL1: MOV R7,#20H DL: MOV R6,#20H DL6: DJNZ R6,$ DJNZ R7,DL RET DSEG1: DB 3FH,06H,5BH,4FH,66H;七段碼表 DB 6DH,7DH,07H,7FH,6FH END 7.參考文獻(xiàn)
[1].王建校,楊建國.51系列單片機(jī)及C51程序設(shè)計.北京:科學(xué)出版社, 2002.[2].吳金戊, 沈慶陽等.8051單片機(jī)實踐與應(yīng)用.北京:清華大學(xué)出版社, 2002.[3].李建忠.單片機(jī)原理及應(yīng)用(第二版).西安:西安電子科技大學(xué)出版社, 2008.2.[4].張毅剛.新編MCS-51單片機(jī)應(yīng)用設(shè)計(第3版).哈爾濱: 哈爾濱工業(yè)大學(xué)出版社, 2006.10.[5].李學(xué)禮.基于Proteus的8051單片機(jī)實例教程.電子工業(yè)出版社出版時間, 2008.6.[6].百度文庫:http://wenku.baidu.com/view/a9243c18fad6195f312ba6d3.html
第三篇:AVR單片機(jī)的時鐘設(shè)計(范文)
基于AVR單片機(jī)Mega16的時鐘設(shè)計報告
1摘 要
近年來隨著計算機(jī)在社會領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,由于它具有功能強(qiáng),體積小,功耗低,價格便宜,工作可靠,使用方便等特點(diǎn),因此越來越廣泛地應(yīng)用各個領(lǐng)域.本文的電子鐘系統(tǒng)是以單片機(jī)(ATmega16)為核心,時鐘芯片、數(shù)碼管顯示驅(qū)動芯片等元器件組成。具體介紹應(yīng)用Proteus的ISIS軟件進(jìn)行單片機(jī)系統(tǒng)的電子鐘設(shè)計與仿真的實現(xiàn)方法。該方法既能準(zhǔn)確驗證所設(shè)計的系統(tǒng)是否滿足技術(shù)要求,又能提高系統(tǒng)設(shè)計的效率和質(zhì)量,降低開發(fā)成本,具有推廣價值。
關(guān)鍵詞:單片機(jī); 時鐘芯片 ;數(shù)碼管顯示驅(qū)動芯片 ;電子鐘
2引 言
單片機(jī)電子時鐘系統(tǒng)可以用多種技術(shù)手段實現(xiàn)。本文借助于Proteus仿真系統(tǒng)進(jìn)行系統(tǒng)虛擬開發(fā)成功之后再進(jìn)行實際操作,可以節(jié)約開發(fā)時間,降低開發(fā)成本,具有很大的靈活性和可擴(kuò)展性。在國外有包括斯坦福、劍橋等在內(nèi)的幾千家高校將Proteus作為電子工程學(xué)位的教學(xué)和實驗平臺;在國內(nèi)也有眾多大學(xué)正在體驗Proteus的獨(dú)一無二的功能并申報大學(xué)計劃。該方法具有普遍意義。通過實際應(yīng)用發(fā)現(xiàn),采用該方法可以大大簡化硬件電路測試和系統(tǒng)調(diào)試過程中電路板制作、元器件安裝、焊接等過程。很明顯,使用該方法可以提高開發(fā)效率、降低開發(fā)成本、提升開發(fā)…
AVR系列的單片機(jī)不僅具有良好的集成性能,而且都具備在線編程接口,其中的系列還具備仿真和下載功能;含有片內(nèi)看門狗電路、片內(nèi)程序FLASH、同步串行接口SPI;多數(shù)AVR單片機(jī)還內(nèi)嵌了A/D轉(zhuǎn)換器、EEPROM、模擬比較器、PWM定時計數(shù)器等多種功能;AVR單片機(jī)的I/O接口具有很強(qiáng)的驅(qū)動能力,灌人電流可直接驅(qū)動繼電器、LED等元件,從而省去驅(qū)動電路,節(jié)約系統(tǒng)成本。
3設(shè)計思路
利用單片機(jī)(ATmega16)制作簡易電子時鐘,由六個LED數(shù)碼管分別顯示小時十位、小時個位、分鐘十位、分鐘個位、秒鐘十位、秒鐘個位。6個PNP管分別控制六個數(shù)碼管的亮滅,此外還可以實現(xiàn)時間調(diào)整、等多種實用功能。整個設(shè)計分硬件和軟件兩大部分。硬件部分采用MEGA16單片機(jī)作為可編程芯片,字符液晶作為信號顯示;軟件部分利用C語言作為設(shè)計語言,對MEGA16進(jìn)行編程實現(xiàn)各種功能。
硬件設(shè)計電路分解為單片機(jī)、晶體振蕩器和數(shù)碼管3個部分,其結(jié)構(gòu)簡單,經(jīng)濟(jì)實惠。單片機(jī)內(nèi)部晶體振蕩器的外接電路。由兩個電容和晶體振蕩器構(gòu)成,其電路如圖1所示。圖中X1和X2分別接MEGA16的兩個脈沖控制端,使得MEGA16的內(nèi)部脈沖電路為電子時鐘和整個系統(tǒng)時鐘提供脈沖。
圖1所示給出了采用單片機(jī)外加電源及晶體振蕩器構(gòu)成最小單片機(jī)系統(tǒng)。配合單片機(jī)開發(fā)的設(shè)計、調(diào)試和下載,最終將時鐘信息從端口輸出到字符液晶顯示。
圖26位模式與單片機(jī)的端口相連。
4軟件設(shè)計及調(diào)試過程
軟件設(shè)計包括Proteus的ISIS軟件、Code Vision AVR編輯軟件和AVRStudio4調(diào)試。利用ISP將生成程序timer.cof 下載到目標(biāo)板。其主要程序如下:
void display(void)// 6 位LED 數(shù)碼管動態(tài)掃描函數(shù)
{
PORTC = 0xff;
PORTA = led_7[dis_buff[posit]];
if(point_on &&(posit==2||posit==4))PORTA |= 0x80;
PORTC = position[posit];
if(++posit >=6)posit = 0;
}
// Timer 0 比較匹配中斷服務(wù)
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
display();// 調(diào)用LED 掃描顯示
if(++time_counter>=100)
{
time_counter = 0;
time_1s_ok = 1;
}
}
void time_to_disbuffer(void)// 時鐘時間送顯示緩沖區(qū)函數(shù)
{
char i,j=0;
for(i=0;i<=2;i++)
{
dis_buff[j++] = time[i] % 10;
dis_buff[j++] = time[i] / 10;
}
}
// INT0 中斷服務(wù)程序
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(++time[2]>=24)time[2] = 0;
}
// INT1 中斷服務(wù)程序
interrupt [EXT_INT1] void ext_int1_isr(void)
{
if(++time[1]>=60)time[1]=0;
}
void main(void)
{
PORTA=0x00;// 顯示控制I/O 端口初始化
DDRA=0xFF;
PORTC=0x3F;
DDRC=0x3F;// T/C0 初始化
PORTA=0xFF;
DDRA=0xFF;
GICR|=0xC0;// 允許INT0、INT1 中斷
MCUCR=0x0A;// INT0、INT1 下降沿觸發(fā)
GIFR=0xC0;// 清除INT0、INT1 中斷標(biāo)志位
TCCR0=0x0B;// 內(nèi)部時鐘,64 分頻(4M/64=62.5KHz),CTC 模式
TCNT0=0x00;
OCR0=0x7C;// OCR0 = 0x7C(124),(124+1)/62.5=2ms
TIMSK=0x02;// 允許T/C0 比較匹配中斷
time[2] = 14;time[1] = 01;time[0] = 55;// 設(shè)時間初值23:58:5
5posit = 0;
time_to_disbuffer();
#asm(“sei”)// 開放全局中斷
while(1)
{
if(time_1s_ok)// 1 秒到
{
time_1s_ok = 0;
point_on = ~point_on;
if(++time[0] >= 60)// 以下時間調(diào)整
{
time[0] = 0;
if(++time[1] >= 60)
{
time[1] = 0;
if(++time[2] >= 24)time[2] = 0;
}
} time_to_disbuffer();// 新調(diào)整好的時間送顯示緩沖區(qū)
5總結(jié)心得
這次設(shè)計報告培養(yǎng)了學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計算機(jī)應(yīng)用中空前活躍的領(lǐng)域,在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握單片機(jī)的開發(fā)技術(shù)是十分重要的。
回顧起此次單片機(jī)設(shè)計,我仍感慨頗多,的確,從選題到定稿,從理論到仿真,在這些日子里,我學(xué)到很多很多的的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨(dú)立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,比如說不懂一些元器件的使用方法,對單片機(jī)匯編語言掌握得不好……通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。
這次設(shè)計終于順利完成了,在設(shè)計中遇到了很多編程問題,最后在老師的辛勤指導(dǎo)下,終于游逆而解。同時,在老師那里我學(xué)得到很多實用的知識,在次我表示感謝!同時,對給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝!
}結(jié)束語
單片機(jī)自20世紀(jì)70年代問世以來,以其極高的性能價格比,受到人們的重視和關(guān)注,應(yīng)用很廣、發(fā)展很快。單片機(jī)體積小、重量輕、抗干擾能力強(qiáng)、環(huán)境要求不高、價格低廉、可靠性高、靈活性好、開發(fā)較為容易。尤其是AVR單片機(jī)可以用高級語言編程,極容易地實現(xiàn)系統(tǒng)移植,并且加快了軟件的開發(fā)過程。這次設(shè)計通過對它的學(xué)習(xí)、應(yīng)用,以Mage16單片機(jī)為核心,輔以必要的電路,采用高級C語言編程,設(shè)汁了一個簡易的電子時鐘,由
4.5 V直流電源供電,通過數(shù)碼管能夠準(zhǔn)確顯示時間。
第四篇:基于51單片機(jī)電子時鐘設(shè)計
基于51單片機(jī)的電子時鐘設(shè)計
摘要
本電子時鐘以STC89C52單片機(jī)作為主控芯片,采用DS12C887時鐘芯片,使用1602液晶作為顯示輸出。該時鐘走時精確,具有鬧鐘設(shè)置,以及可同時顯示時間、日期等多種功能。本文將詳細(xì)介紹該電子時鐘涉及到的一些基本原理,從硬件和軟件兩方面進(jìn)行分析。
【關(guān)鍵詞】
STC89C52單片機(jī)
DS12C887時鐘芯片
1602液晶
蜂鳴器
目錄
一、緒論…………………………………………………………4
1.1 電子時鐘功能…………………………………………1.2設(shè)計方案………………………………………………4
二、硬件設(shè)計……………………………………………………4
2.151
2.2 單片機(jī)部分設(shè)計………………………………4
USB供電電路設(shè)計………………………………5
2.3 串行通信電路設(shè)計………………………………6
2.4DS12C887時鐘芯片電路的設(shè)計…………………6
2.51602LCD液晶屏顯示電路設(shè)計………………7
2.6
蜂鳴器電路設(shè)計………………………………8
2.7
按鍵調(diào)整電路設(shè)計…………………………8
三、軟件設(shè)計…………………………………………9
3.1 系統(tǒng)程序流程圖設(shè)計…………………………9
3.2程序設(shè)計……………………………………11
四、心得體會………………………………………………22 參考文獻(xiàn)……………………………………………………23
一、緒
論
1.1電子時鐘功能
(1)在1602液晶上顯示年、月、日、星期、時、分、秒,并且按秒實時更新顯示。(2)具有鬧鈴設(shè)定即到時報警功能,報警響起時按任意鍵可取消報警。
(3)能夠使用實驗板上的按鍵隨時調(diào)節(jié)各個參數(shù),四個有效鍵分別為功能選擇鍵、數(shù)值增大鍵、數(shù)值減小鍵和鬧鐘查看鍵。
(4)每次有鍵按下時,蜂鳴器都以短“滴”聲報警。
(5)利用DS12C887自身掉電可繼續(xù)走時的特性,該時鐘可實現(xiàn)斷電時間不停、再次上電時時間仍準(zhǔn)確顯示在液晶上的功能。
1.2設(shè)計方案
DS12C887時鐘芯片+1602LCD液晶屏
DS12C887時鐘芯片功能豐富、價格適中,能夠自動產(chǎn)生世紀(jì)、年、月、日、時、分、秒等時間信息,其內(nèi)部含有世紀(jì)寄存器,從而利用硬件電路解決“千年”問題。DS12C887中自帶鋰電池,外部掉電時,其內(nèi)部時間信息還能保持10年之久。1602LCD液晶屏可以輸出2行,每行顯示16個字符。1602LCD液晶屏顯示清晰且不會閃爍,由于液晶屏是數(shù)字式的,因此和單片機(jī)系統(tǒng)的接口簡單,操作方便。
以STC89C52為主控芯片,DS12C887為時鐘芯片,1602LCD液晶屏作為顯示器。程序控制DS12C887時鐘芯片實現(xiàn)小時、分、秒和年、月、日的計時,并在1602LCD液晶屏上顯示出來。當(dāng)時間走到程序所設(shè)定的時間時,蜂鳴器響起,起到鬧鐘功能。
二、硬
件
設(shè)
計
2.1 51單片機(jī)部分設(shè)計
單片機(jī)部分如圖2—1所示:
以STC89C52單片機(jī)為核心,選用12MHZ的晶振,由于晶振的頻率越高,單片機(jī)的運(yùn)行速度就越快,考慮到單片機(jī)的運(yùn)行速度快會導(dǎo)致對存儲器的要求就會變高,因此12MHZ為最佳選擇。外接電容的值雖然沒有嚴(yán)格的要求,但是外接電容的大小會影響振蕩器的頻率高低、振蕩器的穩(wěn)定性和起振的快速性,因此選用30pF的電容作為起振電容。復(fù)位電路為按鍵高電平復(fù)位,當(dāng)按鍵按下,RES端為高電平,當(dāng)高電平持續(xù)4us的時間單片機(jī)即復(fù)位。
2.2 USB供電電路設(shè)計
USB供電電路如下圖2—2所示:
該電子時鐘采用USB端口的方式為單片機(jī)供電,LPOW1為電源顯示燈,當(dāng)按鍵S5按下,電源顯示燈LPOW1亮,表示給單片機(jī)供+5V電。
2.3 串行通信電路設(shè)計
串行通信電路如下圖2—3所示:
圖中通過MAX232進(jìn)行RS—232電平與單片機(jī)TTL電平之間的轉(zhuǎn)換,從而為單片機(jī)和上位機(jī)之間通信提供通道。通信電路的目的就是讓通信雙方的電平匹配,單片機(jī)用的是TTL電平,上位機(jī)的串口用的是RS—232電平。TTL電平邏輯1的電壓范圍是+3.3V到+5V,邏輯0的電壓范圍是0到+3.3V;RS—232電平的邏輯1的電壓范圍是—15V到—5V,邏輯0的電壓范圍是+5V到+15V。MAX232可以把輸入的+5V電源電壓變換成為RS—232輸出電平所需的+10V電壓。所以采用此芯片接口的串行通信系統(tǒng)只需單一的+5V電源就可以了。對于沒有+12V電源的場合,其適應(yīng)性更強(qiáng),2.4 DS12C887時鐘芯片電路的設(shè)計
時鐘芯片電路如下圖2—4所示:
DS12C887時鐘芯片共需要13條信號線,分別是并行數(shù)據(jù)地址復(fù)用線AD0~AD7,CS,AS,R/W,DS和IRQ。
MOT—總線操作時序選擇端。它有兩種工作模式,當(dāng)MOT接
VCC時,選用Motorola模式;當(dāng)MOT接GND或懸空時,選用Intel模式。NC—空引腳。
AD0~AD7—復(fù)用地址數(shù)據(jù)總線。在總線周期的前半部分,出現(xiàn)在AD0~AD7上的是地址信息,可用以選通DS12C887內(nèi)的RAM,總線周期的后半部分出現(xiàn)在AD0~AD7上的是數(shù)據(jù)信息。GND,VCC—系統(tǒng)電源接入端。當(dāng)
VCC輸入為+5V時,用戶可以訪問DS12C887內(nèi)RAM的輸入小于+4.25V時,禁止用戶對內(nèi)部RAM中的數(shù)據(jù),并可對其進(jìn)行讀/寫操作;當(dāng)
VCC進(jìn)行讀/寫操作,此時用戶不能正確芯片內(nèi)的時間信息;當(dāng)
VCC的輸入小于+3V時,DS12C887會自動的將電源切換到內(nèi)部自帶的鋰電池上,以保證內(nèi)部的電路能正常工作。
CS—芯片片選端。
AS—地址選通輸入端。在進(jìn)行讀/寫操作時,AS的上升沿將AD0~AD7上出現(xiàn)的地址信息鎖存到DS12C887上,而下一個下降沿清除AD0~AD7上的地址信息,不論CS是否有效,DS12C887都將執(zhí)行該操作。
R/W—讀/寫輸入端。該引接腳有兩種工作模式,當(dāng)MOT接
VCC時,R/W工作在Motorola模式。此時該引腳的作用是區(qū)分讀操作還是寫操作,R/W高電平時為讀操作,R/W為低電平時為寫操作;當(dāng)MOT接GND時,該引腳工作在Intel模式,此時該引腳為寫允許輸入,此信號的上升沿鎖存數(shù)據(jù)。
DS—數(shù)據(jù)選擇或讀輸入腳。該引腳有兩種工作模式,當(dāng)MOT接
VCC時,選用Motorola模式,此時,每個總線周期后一部分的DS為高電平,稱為數(shù)據(jù)選通。在讀操作中,DS的上升沿使DS12C887將內(nèi)部數(shù)據(jù)送往總線AD0~AD7上,以供外部讀取。在寫操作中,DS的下降沿將使總線AD0~AD7上的數(shù)據(jù)鎖存在DS12C887中。當(dāng)MOT接GND時,選用Intel模式,此時該引腳是讀允許輸入引腳。
RESET—芯片復(fù)位引腳。
IRQ—中斷請求輸出。用作處理器的中斷申請輸入。只要引起中斷的狀態(tài)位置位,并且相應(yīng)中斷使能位也置位,IRQ將一直保持低電平,處理器程序通常讀取C存儲器來清除IRQ引腳輸出,RESET引腳也會清除未處理的中斷。沒有中斷發(fā)生時,IRQ為高阻狀態(tài),可將多個中斷器件接到一條IRQ總線上,只要它們均為漏極開路輸出即可。IRQ引腳為漏極開路輸出,需要使用一個外接上拉電阻與SQW—方波輸出引腳。當(dāng)供電電壓
VCC相連。
VCC大于4.25V時,SQW引腳可輸出方波。
2.5 1602LCD液晶屏顯示電路設(shè)計
1602LCD液晶屏顯示電路如下圖2—5所示:
1602液晶為5V電壓驅(qū)動,帶背光,可顯示2行,每行16個字符,不能顯示漢字,內(nèi)置含128個字符的ASCII字符集字庫,只有并行接口,無串行接口。接口說明如下:(1)液晶1,2端為電源;15,16為背光電源;為防止直接加5V電壓燒壞背光燈,在15腳串接一個1K?電阻用于限流。
(2)液晶3端為液晶對比度調(diào)節(jié)端,通過一個10K?電位器接地來調(diào)節(jié)液晶顯示對比度。首次使用時,在液晶上電狀態(tài)下,調(diào)節(jié)至液晶上面一行顯示出黑色小格為止。
(3)液晶4端為向液晶控制器寫數(shù)據(jù)/寫命令選擇端,接單片機(jī)的P3.5口。
(4)液晶5端為讀/寫選擇端,因為我們不從液晶讀取任何數(shù)據(jù),只向其寫入命令和顯示數(shù)據(jù),因此此端始終選擇為寫狀態(tài),即低電平接地。
(5)液晶6端為使能信號,是操作時必須的信號,接單片機(jī)的P3.4口。
2.6 蜂鳴器電路設(shè)計
蜂鳴器電路如下圖2—6所示:
蜂鳴器電路接在單片機(jī)的P2.3引腳上,當(dāng)該引腳一個低電平,三極管導(dǎo)通,蜂鳴器發(fā)出聲音作為鬧鈴。
2.7 按鍵調(diào)整電路設(shè)計
按鍵調(diào)整電路如下圖2—7所示:
四個獨(dú)立鍵盤均采用查詢方式,將按鍵的一端接地,另一端各接一根輸入線直接與STC89C52的I/O口相連。當(dāng)按鍵閉合時,相當(dāng)于該I/O口通過按鍵與地相連,變成低電平,單片機(jī)通過檢測I/O口的電平狀態(tài),即可識別出按下的鍵。通過四個鍵實現(xiàn)參數(shù)的調(diào)節(jié),S1為功能選擇鍵,S2為數(shù)值增大鍵,S3為數(shù)值減小鍵,S4為鬧鐘查看鍵。
三、軟
件
設(shè)
計
3.1 系統(tǒng)程序流程圖設(shè)計
流程圖1:實驗主程序流程圖
流程圖2:定時中斷程序流程圖
流程圖3:調(diào)時功能流程圖
3.2 程序設(shè)計
#include
//延時函數(shù) {
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);} void di()
//蜂鳴器報警聲音 {
beep=0;
delay(100);
beep=1;} void
write_com(uchar com)
//寫液晶命令函數(shù)
{
rs=0;
lcden=0;
P0=com;
delay(3);
lcden=1;
delay(3);
lcden=0;} void write_data(uchar
data)
//寫液晶數(shù)據(jù)函數(shù) {
rs=1;
lcden=0;
P0=data;
delay(3);
lcden=1;
delay(3);
lcden=0;} void
init()
//初始化函數(shù) {
uchar
num;
EA=1;
//打開總中斷
EX1=1;
//開外部中斷1
IT1=1;
//設(shè)置負(fù)跳變沿觸發(fā)中斷
flag1=0;
//變量初始化
t0_num=0;
s1num=0;
week=1;
dula=0;
//關(guān)閉數(shù)碼管顯示
wela=0;
lcden=0;
rd=0;/*以下幾行在首次設(shè)置DS12C887時使用,以后不必再寫入
write_ds(0x0A,0x20);
//打開振蕩器
write_ds(0x0B,0x26);
//設(shè)置24小時模式,數(shù)據(jù)二進(jìn)制格式,開啟鬧鈴中斷
set_time();
//設(shè)置上電默認(rèn)時間
---------------*/
write_com(0x38);
//1602液晶初始化
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)
//寫入液晶固定部分顯示
{
write_data(table[num]);
delay(1);}
write_com(0x80+0x40);
for(num=0;num<11;num++)
{
write_data(table1[num]);
delay(1);
} } void write_sfm(uchar add,char data)
{ //1602液晶刷新時分秒函數(shù),4為時,7為分,10為秒
char
shi,ge;
shi=data/10;
ge=data%10;
write_com(0x80+0x40+add);
write_data(0x30+shi);
write_data(0x30+ge);} void
write_nyr(uchar add,char
data)
{
//1602液晶刷新年月日函數(shù),3為年,6為月,9為日
char
shi,ge;
shi=data/10;
ge=data%10;
write_com(0x80+add);
write_data(0x30+shi);
write_data(0x30+ge);void
write_week(char we)
//寫液晶星期顯示函數(shù) {
write_com(0x80+12);
switch(we)
{
case 1:
write_data('M');delay(5);
write_data('O');delay(5);
write_data('N');
break;
case 2:
write_data('T');delay(5);
write_data('U');delay(5);
write_data('E');
break;
case 3:
write_data('W');delay(5);
write_data('E');delay(5);
write_data('D');
break;
case 4:
write_data('T');delay(5);
write_data('H');delay(5);
write_data('U');
break;
case 5:
write_data('F');delay(5);
write_data('R');delay(5);
write_data('I');
break;
case 6:
write_data('S');delay(5);
write_data('A');delay(5);
write_data('T');
break;
case 7:
write_data('S');delay(5);
write_data('U');delay(5);
write_data('N');
break;
} } void keyscan(){ if(flag_ri==1){
//這里用來取消鬧鐘報警,按任意鍵取消報警
if((s1==0)||(s2==0)||(s3==0)||(s4==0))
{
delay(5);
if((s1==0)||(s2==0)||(s3==0)||(s4==0))
{
while(!(s1&&s2&&s3&s&s4));di();
flag_ri=0;
//清除報警標(biāo)志
}
}
}
if(s1==0)
//檢測s1
{
delay(5);
if(s1==0)
{
s1num++;
//記錄按下次數(shù)
if(flag1==1)
if(s1num==4)
s1num=1;
flag=1;
while(!s1);di();
switch(s1num)
{
//光標(biāo)閃爍點(diǎn)定位
case 1: write_com(0x80+0x40+10);
write_com(0x0f);
break;
case 2: write_com(0x80+0x40+7);
break;
case 3: write_com(0x80+0x40+4);
break;
case 4: write_com(0x80+12);
break;
case 5: write_com(0x80+9);
break;
case 6: write_com(0x80+6);
break;
case 7: write_com(0x80+3);
break;
case 8: s1num=0;
write_com(0x0c);
flag=0;
write_ds(0,miao);
write_de(2,fen);
write_ds(4,shi);
write_ds(6,week);
write_ds(7,day);
write_ds(8,month);
write_ds(9,year);
break;
}
}
}
if(s1num!=0)
//只有當(dāng)s1按下后,才檢測s2和s3
{
if(s2==0)
{
delay(1);
if(s2==0)
while(!s2);di();
switch(s1num)
{
//根據(jù)功能鍵次數(shù)調(diào)節(jié)相應(yīng)數(shù)值
case 1: miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+10);
break;
case 2: fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
break;
case 3: shi++;
case 4:
case 5:
case 6:
case 7:
}
}
}
if(s3==0)
{
delay(1);
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+4);
break;week++;
if(week==8)
week=1;
write_week(week);
write_com(0x80+12);
break;day++;
if(day==32)
day=1;
write_nyr(9,day);
write_com(0x80+9);
break;month++;
if(month==13)
month=1;
write_nyr(6,month);
write_com(0x80+6);
break;year++;
if(year==100)
year=0;
write_nyr(3,year);
write_com(0x80+3);
break;
if(s3==0)
{
while(!s3);di();
switch(s1num)
{
//根據(jù)功能鍵次數(shù)調(diào)節(jié)相應(yīng)數(shù)值
case 1: miao--;
if(miao==-1)
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
break;
case 2: fen--;
if(fen==-1)
fen=59;
write_sfm(7,fen);
write_com(0x80+0x40+7);
break;
case 3: shi--;
if(shi==-1)
shi=23;
write_sfm(4,shi);
write_com(0x80+0x40+4);
break;
case 4: week--;
if(week==0)
week=7;
write_week(week);
write_com(0x80+12);
break;
case 5: day--;
if(day==0)
day=31;
write_nyr(9,day);
write_com(0x80+9);
break;
case 6: month--;
if(month==0)
month=12;
write_nyr(6,month);
write_com(0x80+6);
break;
case 7: year--;
if(year==-1)
year=99;
write_nyr(3,year);
write_com(0x80+3);
break;
}
}
}
}
if(s4==0)
//檢測s4
{
delay(5);
if(s4==0)
{
flag1=~flag1;
while(!s4);di();
if(flag1==0)
{
//退出鬧鐘設(shè)置時保存數(shù)值
flag=0;
write_com(0x80+0x40);
write_data(' ');
write_data(' ');
write_com(0x0c);
write_ds(1,miao);
write_ds(3,fen);
write_ds(5,shi);
}
else
{
//進(jìn)入鬧鐘設(shè)置
read_alarm();
//讀取原始數(shù)據(jù)
miao=amiao;
//重新賦值用以按鍵調(diào)節(jié)
fen=afen;
shi=ashi;
write_com(0x80+0x40);
write_data('R');
//顯示標(biāo)志
write_data('i');
write_com(0x80+0x40+3);
write_sfm(4,ashi);
//送液晶顯示鬧鐘時間
write_sfm(7,afen);
write_sfm(10,amiao);
}
}
} } void write_ds(uchar add,uchar
data){
//寫12C887函數(shù)
dscs=0;
dsas=1;
dsds=1;
dsrw=1;
P0=add;
//先寫地址
dsas=0;
dsrw=0;
P0=data;
//再寫數(shù)據(jù)
dsrw=1;
dsas=1;
dscs=1;} uchar
read_ds(uchar add){
//讀12C887函數(shù)
uchar
ds_data;
dsas=1;
dsds=1;
dsrw=1;
dscs=0;
P0=add;
//先寫地址
dsas=0;
dsds=0;
P0=0xff;
ds_data=P0;
//再讀數(shù)據(jù)
dsds=1;
dsas=1;
dscs=1;
return ds_data;} /*---首次操作12C887時給予寄存器初始化-----void set_time(){
//首次上電初始化時間函數(shù)
write_ds(0,0);
write_ds(1,0);
write_ds(2,0);
write_ds(3,0);
write_ds(4,0);
write_ds(5,0);
write_ds(6,0);
write_ds(7,0);
write_ds(8,0);
write_ds(9,0);}----------------------*/
void
read-alarm(){
//讀取12C887鬧鐘值
amiao=read_ds(1);
afen=read_ds(3);
ashi=read_ds(5);} void main()
//主函數(shù) {
init();
//調(diào)用初始化函數(shù)
while(1)
{
keyscan();
//按鍵掃描
if(flag_ri==1)
//當(dāng)鬧鐘中斷時進(jìn)入這里
{
di();
delay(100);
di();
delay(500);
}
if(flag==0&&flag1==0)
//正常工作時進(jìn)入這里
{
keyscan();
//按鍵掃描
year=read_ds(9);
//讀取12C887數(shù)據(jù)
month=read_ds(8);
day=read_ds(7);
week=read_ds(6);
shi=read_ds(4);
fen=read_ds(2);
miao=read_ds(0);
write_sfm(10,miao);
//送液晶顯示
write_sfm(7,fen);
write_sfm(4,shi);
write_week(week);
write_nyr(3,year);
write_nyr(6,month);
write_nyr(9,day);
}
} } void
exter()interrupt 2
//外部中斷1服務(wù)程序 {
uchar
c;
//進(jìn)入中斷表示鬧鐘時間到
flag_ri=1;
//設(shè)置標(biāo)志位,用于大程序中報警提示
c=read_ds(0x0c);
//讀取12C887的C寄存器表示響應(yīng)了中斷 }
_______________________________________________________________________________ 以下為define.h源代碼:
_______________________________________________________________________________ #define uchar unsigned char #define uint unsigned int sbit dula=P2^6;sbit wela=P2^7;sbit rs=P3^5;sbit lcden=P3^4;sbit s1=P3^0;
//功能鍵 sbit s2=P3^1;
//增大鍵 sbit s3=P3^2;
//減小鍵 sbit s4=P3^6;
//鬧鐘查看鍵 sbit rd=P3^7;sbit beep=P2^3;
//蜂鳴器 sbit dscs=P1^4;sbit dsas=P1^5;sbit dsrw=P1^6;sbit dsds=P1^7;sbit dsirq=P3^3;bit flag1,flag_ri;
//定義兩個位變量
uchar count,s1num,flag,t0_num;
//其他變量定義 char miao,shi,fen,year,month,day,week,amiao,afen,ashi;uchar code
table[]=“201-
”;
//液晶固定顯示內(nèi)容 uchar code
table1[]=“
:
:
”;
void write_ds(uchar,uchar);
//函數(shù)申明 void set_alarm(uchar,uchar,uchar);void read_alarm();uchar read_ds(uchar);void set_time();
四、心
得
體
會
在本次電子時鐘設(shè)計中對單片機(jī)的內(nèi)部結(jié)構(gòu)有了一定的了解,熟悉了各個引腳的功能,同時熟知了1602LCD液晶、DS12C887時鐘芯片的使用,以及各種電路的功能。
通過此次課程設(shè)計,無論是從軟件方面還是硬件方面,都進(jìn)一步學(xué)習(xí)和鞏固了程序的總體設(shè)計和單片機(jī)的應(yīng)用。在軟件方面,進(jìn)一步熟悉了各條指令的功能及用法,定時、中斷的用法,更深一步學(xué)習(xí)了用C語言編寫實現(xiàn)電子時鐘的功能。在硬件方面,進(jìn)一步熟悉并使用了keil軟件,在keil中編程,調(diào)試,運(yùn)行;對電路的一些基本結(jié)構(gòu)和設(shè)計有了更深一步的了解。在整個設(shè)計過程中,雖然出現(xiàn)了很多問題,有時確實叫人很心煩,但在發(fā)現(xiàn)問題后努力去解決,并獲得成功,這時會感到無比的快樂和具有成就感。只有自己動手去做,去應(yīng)用,才能將學(xué)到的知識變成自己的。
程序不要光看不寫,一定要自己寫一次。最開始的時候,可能自己啥都不懂,這時可以抄人家的程序過來。但在抄的時候一定要看看每一句是干什么用的,來達(dá)到什么目的,運(yùn)行后有什么后果,看明白了之后,就要自己寫一次。此時會發(fā)現(xiàn),原來看明白別人的程序很容易,但到自己寫的時候卻一句也寫不出來,這就是差距。
單片機(jī)提高重在實踐,想要學(xué)好單片機(jī),軟件編程必不可少。但是熟悉硬件對于學(xué)好單片機(jī)也是非常重要的。如何學(xué)習(xí)好硬件,動手實踐是必不可少的。我們可以通過自己動手做一個自己的電子制作,通過完成它,以提高對一些芯片的了解和熟練運(yùn)用。這樣我們就可以多了解一些芯片的結(jié)構(gòu)。
我學(xué)習(xí)的目標(biāo)是希望在若干年以后能夠獨(dú)立設(shè)計一個復(fù)雜的系統(tǒng),包括硬件電路和軟件部分。總之,通過這次電子技術(shù)設(shè)計我學(xué)到了許多,似乎離自己的目標(biāo)又近了一步。
參
考
文
獻(xiàn)
[1]郭天祥.51單片機(jī)C語言教程.電子工業(yè)出版社.2009 [2]譚浩強(qiáng).C程序設(shè)計.清華大學(xué)出版社.1991 [3]孫育才 王榮興
孫華芳.ATMEL新型AT89S52系列單片機(jī)及其應(yīng)用.清華大學(xué)出版社.2006 [4]謝維成.單片機(jī)原理及應(yīng)用與51程序設(shè)計.清華大學(xué)出版社.2006
[5]鮑宏亞.MCS—51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計及實用技術(shù).中國宇航出版社.2005 [6]趙文博
劉文濤.單片機(jī)語言C51程序設(shè)計.人民郵電出版社.2006 [7]求是科技.8051系列單片機(jī)C程序設(shè)計.人民郵電出版社.2006
第五篇:基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2014屆本科生畢業(yè)設(shè)計
分類號:TP368.1
題目:基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
姓 名: 張建猛 學(xué) 號 : 2010080870 學(xué) 院: 機(jī)械與電子工程學(xué)院 專 業(yè): 自動化 指導(dǎo)教師職稱: 胡波 劉明
指導(dǎo)教師職稱: 助教(碩士)工程師
2014-05-11
摘 要
本文采用AT89C51單片機(jī)芯片為核心控制器件設(shè)計的交通燈控制器,該系統(tǒng)主要包括單片機(jī)最小系統(tǒng),按鍵,數(shù)碼管顯示,交通燈演示系統(tǒng)。系統(tǒng)主要具有有人行道,交通燈的基本功能,倒計時,緊急情況處理,根據(jù)具體情況手動控制等功能。通過AT89C51并接數(shù)碼管和發(fā)光二極管來實現(xiàn)交通燈的變化規(guī)律,P1口設(shè)置紅,綠燈點(diǎn)亮?xí)r間功能的實現(xiàn);紅綠燈循環(huán)點(diǎn)亮,倒計時剩余10秒時黃燈閃爍警示。本系統(tǒng)的研發(fā)周期短,可靠性高,實用性,操作簡單,維護(hù)方便,擴(kuò)展功能強(qiáng)大。本系統(tǒng)軟硬件相結(jié)合,通過Proteus軟件仿真,基本實現(xiàn)了交通信號燈的模擬。
關(guān)鍵詞:AT89C51;數(shù)碼管;交通燈控制器
ABSTRACT In this paper, AT89C51 chip as the core control device design traffic light controller, the system includes smallest single-chip system, keyboard, digital display, traffic lights demonstration system.System mainly has a sidewalk, the basic functions of traffic lights, countdown, emergency treatment, according to the specific circumstances of manual control and other functions.And connected via AT89C51 LED digital tube and realized traffic lights change, P1 port settings of red, green lighting time function is implemented;traffic light cycle light, countdown 10 seconds remaining yellow flashing warning.The system development cycle is short, high reliability, practicality, simple operation, easy maintenance, expansion and powerful.This system combines hardware and software, Through the Proteus Software Simulation,the basic realization of traffic lights simulation.Keywords: AT89C51;System;Digital pipe;Traffic light controller
目錄
緒
論...........................................................................................................................1 1.整體方案設(shè)計...........................................................................................................2 1.1 方案分析.........................................................................................................2 1.2 方案確立.........................................................................................................3 2.系統(tǒng)的硬件設(shè)計.......................................................................................................3
2.1設(shè)計原理及方法..............................................................................................3 2.2 AT89C51單片機(jī)最小系統(tǒng)..............................................................................4 2.2.1 復(fù)位電路..............................................................................................4 2.2.2 時鐘電路..............................................................................................5 2.2.2 EA腳的功能及接法.............................................................................6 2.3其它硬件模塊介紹及連接..............................................................................7
2.3.1 倒計時顯示模塊.................................................................................7
2.3.2 交通燈顯示模塊................................................................................8
2.3.3 按鍵控制模塊......................................................................................9 2.3.4 電源模塊............................................................................................10 3.系統(tǒng)的軟件設(shè)計.....................................................................................................10
3.1系統(tǒng)相關(guān)參數(shù)計算........................................................................................10 3.1.1 T0的計數(shù)初值...................................................................................10 3.1.2 倒計時顯示的理論分析....................................................................10 3.1.2 交通燈狀態(tài)顯示的理論分析............................................................11 3.2系統(tǒng)主程序設(shè)計............................................................................................11 4.系統(tǒng)的 Proteus軟件仿真....................................................................................12 4.1 Proteus仿真圖............................................................................................12 4.2 Proteus仿真的結(jié)果分析............................................................................12 結(jié)束語.........................................................................................................................14 參考文獻(xiàn).....................................................................................................................14 致 謝.........................................................................................................................15 附錄:程序源代碼.....................................................................................................16
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
緒 論
隨著人口的迅速增長,道路資源的有限性和交通工具爆炸性的發(fā)展,城市交通正面臨著嚴(yán)峻考驗,因此造成日益嚴(yán)重的交通問題,每天的交通擁堵成了家常便飯但又不得不忍受。在這種情況下,與我國城市道路交通的實際情況相結(jié)合,開發(fā)出適合我們自身特點(diǎn)的智能信號燈控制系統(tǒng)已成為一個主要的任務(wù)。一個好的交通燈控制系統(tǒng),將給道路擁堵,違章行駛等方面給予技術(shù)創(chuàng)新。隨著電子技術(shù)的發(fā)展,采用單片機(jī)技術(shù),能夠智能管理交通燈,已成為目前廣泛使用的方法。
在人類的生活,工作環(huán)境中,交通扮演著極其重要的角色,人們的出行與交通時時刻刻打著交道。城市交通控制系統(tǒng)是基于城市交通信號控制技術(shù)為主導(dǎo)的發(fā)展,與汽車行業(yè)的發(fā)展并行。在其發(fā)展的不同階段,由于交通出現(xiàn)的各種矛盾,人們總是試圖把各個歷史階段的最新科技成果應(yīng)用到交通自動控制中,從而促進(jìn)交通自動控制技術(shù)不斷發(fā)展。
早在1850年,城市交叉路口處安全和擁堵問題引起人們的關(guān)注,全球第一個自動交通燈誕生,打開城市交通控制的序幕。在1868年,英國工程師娜奕特在倫敦西部威斯敏斯特街口安裝一個紅色和綠色煤氣照明燈,用來控制交叉路口的馬車通行,但一次煤氣爆炸事故致使交通信號燈消失了近半個世紀(jì)。1914年,美國克利夫蘭,紐約和芝加哥重新出現(xiàn)的交通信號燈,他們使用電動驅(qū)動,與現(xiàn)在意義的交通信號燈幾乎是一樣的。隨著時代的發(fā)展,各種運(yùn)輸方式和交通管制的需要,第一光名副其實的三色燈(紅,黃,綠)出生于1918年。它的周圍是三色圓形投影機(jī)被安裝在紐約市五號街一座高塔上,由于它的誕生,城市交通大大改善。
在近一個世紀(jì)的發(fā)展,道路交通信號控制系統(tǒng)經(jīng)歷了一個手動到自動,從固定到靈活配時,從無感應(yīng)控制到有感應(yīng)控制,從單點(diǎn)控制到干線控制,從區(qū)域控制到網(wǎng)絡(luò)控制的長期過程。
交通網(wǎng)絡(luò)是城市的動脈,是一個城市的生活經(jīng)濟(jì)水平,工業(yè)文明的象征。交通關(guān)系到人民對財產(chǎn),安全和時間相關(guān)的利益。憑借優(yōu)良科學(xué)的交通控制技術(shù)對資源物流和人們出行是非常有價值的,確保交通安全線的暢通,才能確保舒適的出行,物流按時到位,甚至是生命通道延伸。為了確保安全,高效的交通秩序,除了制定一系列的交通規(guī)則,而且還必須通過一定的技術(shù)手段來實現(xiàn)。隨著單片機(jī)和傳感器技術(shù)的迅速發(fā)展,自動檢測領(lǐng)域發(fā)生了翻天覆地的變化,交通自動檢測控制研究已經(jīng)取得了顯著的進(jìn)步,必將以其優(yōu)良的性能價格比,逐步取代傳統(tǒng)的交通控制措施。
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
1.整體方案設(shè)計
1.1 方案分析
交通燈一般設(shè)在城市道路的十字路口,可以分為東西方向(主干道)和南北方向(次干道),東西南北四個路口均設(shè)有有紅綠黃3種燈和1個二位數(shù)碼顯示管。在某一時刻規(guī)定只有一個方向可以通行,另一方向被禁行,狀態(tài)經(jīng)過一定的過渡時間,將通行方向和禁行方向相互對換。其具體狀態(tài)如下圖所示。(白色表示滅)。通過具體的路口交通燈狀態(tài)的演示分析我們可以把這四個狀態(tài)歸納如圖1:
圖1 交通燈狀態(tài)圖
·東西方向(主干道)紅燈滅,同時綠燈亮,南北方向(次干道)黃燈滅,同時紅燈亮,倒計時顯示60秒。在此種狀態(tài)下,東西方向(主干道)允許通行,南北方向(次干道)禁止通行。
·東西方向(主干道)綠燈滅,同時黃燈閃爍,南北方向(次干道)紅燈亮,倒計時顯示10秒。在此種狀態(tài)下,除了正在通行中的車輛外,其他所有的車輛都應(yīng)該等待狀態(tài)轉(zhuǎn)換。
·南北方向(次干道)紅燈滅,同時綠燈亮,東西方向(主干道)黃燈滅,同時紅燈亮,倒計時50秒。在此種狀態(tài)下,東西方向(主干道)禁止通行,南北向允許通行。
·南北方向(次干道)綠燈滅,同時黃燈閃爍,東西方向(主干道)紅燈亮,倒計時10秒。在此種狀態(tài)下,除了正在通行中的車輛外,其他所有車輛都應(yīng)該等待狀態(tài)轉(zhuǎn)換。
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
1.2 方案確立
本設(shè)計系統(tǒng)以AT89C51單片機(jī)為控制核心,連接成最小系統(tǒng),由倒計時顯示模塊、交通燈顯示模塊、按鍵開關(guān)控制模塊組成。軟件部分使用的是C 語言編程,由軟件設(shè)置交通燈的初始時間,東西方向(主干道)通行60秒,南北方向(支干道)通行50秒,數(shù)碼管采用動態(tài)顯示,P0口送字形碼,P2口送字位選通信號,通過單片機(jī)的P1口控制各種信號燈的點(diǎn)亮與熄滅,采用中斷方式實現(xiàn)各按鍵的功能。
2.系統(tǒng)的硬件設(shè)計
2.1 設(shè)計原理及方法
本設(shè)計采用模塊化的分層次設(shè)計方法,以單片機(jī)AT 89C 51為控制核心,連接成最小系統(tǒng),由倒計時顯示模塊、交通燈顯示模塊、按鍵開關(guān)控制模塊等組成。系統(tǒng)的總體框圖如下所示。
圖2 交通燈控制器框圖
本系統(tǒng)采用AT89C51單片機(jī)及外圍器件構(gòu)成最小控制系統(tǒng),12個發(fā)光二極管分成4組紅綠黃三色燈構(gòu)成信號燈指示模塊,4個數(shù)碼管東西南北方向各一個構(gòu)成倒計時顯示模塊,通過四個按鍵K0、K1、K2、K3模擬控制交通燈東西通行,南北通行,返回,緊急情況各個交通燈工作情況之間相互轉(zhuǎn)化。
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.2 AT89C51單片機(jī)最小系統(tǒng)
單片機(jī)最小系統(tǒng)一般有晶振、復(fù)位、電源、系統(tǒng)的輸入控制、輸出顯示,以及其他外圍模塊(如通信、數(shù)據(jù)采集等)等模塊組成。2.2.1 復(fù)位電路
單片機(jī)復(fù)位電路原理是在單片機(jī)的復(fù)位引腳RST上外接電阻和電容,實現(xiàn)上電復(fù)位。當(dāng)復(fù)位電平持續(xù)兩個機(jī)器周期以上時復(fù)位有效。復(fù)位電平的持續(xù)時間必須大于單片機(jī)的兩個機(jī)器周期。具體數(shù)值可以由RC電路計算出時間常數(shù)。復(fù)位電路由手動復(fù)位和上電復(fù)位兩部分組成。
(1)上電復(fù)位電路要求接通電源后,通過外部電容充電來實現(xiàn)單片機(jī)自動復(fù)位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時間(2個機(jī)器周期),單片機(jī)就可以進(jìn)行復(fù)位操作。
(2)手動復(fù)位:手動復(fù)位就是在復(fù)位電容上并聯(lián)一個開關(guān),當(dāng)開關(guān)按下時電容被放電、RST也被拉到高電平,而且由于電容的充電,會保持一段時間的高電平來使單片機(jī)復(fù)位。單片機(jī)復(fù)位期間不產(chǎn)生ALE和PSEN信號,即ALE=1和PSEN=1。這表明單片機(jī)復(fù)位期間不會有任何取指操作。
圖3 單片機(jī)手動復(fù)位電路
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.2.2 時鐘電路
單片機(jī)系統(tǒng)里都有晶振,在單片機(jī)系統(tǒng)里晶振作用非常大,全稱叫晶體振蕩器,它結(jié)合單片機(jī)內(nèi)部電路產(chǎn)生單片機(jī)所需的時鐘頻率,單片機(jī)晶振提供的時鐘頻率越高,那么單片機(jī)運(yùn)行速度就越快,單片機(jī)的一切指令的執(zhí)行都是建立在單片機(jī)晶振提供的時鐘頻率。單片機(jī)晶振的作用是為系統(tǒng)提供基本的時鐘信號。單片機(jī)的時鐘電路由外接的一只晶振和兩只起振電容,以及單片機(jī)內(nèi)部的時鐘電路組成,晶振的頻率越高,單片機(jī)處理數(shù)據(jù)的速度越快,系統(tǒng)功耗也會相應(yīng)增加,穩(wěn)定性也會下降。
單片機(jī)的時鐘電路設(shè)計有兩種方式,一種是內(nèi)部時鐘方式,一種是外部時鐘方式。
在內(nèi)部時鐘方式下單片機(jī)內(nèi)部的高增益、反相放大器通過XTAL1、XTAL2外接作為反饋元件的外部晶體管振蕩器與電容組成的并聯(lián)諧振回路構(gòu)成一個穩(wěn)定的自激振蕩器,向內(nèi)部時鐘電路提供振蕩時鐘。振蕩器的頻率主要取決于晶體的振蕩頻率。外部時鐘方式是把外部已有的時鐘信號引入到單片機(jī)內(nèi)。此方式常用于多片單片機(jī)同時工作,以便于各單片機(jī)的同步。一般要求外部信號高電平的持續(xù)時間大于20μs,且為頻率低于12MHz的方波。本設(shè)計采用內(nèi)部時鐘方式,單片機(jī)系統(tǒng)常用的晶振頻率有6MHz、11.0592MHz、12MHz、本系統(tǒng)采用11.0592MHz晶振,電容選22pF或30pF均可。
圖4 單片機(jī)時鐘電路
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.2.2 EA腳的功能及接法
AT89C51 單片機(jī)的EA/VPP(31 腳)是內(nèi)部和外部程序存儲器的選擇管腳。當(dāng)EA 保持高電平時,單片機(jī)訪問內(nèi)部程序存儲器;當(dāng)EA 保持低電平時,則不管是否有內(nèi)部程序存儲器,只訪問外部存儲器。由于現(xiàn)在單片機(jī)內(nèi)部的flash容量都很大,因此基本都是從內(nèi)部的存儲器讀取程序,即不需要外接ROM來存儲程序,因此,EA腳必須接高電平。
圖5 單片機(jī)最小系統(tǒng)
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.3 其它硬件模塊介紹及連接 2.3.1 倒計時顯示模塊
系統(tǒng)要求南北和東西方向的信號燈時間不一樣,所以就利用單片機(jī)的P0口送出數(shù)據(jù)的段碼,位選信號用P2口送出,用動態(tài)掃描的方法顯示東西、南北的倒計時間。7段數(shù)碼管一般由8個發(fā)光二極管組成,其中由7個細(xì)長的發(fā)光二極管組成數(shù)字顯示,另外一個圓形的發(fā)光二極管顯示小數(shù)點(diǎn)。當(dāng)發(fā)光二極管導(dǎo)通時,相應(yīng)的一個點(diǎn)或一個筆畫發(fā)光。控制相應(yīng)的二極管導(dǎo)通,就能顯示出各種字符。本設(shè)計采用共陰數(shù)碼管,需要接上470歐上拉電阻以提供足夠大的電流來驅(qū)動數(shù)碼管,數(shù)碼管的每段的電流是約10毫安。
圖6 數(shù)碼管顯示模塊
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.3.2 交通燈顯示模塊
本系統(tǒng)利用單片機(jī)的P1口來驅(qū)動和控制各種信號燈的燃亮和燃亮?xí)r間,在實際中,交通燈的信號燈需要用高電壓控制,在這里我們只是模擬一下它的控制信號,所以我們就只用單片機(jī)的信號引腳直接來控制發(fā)光二極管。發(fā)光二極管是半導(dǎo)體二極管的一種,可以把電能轉(zhuǎn)化成光能,常簡寫為LED。發(fā)光二極管與普通二極管一樣是由一個PN結(jié)組成,也具有單向?qū)щ娦浴.?dāng)給發(fā)光二極管加上正向電壓后,從P區(qū)注入到N區(qū)的空穴和由N區(qū)注入到P區(qū)的電子,在PN結(jié)附近數(shù)微米內(nèi)分別與N區(qū)的電子和P區(qū)的空穴復(fù)合,產(chǎn)生自發(fā)輻射的熒光。不同的半導(dǎo)體材料中電子和空穴所處的能量狀態(tài)不同。當(dāng)電子和空穴復(fù)合時釋放出的能量多少不同,釋放出的能量越多,則發(fā)出的光的波長越短。常用的是發(fā)紅光、綠光或黃光的二極管。發(fā)光二極管的反向擊穿電壓約5伏。它的正向伏安特性曲線
很陡,使用時必須串聯(lián)限流電阻以控制通過管子的電流。
圖7 交通燈模塊
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.3.3 按鍵控制模塊
本系統(tǒng)設(shè)置了有4個鍵:K0鍵,K1鍵,K2鍵,K3鍵。每個按鍵一端接地,另一端接上二極管。低電平有效,當(dāng)按鍵按下端口接地,單片機(jī)捕獲到低電平,從而得到相應(yīng)的輸入信息。本系統(tǒng)采用了二極管做開關(guān),是為了防止有一按鍵被按下3根線同時被低,中斷無效。二極管在正向電壓作用下電阻很小,處于導(dǎo)通狀態(tài),相當(dāng)于一只接通的開關(guān);在反向電壓作用下,電阻很大,處于截止?fàn)顟B(tài),如同一只斷開的開關(guān)。利用二極管的開關(guān)特性,可以組成各種邏輯電路。
程序開始運(yùn)行先東西段通行、南北段禁止60s,后南北段通行、東西段禁止50s,依此循環(huán)。系統(tǒng)分三種工作模式:南北通行模式、東西通行模式、返回模式、緊急情況模式,并且通過四個按鍵K0、K1、K2、K3實現(xiàn)之間的相互轉(zhuǎn)化。
圖8 按鍵控制模塊
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.3.4 電源模塊
單片機(jī)工作時需要的+5V電壓,所以在設(shè)計電源電路時,需要一個電子元件能提供+5V電壓,由于78L05能夠提供5V電壓的三端穩(wěn)壓電源,78L05一腳為電源輸入端,二腳為公共接地端,三腳即為我們所需要的+5V電壓輸出端.本系統(tǒng)采用典型的78L05提供電壓的電路,即在78L05的1腳和公共接地端(即2腳)之間接入0.3μF的電容,在公共接地端和三腳+5V電壓輸出端之間接入0.1μF的電容.圖9 電源模塊
3.系統(tǒng)的軟件設(shè)計
3.1 系統(tǒng)相關(guān)參數(shù)計算 3.1.1 T0的計數(shù)初值
T0的計數(shù)初值:X=216-12*50*1000/12=15536=3CB0H 3.1.2 倒計時顯示的理論分析
倒計時顯示的理論分析:利用定時器中斷,設(shè)TH0=TH1=(65536-50000)/256,即每0.05秒中斷一次。每到第20次中斷即過了20*0.05秒=1秒時,使時間的計數(shù)值減1,便實現(xiàn)了倒計時的功能。
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
3.1.2 交通燈狀態(tài)顯示的理論分析
狀態(tài)燈顯示的理論分析:黃燈閃爍同樣可以利用定時器中斷。每到第10次中斷即過了10*0.05秒=0.5秒時,使黃燈標(biāo)志位反置,即可讓黃燈1秒閃爍一次。
3.2 系統(tǒng)主程序設(shè)計
本系統(tǒng)采用AT89C51單片機(jī)實現(xiàn)交通燈的控制,程序的編寫用C語言來完成。系統(tǒng)控制程序可以分為若干模塊:初始化程序,按鍵開關(guān)控制程序,交通燈轉(zhuǎn)換控制程序,LED數(shù)碼管顯示程序,按鍵消抖動程序,延時程序,中斷服務(wù)子程序等。系統(tǒng)相應(yīng)的程序流程如圖所示。
圖10 程序流程圖
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
4.系統(tǒng)的 Proteus軟件仿真
4.1 Proteus仿真圖
交通燈控制系統(tǒng)的仿真是通過 proteus 軟件實現(xiàn)的交通燈控制系統(tǒng)仿真效果,仿真如下圖9所示:
圖11 仿真圖
4.2 Proteus仿真的結(jié)果分析
Proteus仿真實現(xiàn)東西方向和南北方向的十字路口的車輛相互交替通過,東西方向(主干道)每次通行時間設(shè)置為60秒、南北方向(次干道)通行時間設(shè)置為50秒。同時可以實現(xiàn)紅燈、黃燈、綠燈各狀態(tài)之間的相互轉(zhuǎn)換,黃燈閃爍時間設(shè)置為10秒,數(shù)碼管可以準(zhǔn)確進(jìn)行倒計時顯示。按下東西放行鍵K0,東西方向(主干道)綠燈亮,南北方向(次干道)紅燈亮;按下南北放行鍵K1,南北方向(次干道)綠燈亮,東西方向(主干道)紅燈亮;無論在任何時候按下返回鍵K2,該控制系統(tǒng)都將返回到初始狀態(tài);若遇緊急情況,按下緊急情況按鍵K3,東西南北方向都亮紅燈,實現(xiàn)主干道和支干道全部禁止通行;模擬了控制交通燈東西方向(主干道)通行,南北方向(次干道)通行,返回,緊急情況各個交通燈工作情況之間相互轉(zhuǎn)化,實現(xiàn)了課程設(shè)計的要求。宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
結(jié)束語
通過這次畢業(yè)設(shè)計,使我受益匪淺。使我在軟硬件結(jié)合的綜合運(yùn)用能力上有了進(jìn)一步的提升,對課堂上所學(xué)的單片機(jī)知識有了進(jìn)一步的加深和鞏固,在C語言的掌握方面也向前邁了一大步,在老師和同學(xué)的幫助下,提高了個人分析解決實際問題的綜合能力以及協(xié)同合作的能力,同時還鍛煉了我查閱資料的能力、動手能力、發(fā)現(xiàn)問題、解決問題的能力。面對電腦搜索資料,一點(diǎn)點(diǎn),一塊塊的電路慢慢拼成完整的電路經(jīng)過一次次的反復(fù)修改終于設(shè)計出了屬于自己的程序和電路,雖然還有諸多不足之處,不過使自己真正的體會到了探索事物的奧秘的快樂,同時自己也更深入的了解到了單片機(jī)的巨大的潛力,雖然有的時候可能遇到了一些困難,但是我最終解決了,我也會感覺到成功給我?guī)淼南矏偅抑牢以趯I(yè)知識上的掌握還是遠(yuǎn)遠(yuǎn)不夠的,我還要更加努力的去學(xué)習(xí),提高自己了實踐能力。
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
參考文獻(xiàn)
[1] 楊素行.模擬電子技術(shù)[M].北京:高等教育出版社.2006 [2] 余孟嘗.?dāng)?shù)字電子技術(shù)[M].北京:高等教育出版社. 2006 [3] 邱關(guān)源,羅先覺.電路[M].北京:高等教育出版社.2011 [4] 張毅剛.單片機(jī)原理及應(yīng)用[M].北京:高等教育出版社.2011 [5] 凌志浩.AT89C52單片機(jī)原理與接口技術(shù)[M].北京:高等教育出版社.2011 [6] 郭循釗,鄺帆.基于單片機(jī)的多功能交通燈控制系統(tǒng)設(shè)計與仿真實現(xiàn)[J].公路交通技術(shù).2010 [7] 劉日華,宋海.基于單片機(jī)的交通燈設(shè)計[J].科技致富向?qū)В?012 [9] 高文慶,呂英英. 基于AT89C51單片機(jī)的數(shù)字秒表設(shè)計[J]. 電腦知識與技術(shù).2012 [10] 譚浩強(qiáng)著,C程序設(shè)計 第三版[M].清華大學(xué)出版社.2006 [11] 彭虎,周佩玲. 微機(jī)原理與接口技術(shù)[M].電子工業(yè)出版社.2011 [12] GUO Haili.Design of Traffic Light Control System Based on Proteus and Single-chip Computer.Journal of Hengshui University[J].2012 [13] Tang Jing-nan, Qin Shen .Development and Examples of 51 Microcontroller's C Language [M].Posts & Telecom Press.2008
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
致 謝
本畢業(yè)設(shè)計在胡波和劉明老師的親切關(guān)懷和悉心指導(dǎo)以及同學(xué)們的熱心幫助下完成的。感謝他們在此次畢業(yè)設(shè)計過程中給予我的悉心指導(dǎo)與各方面的幫助,他們給了我許多非常有益的建議和意見,使我在思路上得到了很大的啟發(fā),從中認(rèn)識到了自己存在的不足,并且學(xué)到了很多非常寶貴的知識。同時也要感謝系里其它同學(xué)和我的朋友在設(shè)計中給我提供的幫助和支持。總的來說,這次設(shè)計給了我一個很好的鍛煉機(jī)會,讓我學(xué)到了很多東西,讓我將自己所掌握的理論知識切實運(yùn)用于工作和生活實踐中,這不僅有利于加深對書本知識的理解和鞏固,而且在很大程度上提高了我們在理論知識的指導(dǎo)下觀察、分析和解決問題的能力。最后,再次向所有幫助過我的老師、同學(xué)表示衷心的感謝!謝謝你們!宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
附錄:程序源代碼
/*#include
code 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
{ uchar i;
while(ms--){ {} for(i=0;i<200;i++)}
} /*中斷0處理程序*/ void int0(void)interrupt 0 { EA=0;/*CPU禁止響應(yīng)一切中斷*/ P1=0xF6,P0=duanma[0];/*東西南北方向均紅燈亮,P0口輸出0*/
{ P2=weima[0],P0=duanma[(SN_G+Y)%10];/*南北方向數(shù)碼管顯示可通行 while(1)/*無條件循環(huán)*/ 時間的個位*/ delayms(10);/*延時*/
P2=weima[1],P0=duanma[(SN_G+Y)/10];/*南北方向數(shù)碼管顯示可通行 delayms(10);/*延時*/ 時間的十位*/ P2=weima[2],P0=duanma[(WE_G+Y)%10];/*東西方向數(shù)碼管顯示可通行時間的個位*/ delayms(10);/*延時*/
P2=weima[3],P0=duanma[(WE_G+Y)/10];/*東西方向數(shù)碼管顯示可通行時間的十位*/
/*設(shè)置南北方向通行時間*/ if(K0==0)/*P3^7=0*/ { delayms(10);/*延時*/ 17 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
delayms(20);/*延時,把抖動的時間拋掉*/ if(K0==0)*/ { } SN_G++;/*南北方向綠燈時間+1*/ if(SN_G==100)SN_G=0;/*由于使用的是兩位數(shù)碼管,當(dāng)南北方向綠燈時間加到100后清零*/ }
} /*設(shè)置東西方向通行時間*/ if(K1==0)/*P3^6=0*/ { { while(K0==0)/*當(dāng)松開K0開關(guān)時,跳出空循環(huán),執(zhí)行后面的程序 delayms(20);/*延時,把抖動的時間拋掉*/ if(K1==0){ while(K1==0)/*當(dāng)松開K1開關(guān)時,跳出空循環(huán),執(zhí)行后面的程序*/ { } WE_G++;/*東西方向綠燈時間+1*/ if(WE_G==100)WE_G=0;/*由于使用的是兩位數(shù)碼管,當(dāng)東西方向綠燈時間加到100后清零*/ }
} /*返回*/ if(K3==0)/*P3^5=0*/ delayms(20);/*延時,把抖動的時間拋掉*/ if(K3==0){ { 18 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
while(K3==0)/*當(dāng)松開K3開關(guān)時,跳出空循環(huán),執(zhí)行后面的程
{ } count=0;/*清零*/ k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時間為南北方向綠燈通行序*/ 時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮?xí)r間*/ light();/*調(diào)用交通燈函數(shù)*/
led();/*調(diào)用數(shù)碼管函數(shù)*/ EA=1;/*CPU開放總中斷*/
break;/*跳出*/ }
} } } /*中斷1處理程序*/ {
P1=0xF6,P0=duanma[0];/*東西南北方向均紅燈亮,P0口輸出0*/ TR0=!TR0;/*計數(shù)器停止工作*/ {/*數(shù)碼管掃描程序,*/ P2=weima[0];/*顯示南北方向個位*/ delayms(10);/*延時*/ delayms(10);/*延時*/ P2=weima[2];/*顯示東西方向個位*/ delayms(10);/*延時*/ P2=weima[3];/*顯示東西方向十位*/ delayms(10);/*延時*/ /*返回*/ EA=0;/*CPU禁止響應(yīng)一切中斷*/ while(1)/*無條件循環(huán)*/
void int1(void)interrupt 2 P2=weima[1];/*顯示南北方向十位*/ if(K3==0)/*P3^5=0*/ { 19 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
delayms(20);/*延時,把抖動的時間拋掉*/
if(K3==0){ while(K3==0)/*當(dāng)松開K3開關(guān)時,跳出空循環(huán),執(zhí)行后面的程序*/
{ } TR0=!TR0;/*啟動計數(shù)器*/ EA=1;/*CPU開放總中斷*/
break;/*跳出*/
}
} } } /*鍵盤程序*/ void key(){ /*南北有車而東西無車*/ if(K0==0)/*K0=0*/ { delayms(20);/*延時,把抖動的時間拋掉*/ if(K0==0){ while(K0==0)/*當(dāng)松開K0開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/ { light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } count=0;/*清零*/ k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮?xí)r間*/ light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } }
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
/*南北無車而東西有車*/ if(K1==0)/*K1=0*/ { delayms(20);/*延時,把抖動的時間拋掉*/ if(K1==0){ while(K1==0)/*當(dāng)松開K1開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/ { light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } count=0;/*清零*/ k=1;/*南北方向不通車,東西方向通車*/ SN=WE_G+Y,WE=WE_G;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮?xí)r間,東西方向顯示時間為東西方向綠燈通行時間*/ light();/*調(diào)用交通燈函數(shù)*/
} /*定時函數(shù)*/ void time1(void)interrupt 1 {
TH0=0x3c;TL0=0xb0;/*計50000個數(shù),用時50ms*/ count++;/*自增運(yùn)算*/ if(count>=20)/*當(dāng)count大于或等于20時,歷時1s,執(zhí)行程序*/ { SN--;/*自減運(yùn)算*/ WE--;/*自減運(yùn)算*/ count=0;/*清零*/ if(SN==0||WE==0)/*當(dāng)SN=0或者WE=0時,執(zhí)行程序*/ { } led();/*調(diào)用數(shù)碼管函數(shù)*/ } k++;/*自增運(yùn)算*/ if(k>3)/*當(dāng)k>3時,執(zhí)行程序*/ 21 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
k=0;/*清零*/ switch(k)/*switch 語句*/ { case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮?xí)r間*/ case 1:SN=Y,WE=Y;break;/*東西南北方向顯示時間均為黃燈閃亮?xí)r間*/ case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮?xí)r間,東西方向顯示時間為東西方向綠燈通行時間*/ case 3:SN=Y,WE=Y;break;/*東西南北方向顯示時間均為黃燈閃亮?xí)r間*/ } } } /*交通燈函數(shù)*/ void light(){
P1=deng[k];/*交通燈對應(yīng)著k的值變化*/ if(P1==deng[1]&&count==0)/*當(dāng)南北方向亮黃燈且count=0時,執(zhí)行程序*/
{ TH1=(65536-50000)/256;
} TL1=(65536-50000)%256;/*延時50ms*/
P1=0xDF;/*南北方向黃燈熄滅,東西方向亮紅燈*/ } else if(P1==deng[3]&&count==0)/*當(dāng)東西方向亮黃燈且count=0時,執(zhí)行程序*/ { TH1=(65536-300000)/256;
TL1=(65536-300000)%256;/*延時50ms*/ P1=0xFB;/*南北方向亮紅燈,東西方向黃燈熄滅*/ 22 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
} } /*數(shù)碼管函數(shù)*/ void led(){
} /*主函數(shù)*/
void main(void){
init();/*調(diào)用程序初始化函數(shù)*/ { key();/*調(diào)用鍵盤程序*/ light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } while(1)/*無條件循環(huán)*/ P2=weima[0],P0=duanma[SN%10];/*顯示南北方向個位*/ P2=weima[1],P0=duanma[SN/10];/*顯示南北方向十位*/ delayms(10);/*延時*/ P2=weima[2],P0=duanma[WE%10];/*顯示東西方向個位*/ delayms(10);/*延時*/ P2=weima[3],P0=duanma[WE/10];/*顯示東西方向十位*/ delayms(10);/*延時*/ delayms(10);/*延時*/ } 23