基于AT89C51單片機(jī)的多功能電子萬(wàn)年歷的設(shè)計(jì)
基于AT89C51單片機(jī)的多功能電子萬(wàn)年歷的設(shè)計(jì),基于,at89c51,單片機(jī),多功能,電子,萬(wàn)年歷,設(shè)計(jì)
單片機(jī)課程設(shè)計(jì)
單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)
課 題: 基于AT89C51單片機(jī)的多功能電子萬(wàn)年歷的設(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),給人類(lèi)生活帶來(lái)了根本性的改變。由其是單片機(jī)技術(shù)的應(yīng)用產(chǎn)品已經(jīng)走進(jìn)了千家萬(wàn)戶(hù)。電子萬(wàn)年歷的出現(xiàn)給人們的生活帶來(lái)的諸多方便。
本文首先描述系統(tǒng)硬件工作原理,并附以系統(tǒng)結(jié)構(gòu)框圖加以說(shuō)明,著重介紹了本系統(tǒng)所應(yīng)用的各硬件接口技術(shù)和各個(gè)接口模塊的功能及工作過(guò)程,其次,詳細(xì)闡述了程序的各個(gè)模塊和實(shí)現(xiàn)過(guò)程。
萬(wàn)年歷是采用數(shù)字電路實(shí)現(xiàn)對(duì).時(shí),分,秒.數(shù)字顯示的計(jì)時(shí)裝置,廣泛用于個(gè)人家庭,車(chē)站, 碼頭辦公室等公共場(chǎng)所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過(guò)老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、定時(shí)開(kāi)關(guān)烘箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等,但是所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究萬(wàn)年歷及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。
本系統(tǒng)采用了以廣泛使用的單片機(jī)技術(shù)為核心,軟硬件結(jié)合,使硬件部分大為簡(jiǎn)化,提高了系統(tǒng)穩(wěn)定性,并采用LED顯示電路、鍵盤(pán)電路,使人機(jī)交互簡(jiǎn)便易行。
二.系統(tǒng)總體方案設(shè)計(jì)
1. 系統(tǒng)設(shè)計(jì)硬件框圖
振蕩電路
按鍵調(diào)節(jié)
DS1302
AT89C51
LED顯示頻
2. 實(shí)現(xiàn)的基本原理
在本實(shí)驗(yàn)中,我引用了DS1302的時(shí),分,秒功能,當(dāng)時(shí)計(jì)數(shù)字24時(shí)通過(guò)74LS164給模塊年月日進(jìn)位,當(dāng)日模塊對(duì)應(yīng)其相應(yīng)月份進(jìn)行向月進(jìn)位時(shí),就給月進(jìn)位,當(dāng)月滿(mǎn)12時(shí),給年進(jìn)位。
三.硬件系統(tǒng)設(shè)計(jì)
1.元器件介紹
名稱(chēng)
圖形
功能
DS1302
可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償?shù)榷喾N功能
74LS164
74LS164是一個(gè)串行輸入并行輸出的移位寄存器,并帶有清除端。其中; Q0—Q7 并行輸出端 。 A,B串行輸入端。 MR 清除端, 為0時(shí),輸出清零。 CP 時(shí)鐘輸入端。
AT89C51
at89c51單片機(jī)是美國(guó)ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含4K bytes的可反復(fù)擦寫(xiě)的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ī)可為您提供許多高性?xún)r(jià)比的應(yīng)用場(chǎng)合,可靈活應(yīng)用于各種控制領(lǐng)域。
2.硬件原理圖
四.系統(tǒng)軟件設(shè)計(jì)
仿真過(guò)程
1、打開(kāi)PROTEUS軟件,并出畫(huà)單片機(jī)電子萬(wàn)年歷具體運(yùn)行電路圖。
3、檢查所畫(huà)電路運(yùn)行圖,確保沒(méi)有錯(cuò)誤以后,加載源程序。
4、加載完成后,單擊電路圖框下的開(kāi)始按鈕,進(jìn)行仿真,觀察LED數(shù)碼管現(xiàn)實(shí)情況,此時(shí)LED數(shù)碼管開(kāi)始顯示數(shù)字。調(diào)節(jié)開(kāi)關(guān)進(jìn)行時(shí)間的調(diào)節(jié)。當(dāng)秒的顯示間隔快與或慢與實(shí)際間隔時(shí),調(diào)節(jié)石英晶體震蕩器的頻率參數(shù),從而使秒的間隔達(dá)到標(biāo)準(zhǔn)。然后檢查電路其它問(wèn)題,并對(duì)其的各參數(shù)進(jìn)行調(diào)整,使之正確。
仿真結(jié)果
通過(guò)對(duì)源程序的編譯,改正了其中的很多錯(cuò)誤,然后運(yùn)行,保證源程序的正確性。然后按原理圖選擇正確合理的電器元件,畫(huà)出正確的電路圖,加載源程序運(yùn)行,順利實(shí)現(xiàn)了單片機(jī)數(shù)字電子鐘的“小時(shí)”、“分鐘”、“秒”的顯示。
1主程序流程圖設(shè)計(jì)
開(kāi)始
設(shè)置串行口工作方式
設(shè)置計(jì)數(shù)器工作方式
給計(jì)數(shù)器1,0賦初值
調(diào)用1302寫(xiě)操作
啟動(dòng)定時(shí)計(jì)數(shù)器0
定時(shí)時(shí)間到?
讀年月日時(shí)分秒
把要顯示的數(shù)據(jù)送到緩沖區(qū)
調(diào)用顯示子程序
結(jié)束
N
調(diào)用定時(shí)中斷
Y
2顯示模塊流程圖
基本顯示模塊設(shè)計(jì)的重點(diǎn)是由顯示代碼取得相應(yīng)的段碼、顯示段碼數(shù)據(jù)的串行發(fā)送,程序流程如圖1-11所示。其中時(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è):
1)根據(jù)系統(tǒng)時(shí)鐘主頻為6M的特點(diǎn),16位定時(shí)器最大定時(shí)時(shí)間為65536×2M(M為機(jī)器周期,這里是2μS),即131ms,取整數(shù)100便于計(jì)次數(shù);
2)如取的太短,如10ms,則定時(shí)器頻繁中斷,干擾系統(tǒng)正常運(yùn)行效果。
有了秒脈沖發(fā)生器,10次中斷為1s,秒指示燈閃亮1次,秒變量單元加1,60后分變量單元加1,如果為60分則時(shí)變量單元加1。任何一個(gè)變量的變化,則顯示刷新一次(更新)。上述思想的實(shí)現(xiàn)均集成在定時(shí)器0的中斷子程序中。
該設(shè)計(jì)顯示模塊流程圖如圖
將16進(jìn)制時(shí)分?jǐn)?shù)據(jù)轉(zhuǎn)化為BCD顯示代碼
關(guān)顯示以免顯示抖動(dòng)
通過(guò)串口將時(shí)十位段碼送入對(duì)應(yīng)的LS164
將時(shí)個(gè)位段碼送入對(duì)應(yīng)的LS164
將分十位和個(gè)位段碼送入各自對(duì)應(yīng)LS164
打開(kāi)顯示
運(yùn)行結(jié)果
五.設(shè)計(jì)總結(jié)
通過(guò)這一周的課程設(shè)計(jì),我學(xué)到了不少的知識(shí)。把以前沒(méi)有學(xué)好的模擬電路的知識(shí)進(jìn)行了補(bǔ)充和加強(qiáng)。這使我受益很大。加深了我對(duì)于單片機(jī)和數(shù)字電路的認(rèn)識(shí),相信在以后的學(xué)習(xí)和工作中碰到這些基礎(chǔ)的元器件我會(huì)更加得心應(yīng)手。通過(guò)查閱大量的資料,我獲得了以前在課堂上學(xué)不到的東西,我想這對(duì)于以后的畢業(yè)設(shè)計(jì),或者工作也好,都是很有幫助的。我很認(rèn)真地對(duì)待這個(gè)過(guò)程中的每一個(gè)細(xì)節(jié),希望自己能做得更好。希望今后還有這樣的機(jī)會(huì),能夠讓我學(xué)到更多的知識(shí)。在此次的數(shù)字鐘設(shè)計(jì)過(guò)程中,更進(jìn)一步地熟悉了芯片的結(jié)構(gòu)及掌握了各芯片的工作原理和其具體的使用方法。
在連接六進(jìn)制,十進(jìn)制,六十進(jìn)制的進(jìn)位及十二進(jìn)制的接法中,要求熟悉邏輯電路及其芯片各引腳的功能,那么在電路出錯(cuò)時(shí)便能準(zhǔn)確地找出錯(cuò)誤所在并及時(shí)糾正了。
學(xué)無(wú)止境,我們現(xiàn)在所做的一切都還只是一個(gè)開(kāi)始。
主要參考資料:
[1] 林志琦.基于Proteus的單片機(jī)可視化軟硬件仿真[M].北京:北京航空航天大學(xué)出版社,2006.9
[2] 周潤(rùn)景,張麗娜.基于PROTEUS的電路及單片機(jī)系統(tǒng)設(shè)計(jì)與仿真[M].北京:北京航空航天大學(xué)出版社,2006.5
[3] 張靖武,周靈彬.單片機(jī)系統(tǒng)的PROTEUS設(shè)計(jì)與仿真[M].北京:電子工業(yè)出版社,2007.4
[4] 周潤(rùn)景,張麗娜.PROTEUS入門(mén)實(shí)用教程[M].北京:機(jī)械工業(yè)出版社,2007.9
[5] 戴俊峰.嵌入式系統(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.3
[8] 樓然苗,李光飛.單片機(jī)課程設(shè)計(jì)指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2007.7
[9] 賈東耀,汪仁煌. 數(shù)字溫度傳感器在倉(cāng)庫(kù)溫度檢測(cè)系統(tǒng)的應(yīng)用[J]. 傳感器世界,2001.
[10] DALLAS DS18B20數(shù)據(jù)手冊(cè)[Z].http://www.maximic.com
[11]付旭,方康玲.利用VB6.0實(shí)現(xiàn)PC機(jī)與單片口通訊[J].微計(jì)算機(jī)信息,2002,18(10):30-31
[12] 李江全,張麗,岑紅蕾.Visual Basic串口通信與測(cè)控應(yīng)用技術(shù)實(shí)戰(zhàn)詳解[M].北京:人民郵電出版社,2007.
[13] 法國(guó)Humirel公司.HS1101使用說(shuō)明手冊(cè).
[14] 長(zhǎng)沙太陽(yáng)人電子有限公司.SMC1602A LCM使用說(shuō)明手冊(cè).
附錄:
;*****************************
;* 萬(wàn)年歷程序 *
;*****************************
;67H(高兩位年)66H(低兩位年)65H(月)64H(星期)
;63H(日)62H(小時(shí))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)時(shí),
;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,定時(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; 定義查詢(xún)表起始年份,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 ;打開(kāi)總中斷
; 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 ;打開(kāi)秒閃定時(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 ;秒鐘指示燈開(kāi)啟/關(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 ;開(kāi)啟定時(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
;*********************************
;* 寫(xiě)程序 *
;*********************************
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
收藏