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