基于AT89C51單片機(jī)的多功能電子萬年歷的設(shè)計
基于AT89C51單片機(jī)的多功能電子萬年歷的設(shè)計,基于,at89c51,單片機(jī),多功能,電子,萬年歷,設(shè)計
單片機(jī)課程設(shè)計
單片機(jī)應(yīng)用系統(tǒng)設(shè)計
課 題: 基于AT89C51單片機(jī)的多功能電子萬年歷的設(shè)計
姓 名:
班 級:
學(xué) 號:
指導(dǎo)老師:
日 期:
目錄
一.緒言……………………………………………………………3
二.系統(tǒng)總體方案設(shè)計……………….………………………………3
三.硬件系統(tǒng)設(shè)計:…………………….……………………….4
四.系統(tǒng)軟件設(shè)計………………….……………………………5
五.設(shè)計總結(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ù)和各個接口模塊的功能及工作過程,其次,詳細(xì)闡述了程序的各個模塊和實現(xiàn)過程。
萬年歷是采用數(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ǔ)的。因此,研究萬年歷及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實的意義。
本系統(tǒng)采用了以廣泛使用的單片機(jī)技術(shù)為核心,軟硬件結(jié)合,使硬件部分大為簡化,提高了系統(tǒng)穩(wěn)定性,并采用LED顯示電路、鍵盤電路,使人機(jī)交互簡便易行。
二.系統(tǒng)總體方案設(shè)計
1. 系統(tǒng)設(shè)計硬件框圖
振蕩電路
按鍵調(diào)節(jié)
DS1302
AT89C51
LED顯示頻
2. 實現(xiàn)的基本原理
在本實驗中,我引用了DS1302的時,分,秒功能,當(dāng)時計數(shù)字24時通過74LS164給模塊年月日進(jìn)位,當(dāng)日模塊對應(yīng)其相應(yīng)月份進(jìn)行向月進(jìn)位時,就給月進(jìn)位,當(dāng)月滿12時,給年進(jìn)位。
三.硬件系統(tǒng)設(shè)計
1.元器件介紹
名稱
圖形
功能
DS1302
可以對年、月、日、周日、時、分、秒進(jìn)行計時,且具有閏年補(bǔ)償?shù)榷喾N功能
74LS164
74LS164是一個串行輸入并行輸出的移位寄存器,并帶有清除端。其中; Q0—Q7 并行輸出端 。 A,B串行輸入端。 MR 清除端, 為0時,輸出清零。 CP 時鐘輸入端。
AT89C51
at89c51單片機(jī)是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含4K bytes的可反復(fù)擦寫的Flash只讀程序存儲器和128bytes的隨機(jī)數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度,非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)。功能強(qiáng)大的at89c51單片機(jī)可為您提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。
2.硬件原理圖
四.系統(tǒng)軟件設(shè)計
仿真過程
1、打開PROTEUS軟件,并出畫單片機(jī)電子萬年歷具體運行電路圖。
3、檢查所畫電路運行圖,確保沒有錯誤以后,加載源程序。
4、加載完成后,單擊電路圖框下的開始按鈕,進(jìn)行仿真,觀察LED數(shù)碼管現(xiàn)實情況,此時LED數(shù)碼管開始顯示數(shù)字。調(diào)節(jié)開關(guān)進(jìn)行時間的調(diào)節(jié)。當(dāng)秒的顯示間隔快與或慢與實際間隔時,調(diào)節(jié)石英晶體震蕩器的頻率參數(shù),從而使秒的間隔達(dá)到標(biāo)準(zhǔn)。然后檢查電路其它問題,并對其的各參數(shù)進(jìn)行調(diào)整,使之正確。
仿真結(jié)果
通過對源程序的編譯,改正了其中的很多錯誤,然后運行,保證源程序的正確性。然后按原理圖選擇正確合理的電器元件,畫出正確的電路圖,加載源程序運行,順利實現(xiàn)了單片機(jī)數(shù)字電子鐘的“小時”、“分鐘”、“秒”的顯示。
1主程序流程圖設(shè)計
開始
設(shè)置串行口工作方式
設(shè)置計數(shù)器工作方式
給計數(shù)器1,0賦初值
調(diào)用1302寫操作
啟動定時計數(shù)器0
定時時間到?
讀年月日時分秒
把要顯示的數(shù)據(jù)送到緩沖區(qū)
調(diào)用顯示子程序
結(jié)束
N
調(diào)用定時中斷
Y
2顯示模塊流程圖
基本顯示模塊設(shè)計的重點是由顯示代碼取得相應(yīng)的段碼、顯示段碼數(shù)據(jù)的串行發(fā)送,程序流程如圖1-11所示。其中時個位的段碼必須加上小數(shù)點,即帶小數(shù)點顯示時個位,目的是以小數(shù)點符代替時間分割符“-”。
軟件秒脈沖發(fā)生器其實質(zhì)是利用了定時器0的定時溢出中斷,將它設(shè)定為100ms溢出中斷,則10次中斷的時間正好為1s。將時間參數(shù)設(shè)計為100ms的原因有兩個:
1)根據(jù)系統(tǒng)時鐘主頻為6M的特點,16位定時器最大定時時間為65536×2M(M為機(jī)器周期,這里是2μS),即131ms,取整數(shù)100便于計次數(shù);
2)如取的太短,如10ms,則定時器頻繁中斷,干擾系統(tǒng)正常運行效果。
有了秒脈沖發(fā)生器,10次中斷為1s,秒指示燈閃亮1次,秒變量單元加1,60后分變量單元加1,如果為60分則時變量單元加1。任何一個變量的變化,則顯示刷新一次(更新)。上述思想的實現(xiàn)均集成在定時器0的中斷子程序中。
該設(shè)計顯示模塊流程圖如圖
將16進(jìn)制時分?jǐn)?shù)據(jù)轉(zhuǎn)化為BCD顯示代碼
關(guān)顯示以免顯示抖動
通過串口將時十位段碼送入對應(yīng)的LS164
將時個位段碼送入對應(yīng)的LS164
將分十位和個位段碼送入各自對應(yīng)LS164
打開顯示
運行結(jié)果
五.設(shè)計總結(jié)
通過這一周的課程設(shè)計,我學(xué)到了不少的知識。把以前沒有學(xué)好的模擬電路的知識進(jìn)行了補(bǔ)充和加強(qiáng)。這使我受益很大。加深了我對于單片機(jī)和數(shù)字電路的認(rèn)識,相信在以后的學(xué)習(xí)和工作中碰到這些基礎(chǔ)的元器件我會更加得心應(yīng)手。通過查閱大量的資料,我獲得了以前在課堂上學(xué)不到的東西,我想這對于以后的畢業(yè)設(shè)計,或者工作也好,都是很有幫助的。我很認(rèn)真地對待這個過程中的每一個細(xì)節(jié),希望自己能做得更好。希望今后還有這樣的機(jī)會,能夠讓我學(xué)到更多的知識。在此次的數(shù)字鐘設(shè)計過程中,更進(jìn)一步地熟悉了芯片的結(jié)構(gòu)及掌握了各芯片的工作原理和其具體的使用方法。
在連接六進(jìn)制,十進(jìn)制,六十進(jìn)制的進(jìn)位及十二進(jìn)制的接法中,要求熟悉邏輯電路及其芯片各引腳的功能,那么在電路出錯時便能準(zhǔn)確地找出錯誤所在并及時糾正了。
學(xué)無止境,我們現(xiàn)在所做的一切都還只是一個開始。
主要參考資料:
[1] 林志琦.基于Proteus的單片機(jī)可視化軟硬件仿真[M].北京:北京航空航天大學(xué)出版社,2006.9
[2] 周潤景,張麗娜.基于PROTEUS的電路及單片機(jī)系統(tǒng)設(shè)計與仿真[M].北京:北京航空航天大學(xué)出版社,2006.5
[3] 張靖武,周靈彬.單片機(jī)系統(tǒng)的PROTEUS設(shè)計與仿真[M].北京:電子工業(yè)出版社,2007.4
[4] 周潤景,張麗娜.PROTEUS入門實用教程[M].北京:機(jī)械工業(yè)出版社,2007.9
[5] 戴俊峰.嵌入式系統(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系列單片機(jī)設(shè)計實例[M].北京:北京航空航天大學(xué)出版社,2003.3
[8] 樓然苗,李光飛.單片機(jī)課程設(shè)計指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2007.7
[9] 賈東耀,汪仁煌. 數(shù)字溫度傳感器在倉庫溫度檢測系統(tǒng)的應(yīng)用[J]. 傳感器世界,2001.
[10] DALLAS DS18B20數(shù)據(jù)手冊[Z].http://www.maximic.com
[11]付旭,方康玲.利用VB6.0實現(xiàn)PC機(jī)與單片口通訊[J].微計算機(jī)信息,2002,18(10):30-31
[12] 李江全,張麗,岑紅蕾.Visual Basic串口通信與測控應(yīng)用技術(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)歷日)
;顯示緩沖單元CH~7BH(4CH~4BH)年低位,AH~79H(4AH~49H)月,
;78H(48H)星期,H~76H(47H~46H)日,H~74H(45H~44H)時,
;73H72H(43H~42H)分,H~70H(41H~40H)秒,EH~5DH(55H~54H)農(nóng)歷年
;5CH~5BH(53H~52H)農(nóng)歷月,AH~59H(51H~50H)農(nóng)歷日
;閏年標(biāo)志為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 ;累加器入棧保護(hù)
PUSH PSW ;狀態(tài)字入棧保護(hù)
CLR ET0 ;關(guān)T0中斷允許
CLR TR0 ;關(guān)閉定時器T0
MOV A,#0B7H ;中斷響應(yīng)時間同步修正
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
收藏