基于AT89C51單片機(jī)的多功能電子萬年歷的設(shè)計(jì)
基于AT89C51單片機(jī)的多功能電子萬年歷的設(shè)計(jì),基于,at89c51,單片機(jī),多功能,電子,萬年歷,設(shè)計(jì)
單片機(jī)課程設(shè)計(jì)單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)課 題: 基于AT89C51單片機(jī)的多功能電子萬年歷的設(shè)計(jì) 姓 名: 班 級(jí): 學(xué) 號(hào): 指導(dǎo)老師: 日 期: 目錄一緒言3二系統(tǒng)總體方案設(shè)計(jì).3三硬件系統(tǒng)設(shè)計(jì):.4四系統(tǒng)軟件設(shè)計(jì).5五設(shè)計(jì)總結(jié)8六參考文獻(xiàn)8七附錄.9一緒論隨著電子技術(shù)的迅速發(fā)展,特別是隨大規(guī)模集成電路出現(xiàn),給人類生活帶來了根本性的改變。由其是單片機(jī)技術(shù)的應(yīng)用產(chǎn)品已經(jīng)走進(jìn)了千家萬戶。電子萬年歷的出現(xiàn)給人們的生活帶來的諸多方便。本文首先描述系統(tǒng)硬件工作原理,并附以系統(tǒng)結(jié)構(gòu)框圖加以說明,著重介紹了本系統(tǒng)所應(yīng)用的各硬件接口技術(shù)和各個(gè)接口模塊的功能及工作過程,其次,詳細(xì)闡述了程序的各個(gè)模塊和實(shí)現(xiàn)過程。萬年歷是采用數(shù)字電路實(shí)現(xiàn)對(duì).時(shí),分,秒.數(shù)字顯示的計(jì)時(shí)裝置,廣泛用于個(gè)人家庭,車站, 碼頭辦公室等公共場(chǎng)所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、定時(shí)開關(guān)烘箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等,但是所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究萬年歷及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。本系統(tǒng)采用了以廣泛使用的單片機(jī)技術(shù)為核心,軟硬件結(jié)合,使硬件部分大為簡(jiǎn)化,提高了系統(tǒng)穩(wěn)定性,并采用LED顯示電路、鍵盤電路,使人機(jī)交互簡(jiǎn)便易行。二系統(tǒng)總體方案設(shè)計(jì)1. 系統(tǒng)設(shè)計(jì)硬件框圖振蕩電路按鍵調(diào)節(jié)DS1302AT89C51LED顯示頻2. 實(shí)現(xiàn)的基本原理在本實(shí)驗(yàn)中,我引用了DS1302的時(shí),分,秒功能,當(dāng)時(shí)計(jì)數(shù)字24時(shí)通過74LS164給模塊年月日進(jìn)位,當(dāng)日模塊對(duì)應(yīng)其相應(yīng)月份進(jìn)行向月進(jìn)位時(shí),就給月進(jìn)位,當(dāng)月滿12時(shí),給年進(jìn)位。三硬件系統(tǒng)設(shè)計(jì)1.元器件介紹名稱圖形功能DS1302可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償?shù)榷喾N功能74LS16474LS164是一個(gè)串行輸入并行輸出的移位寄存器,并帶有清除端。其中; Q0Q7 并行輸出端 。 A,B串行輸入端。 MR 清除端, 為0時(shí),輸出清零。 CP 時(shí)鐘輸入端。AT89C51at89c51單片機(jī)是美國(guó)ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含4K bytes的可反復(fù)擦寫的Flash只讀程序存儲(chǔ)器和128bytes的隨機(jī)數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度,非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)。功能強(qiáng)大的at89c51單片機(jī)可為您提供許多高性價(jià)比的應(yīng)用場(chǎng)合,可靈活應(yīng)用于各種控制領(lǐng)域。2.硬件原理圖四系統(tǒng)軟件設(shè)計(jì)仿真過程1、打開PROTEUS軟件,并出畫單片機(jī)電子萬年歷具體運(yùn)行電路圖。3、檢查所畫電路運(yùn)行圖,確保沒有錯(cuò)誤以后,加載源程序。4、加載完成后,單擊電路圖框下的開始按鈕,進(jìn)行仿真,觀察LED數(shù)碼管現(xiàn)實(shí)情況,此時(shí)LED數(shù)碼管開始顯示數(shù)字。調(diào)節(jié)開關(guān)進(jìn)行時(shí)間的調(diào)節(jié)。當(dāng)秒的顯示間隔快與或慢與實(shí)際間隔時(shí),調(diào)節(jié)石英晶體震蕩器的頻率參數(shù),從而使秒的間隔達(dá)到標(biāo)準(zhǔn)。然后檢查電路其它問題,并對(duì)其的各參數(shù)進(jìn)行調(diào)整,使之正確。仿真結(jié)果通過對(duì)源程序的編譯,改正了其中的很多錯(cuò)誤,然后運(yùn)行,保證源程序的正確性。然后按原理圖選擇正確合理的電器元件,畫出正確的電路圖,加載源程序運(yùn)行,順利實(shí)現(xiàn)了單片機(jī)數(shù)字電子鐘的“小時(shí)”、“分鐘”、“秒”的顯示。1主程序流程圖設(shè)計(jì)開始設(shè)置串行口工作方式設(shè)置計(jì)數(shù)器工作方式給計(jì)數(shù)器1,0賦初值調(diào)用1302寫操作啟動(dòng)定時(shí)計(jì)數(shù)器0定時(shí)時(shí)間到?讀年月日時(shí)分秒把要顯示的數(shù)據(jù)送到緩沖區(qū)調(diào)用顯示子程序結(jié)束N調(diào)用定時(shí)中斷Y2顯示模塊流程圖基本顯示模塊設(shè)計(jì)的重點(diǎn)是由顯示代碼取得相應(yīng)的段碼、顯示段碼數(shù)據(jù)的串行發(fā)送,程序流程如圖所示。其中時(shí)個(gè)位的段碼必須加上小數(shù)點(diǎn),即帶小數(shù)點(diǎn)顯示時(shí)個(gè)位,目的是以小數(shù)點(diǎn)符代替時(shí)間分割符“-”。軟件秒脈沖發(fā)生器其實(shí)質(zhì)是利用了定時(shí)器0的定時(shí)溢出中斷,將它設(shè)定為100ms溢出中斷,則10次中斷的時(shí)間正好為1s。將時(shí)間參數(shù)設(shè)計(jì)為100ms的原因有兩個(gè):)根據(jù)系統(tǒng)時(shí)鐘主頻為6M的特點(diǎn),16位定時(shí)器最大定時(shí)時(shí)間為655362M(M為機(jī)器周期,這里是2),即131ms,取整數(shù)100便于計(jì)次數(shù);)如取的太短,如10ms,則定時(shí)器頻繁中斷,干擾系統(tǒng)正常運(yùn)行效果。有了秒脈沖發(fā)生器,10次中斷為1s,秒指示燈閃亮1次,秒變量單元加1,60后分變量單元加1,如果為60分則時(shí)變量單元加1。任何一個(gè)變量的變化,則顯示刷新一次(更新)。上述思想的實(shí)現(xiàn)均集成在定時(shí)器0的中斷子程序中。該設(shè)計(jì)顯示模塊流程圖如圖將進(jìn)制時(shí)分?jǐn)?shù)據(jù)轉(zhuǎn)化為顯示代碼關(guān)顯示以免顯示抖動(dòng)通過串口將時(shí)十位段碼送入對(duì)應(yīng)的將時(shí)個(gè)位段碼送入對(duì)應(yīng)的將分十位和個(gè)位段碼送入各自對(duì)應(yīng)打開顯示運(yùn)行結(jié)果五設(shè)計(jì)總結(jié)通過這一周的課程設(shè)計(jì),我學(xué)到了不少的知識(shí)。把以前沒有學(xué)好的模擬電路的知識(shí)進(jìn)行了補(bǔ)充和加強(qiáng)。這使我受益很大。加深了我對(duì)于單片機(jī)和數(shù)字電路的認(rèn)識(shí),相信在以后的學(xué)習(xí)和工作中碰到這些基礎(chǔ)的元器件我會(huì)更加得心應(yīng)手。通過查閱大量的資料,我獲得了以前在課堂上學(xué)不到的東西,我想這對(duì)于以后的畢業(yè)設(shè)計(jì),或者工作也好,都是很有幫助的。我很認(rèn)真地對(duì)待這個(gè)過程中的每一個(gè)細(xì)節(jié),希望自己能做得更好。希望今后還有這樣的機(jī)會(huì),能夠讓我學(xué)到更多的知識(shí)。在此次的數(shù)字鐘設(shè)計(jì)過程中,更進(jìn)一步地熟悉了芯片的結(jié)構(gòu)及掌握了各芯片的工作原理和其具體的使用方法。在連接六進(jìn)制,十進(jìn)制,六十進(jìn)制的進(jìn)位及十二進(jìn)制的接法中,要求熟悉邏輯電路及其芯片各引腳的功能,那么在電路出錯(cuò)時(shí)便能準(zhǔn)確地找出錯(cuò)誤所在并及時(shí)糾正了。學(xué)無止境,我們現(xiàn)在所做的一切都還只是一個(gè)開始。主要參考資料:1 林志琦.基于Proteus的單片機(jī)可視化軟硬件仿真M.北京:北京航空航天大學(xué)出版社,2006.92 周潤(rùn)景,張麗娜.基于PROTEUS的電路及單片機(jī)系統(tǒng)設(shè)計(jì)與仿真M.北京:北京航空航天大學(xué)出版社,2006.53 張靖武,周靈彬.單片機(jī)系統(tǒng)的PROTEUS設(shè)計(jì)與仿真M.北京:電子工業(yè)出版社,2007.44 周潤(rùn)景,張麗娜.PROTEUS入門實(shí)用教程M.北京:機(jī)械工業(yè)出版社,2007.95 戴俊峰.嵌入式系統(tǒng)大屏幕LED點(diǎn)陣顯示器J.現(xiàn)代電子技術(shù),2004,27(19):68-89,72.6 馮壽鵬.基于嵌入式系統(tǒng)的LED信息顯示技術(shù)研究J.現(xiàn)代電子技術(shù),2005(1):15-47.7 樓然苗,李光飛.51系列單片機(jī)設(shè)計(jì)實(shí)例M.北京:北京航空航天大學(xué)出版社,2003.38 樓然苗,李光飛.單片機(jī)課程設(shè)計(jì)指導(dǎo)M.北京:北京航空航天大學(xué)出版社,2007.79 賈東耀,汪仁煌. 數(shù)字溫度傳感器在倉庫溫度檢測(cè)系統(tǒng)的應(yīng)用J. 傳感器世界,2001.10 DALLAS DS18B20數(shù)據(jù)手冊(cè)Z.http:/www.maximic.com11付旭,方康玲.利用VB6.0實(shí)現(xiàn)PC機(jī)與單片口通訊J.微計(jì)算機(jī)信息,2002,18(10):30-3112 李江全,張麗,岑紅蕾.Visual Basic串口通信與測(cè)控應(yīng)用技術(shù)實(shí)戰(zhàn)詳解M.北京:人民郵電出版社,2007.13 法國(guó)Humirel公司.HS1101使用說明手冊(cè).14 長(zhǎng)沙太陽人電子有限公司.SMC1602A LCM使用說明手冊(cè).附錄: ;* ;* 萬年歷程序 * ;* ;67H(高兩位年)66H(低兩位年)65H(月)64H(星期) ;63H(日)62H(小時(shí))61H(分)60H(秒)57H(農(nóng)歷月)56H(農(nóng)歷日) ;顯示緩沖單元CH7BH(4CH4BH)年低位,AH79H(4AH49H)月, ;78H(48H)星期,H76H(47H46H)日,H74H(45H44H)時(shí), ;73H72H(43H42H)分,H70H(41H40H)秒,EH5DH(55H54H)農(nóng)歷年 ;5CH5BH(53H52H)農(nóng)歷月,AH59H(51H50H)農(nóng)歷日 ;閏年標(biāo)志為F0,定時(shí)器T1為調(diào)整時(shí)候閃爍用 ; LCALL GETWEEK ; MOV 78H,WEEk SCLK BIT P3.2 IO BIT P3.3 RST BIT P3.4 TIME_YEAR DATA 66H TIME_MONTH DATA 65H WEEK DATA 64H TIME_DAY DATA 63H HOUR DATA 62H MINTUE DATA 61H SECOND DATA 60H DS1302_ADDR DATA 32H DS1302_DATA DATA 31H start_year EQU 01; 定義查詢表起始年份,01-199 表示1901-2099 年 week_byte1 DATA 3AH WEEK_BYTE2 DATA 3BH WEEK_BYTE3 DATA 3CH WEEK_BYTE4 DATA 3DH WEEK_BYTE5 DATA 3EH CONvert_year DATA 6dh CONvert_month DATA 6eh ;BIT7 為1 表示閏月 CONvert_date DATA 6fh temp_Byte1 DATA 68h temp_Byte2 DATA 69h temp_Byte3 DATA 6Ah temp_Byte4 DATA 6Bh temp_Byte5 DATA 6Ch ; RS EQU P3.0 ; RW EQU P3.1 ; E EQU P3.5 ORG 0000H AJMP START ORG 0003H RETI ORG 000BH LJMP INTT2 ORG 001BH LJMP INTT1 ORG 30H ;* ;* 主程序 * ;* start: mov R1,#254h ;清RAM 128單元 mov r0,#2 mov a,#0 clear: mov r0,a inc r0 djnz r1,clear mov r0,A MOV R1,A MOV R7,#10 ;計(jì)數(shù)器初始計(jì)數(shù)值 SETB EA ;打開總中斷 ; MOV T2CON,#0 ;MOV T2MOD,#0 ; MOV TH2,#0 ;MOV TL2,#0 ;SETB TR2 MOV SCON,#00H ;串行輸出,方式 MOV TMOD,#11H ;計(jì)數(shù)器,方式;計(jì)數(shù)器,方式 MOV TL1,#00H ;計(jì)數(shù)器初值65.5MS中斷一次 MOV TH1,#00H MOV TH0,#3CH ;計(jì)數(shù)器50MS中斷一次 MOV TL0,#0B0H CLR P0.6 MOV DS1302_ADDR,#8EH MOV DS1302_DATA,#00H ;允許協(xié) LCALL WRITE MOV DS1302_ADDR,#90H MOV DS1302_DATA,#0A6H ;1302充電,充電電流.1mA lcall write SETB ET0 ;打開秒閃定時(shí)器 SETB TR0 main1: MOV DS1302_ADDR,#8DH ;READ OUT YEAR LCALL READ MOV TIME_YEAR,DS1302_DATA MOV DS1302_ADDR,#8BH ;READ OUT WEEK LCALL READ MOV WEEK,DS1302_DATA MOV DS1302_ADDR,#89H ;READ OUT MONTH LCALL READ MOV TIME_MONTH,DS1302_DATA MOV DS1302_ADDR,#87H ;READ OUT DAY LCALL READ MOV TIME_DAY,DS1302_DATA MOV DS1302_ADDR,#85H ;READ OUT HOUR LCALL READ MOV HOUR,DS1302_DATA MOV DS1302_ADDR,#83H ;READ OUT MINTUE LCALL READ MOV MINTUE,DS1302_DATA MOV DS1302_ADDR,#81H ;READ OUT SECOND LCALL READ MOV SECOND,DS1302_DATA MOV R0,TIME_YEAR ;年分離,送顯示緩存 LCALL DIVIDE MOV 7BH,R1 MOV 4BH,R1 MOV 7CH,R2 MOV 4CH,R2 MOV 78H,WEEK MOV 48H,WEEK MOV R0,TIME_MONTH ;月分離,送顯示緩存 LCALL DIVIDE MOV 79H,R1 MOV 49H,R1 MOV 7AH,R2 MOV 4AH,R2 MOV R0,TIME_DAY ;日分離,送顯示緩存 LCALL DIVIDE MOV 76H,R1 MOV 46H,R1 MOV 77H,R2 MOV 47H,R2 MOV R0,HOUR ;小時(shí)分離,送顯示緩存 LCALL DIVIDE MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2 MOV R0,MINTUE ;分分離,送顯示緩存 LCALL DIVIDE MOV 72H,R1 MOV 42H,R1 MOV 73H,R2 MOV 43H,R2 MOV R0,SECOND ;秒分離,送顯示緩存 LCALL DIVIDE MOV 70H,R1 MOV 40H,R1 MOV 71H,R2 MOV 41H,R2 LCALL GENGXIN ;更新農(nóng)歷程序 MOV R0,CONVERT_MONTH ;農(nóng)歷月分離,送顯示緩存 LCALL DIVIDE MOV 5BH,R1 MOV 52H,R1 MOV 5CH,R2 MOV 53H,R2 MOV R0,CONVERT_DATE LCALL DIVIDE MOV 59H,R1 MOV 50H,R1 MOV 5AH,R2 MOV 51H,R2 LCALL GETWEEK MOV 78H,WEEK LCALL DISPLAY GOON:JNB P1.1,SETGG ;調(diào)整日歷 ;JNB P1.4,QIDONG ;啟動(dòng)秒鐘指示燈 ; LCALL QIDONG AAA: JNB F0,SSS CLR P1.0 ;閏月,則p1.0清,指示燈亮 LJMP MAIN1 SSS: SETB P1.0 ;非閏月,則p1.0置位,指示燈滅 LJMP MAIN1 SETGG: LJMP SETG QIDONG: LCALL DISPLAY ;秒鐘指示燈開啟/關(guān)閉 ;JNB P1.4,QIDONG ; LCALL QIDONG CPL 30H ;30 JB 30H,ON CLR TR0 CLR ET0 AJMP QDOUT ON: SETB TR0 SETB ET0 QDOUT: AJMP AAA ;* ;* 秒燈閃爍程序 * ;* INTT2: PUSH ACC ;累加器入棧保護(hù) PUSH PSW ;狀態(tài)字入棧保護(hù) CLR ET0 ;關(guān)T0中斷允許 CLR TR0 ;關(guān)閉定時(shí)器T0 MOV A,#0B7H ;中斷響應(yīng)時(shí)間同步修正 ADD A,TL0 ;低位初值修正 MOV TL0,A ;重裝初值(低位修正值) MOV A,#3CH ;高位初值修正 ADDC A,TH0 ; MOV TH0,A ;重裝初值(高位修正值) SETB TR0 ;開啟定時(shí)器T0 CLR PSW.4 DJNZ R7,INTT2OUT MOV R7,#10 CPL 20H JB 20H,S1 SETB P0.7 ; 秒指示燈閃爍 AJMP INTT2OUT S1: CLR P0.7 INTT2OUT: POP PSW ;出棧 POP ACC SETB ET0 RETI ;* ;* 寫程序 * ;* WRITE: CLR SCLK NOP SETB RST NOP MOV A,DS1302_ADDR MOV R4,#8 WRITE1: RRC A ;送地址給 NOP NOP CLR SCLK NOP NOP NOP MOV IO,C SETB SCLK ;送入地址在時(shí)鐘上升沿有效 NOP NOP NOP NOP DJNZ R4,WRITE1 CLR SCLK NOP MOV A,DS1302_DATA MOV R4,#8 WRITE2: RRC A NOP ;送數(shù)據(jù)給,時(shí)鐘上升沿,數(shù)據(jù)輸入 CLR SCLK NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE2 CLR RST RET ;* ;* 讀程序 * ;* READ: CLR SCLK NOP NOP SETB RST NOP MOV A,DS1302_ADDR MOV R4,#8 READ1: RRC A NOP MOV IO,C NOP NOP NOP SETB SCLK ;送入地址在時(shí)鐘上升沿有效 NOP NOP NOP ;CLR SCLK CLR SCLK NOP NOP DJNZ R4,READ1 MOV R4,#8 READ2: CLR SCLK NOP NOP NOP
收藏