基于PCF8563的時鐘系統(tǒng)設計_第1頁
基于PCF8563的時鐘系統(tǒng)設計_第2頁
基于PCF8563的時鐘系統(tǒng)設計_第3頁
基于PCF8563的時鐘系統(tǒng)設計_第4頁
基于PCF8563的時鐘系統(tǒng)設計_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基于PCF8563的時鐘系統(tǒng)設計大連理工大學本科設計報告題目:基于PCF8563的時鐘系統(tǒng)設計課程名稱:學院(系):專業(yè):班級:學號:學生姓名:成績:2014年7月10日題目:基于PCF8563的時鐘系統(tǒng)設計設計要求實驗要求:顯示兩位小時、兩位分鐘和兩位秒?yún)?shù),相互之間有分隔符號;(2)按住KEY1可顯示四位年、兩位月、兩位日;具備整點報時功能(模擬廣播電臺的整點報時從59分55秒開始,每一秒驅動蜂鳴器一次,其中前5次為低頻,00秒時為高頻驅動);具備鍵盤修改時間功能??尚薷男r、分鐘和秒?yún)?shù);修改時間時具備“回顯”功能,以方便觀察;輸入時間參數(shù)時應具有“自動糾錯”功能,以免錯誤數(shù)據(jù)的輸入;(7)在修改時間參數(shù)時具備“參數(shù)閃爍”功能,是操作更人性化;2設計分析及系統(tǒng)方案設計(1)主程序算法描述主程序中定義端口名稱、圍器件讀寫地址增強程序的可讀性。設置中斷服務程序入口地址,將硬件電路連接與之對應。INT_RCTDUI對應INT_0中斷服務程序,INT_7290對應INT1的中斷服務程序。開始時先對硬件電路進行復位操作。然后設定PCF8563T的時間和命令參數(shù)存放在單片機內部的10H~1DH單元,將其寫入到8563的00H~0DH單元。使總的中斷使能端有效,開INT0和INT1中斷,使觸發(fā)極性為下降沿。等待中斷的到來。(2)INT_RCT中斷子程序算法描述調讀數(shù)據(jù)子程序,將讀出的8563中02H?08H單元的內容存放于單片機內部20H~26H單元。判斷時、分的數(shù)值,當時間在**-59-55至**-59-59時調用低頻蜂鳴器BUZZL,當時間為**-00-00時調用高頻蜂鳴器BUZZH。實現(xiàn)整點報時。調整時間,將20H-26H單元中內容拆分查表后送到28H~2FH(年,月,日)和38H~3FH(時,分,秒)。使P1.2控制顯示內容,當P1.2=1時,顯示時,分,秒;當P1.2=0時,顯示年,月,日。(3)蜂鳴器發(fā)聲子程序(BUZZL和BUZZH)設置初始值使BUZZL發(fā)聲頻率為500HZ,BUZZH發(fā)聲頻率為1500HZ。(4)鍵盤修改子程序讀入進入中斷前的數(shù)據(jù),將8563的20H單元內容送入單片機內部12H單元(秒);21H單元內容送入單片機內部13H單元(分);22H單元內容送入單片機內部14H單元(時)便于修改后顯示。讀入輸入的鍵值為0AH時,為A鍵修改小時參數(shù)。設置小時的十位閃爍命令等待按鍵操作,讀入鍵值判斷是否超過三,超過則報警且要求重新輸入。輸入正確時回顯,設置小時的個位閃爍命令等待按鍵操作,讀入鍵值判斷個位不超過9,然后判斷小時整個數(shù)是否小于24。分和秒的設置與小時類似,不同的是十位不能超過5個位不能超過9。(5)閃爍子程序設置入口閃爍參數(shù)單元值3系統(tǒng)電路圖-1-VCC上拉電阻5KX22AT89C51ZLG7290BIC總線8位數(shù)碼管P1.0SDAP1.1SCLP1.7/RST/INT0(P3.2)/INT32.768KPCF8563TSDAOSCISCLOSCO/INT1(P3.3)CLKOUTP3.4P1.2VCCB5區(qū)+5V855010K保護電阻47歐SW1103BUZZ外圍接口模塊硬件電路功能描述ZLG7290B驅動8個數(shù)碼管顯示時鐘時間,管理按鍵并讀取鍵值,和/INT1相連,引發(fā)中斷。PCF8563T設置時鐘時間,控制時間的運行,和/INTO相連,每一秒產生一次中斷。蜂鳴器整點報時,錯誤提示KEY1控制顯示時間或日期主程序中主要變量定義變量名稱RAM單元/寄存器功能WSLA_85630A2HPCF8563T寫地址RSLA_85630A3HPCF8563T讀地址WSLA_729070HZLG7290B寫地址-2-RSLA_729071HZLG7290B讀地址SS50H為閃爍程序傳遞參數(shù)10H-1DH無準備向時鐘芯片寫入的值07H無寫入?yún)?shù)個數(shù)00H無參數(shù)和控制命令緩沖區(qū)首地址02H無從器件內部地址03H無從器件寫地址30H無寫入閃爍控制字使閃爍速度最快系統(tǒng)軟件中各個子程序的功能描述子程序名稱入口參數(shù)出口參數(shù)功能描述INT_RCT無無讀取時間參數(shù)送數(shù)碼管顯示,并在整點時刻報警BUZZL無無蜂鳴器以500Hz頻率發(fā)聲BUZZH無無蜂鳴器以1500HZ頻率發(fā)聲將20H-26H中從PCF8563ADJUST20H-26H單元20H-26H單元中讀出的7個參數(shù)無關位屏蔽掉CHAIFEN20H-26H單元28H-2FH單元將20H-26H單元的參數(shù)38H-3FH單元拆分并在查表后送28H-2FH,38H-3FH累加器AR4(H)R3將A中的數(shù)據(jù)拆分為兩個獨CF立的BCD碼并查表結果存于R4R3INT_7290無無修改時間、回顯、糾錯、閃爍FLASHSS無控制閃爍位置RDKEY無累加器A讀鍵值子程序WR856310H-1DH單元無向日歷芯片寫入時間參數(shù)WRNBYT無無多字節(jié)寫操作RDADD無無多字節(jié)讀操作3-MOV1BH,#00H;設定日報警MOV1CH,#00H;設定星期報警8程序清單SDABITP1.0MOV1DH,#83H;設定CLKOUT的頻率,SCLBITP1.11秒周期方波WSLA_8563EQU0A2H;PCF8563T口地址MOVR7,#0EH;寫入?yún)?shù)個數(shù)RSLA_8563EQU0A3HMOVR0,#10H;參數(shù)與控制命令緩沖區(qū)WSLA_7290EQU70H;ZLG7290B口地址首地址RSLA_7290EQU71HMOVR2,#00H;從器件內部子地址MOVR3,#WSLA_8563;準備向PCF8563TORG8000H寫入數(shù)據(jù)串LJMP8040HLCALLWRNBYT;寫入時間,控制命令到ORG8003HPCF8563TLJMPINT_RCTSETBEA;啟動總中斷ORG8013HSETBEX0;啟動INT_RCT(INT_0)LJMPINT_7290SETBIT0;定時器0下降沿有效SETBEX1;啟動INT_7290(INT_7290)ORG8040HSETBIT1;定時器1下降沿有效START:MOVSP,#60HSJMP$;等待中斷;****************************************clrpi.7;ZLG7290復位LCALLDELAY;中斷服務子程序INT_RCTSETBP1.7;****************************************;****************************************INT_RCT:MOVR7,#07H;數(shù)據(jù)塊字節(jié)數(shù);設定pdf8563tde時間和命令參數(shù)(參數(shù)和控制MOVR0,#20H;內部數(shù)據(jù)塊首地址命令緩沖區(qū)10H-1DH)MOVR2,#02H;內部寄存器首地址產***************************************movR3,#WSLA_8563;向8563寫地址MOV10H,#00H;啟動控制字MOVR4,#RSLA_8563;從8563讀地址MOV11H,#1FH;設置報警及定時器中斷LCALLRDADD;調讀數(shù)據(jù)子程序,MOV12H,#50H;秒單元將讀出的數(shù)據(jù)存放于單片機20H-26H中MOV13H,#59H;分單元MOVA,21H;判斷是否為59分CJNEA,#59H,NEXT1MOV14H,#08H;小時單元MOV15H,#01H;日期單元MOVA,20H;判斷是否為55秒CJNEA,#55H,NEXT2MOV16H,#01H;星期單元LCALLBUZZLMOV17H,#01H;月單元SJMPNEXTMOV18H,#10H;年單元NEXT2:CJNEA,#56H,NEXT3MOV19H,#00H;設定分報警LCALLBUZZLMOV1AH,#00H;設定小時報警SJMPNEXTSETBTR0NEXT3:CJNEA,#57H,NEXT4LOOPL:JNBTF0,$LCALLBUZZLCLRTF0MOVTL0,#66HSJMPNEXTNEXT4:CJNEA,#58H,NEXT5MOVTH0,#0FCHLCALLBUZZLCPLP3.4;驅動蜂鳴器SJMPNEXTDJNZR7,LOOPLSETBP3.4NEXT5:CJNEA,#59H,NEXTLCALLBUZZLPOP07HSJMPNEXTRETNEXT1:CJNEA,#00H,NEXTBUZZH:PUSH07HMOVA,20HMOVTMOD,#01HCJNEA,#00H,NEXTMOVTL0,#0CDH;高頻1500HzLCALLBUZZHMOVTH0,#0FEHMOVR7,#100NEXT:LCALLADJUST;調時間調整子程序SETBTR0LCALLCHAIFEN;調拆分子程序,將LOOPH:JNBTF0,$20H-26H中的參數(shù)分別存28H-2FH,38H-3FH中MOVR7,#08HCLRTF0MOVR2,#10HMOVTL0,#0CDHMOVR3,#WSLA_7290MOVTH0,#0FEHCPLP3.4;驅動蜂鳴器JNBP1.2,YEARS;使用P1.2控制顯示DJNzR7,LOOPH內容SETBP3.4MOVR0,#38H;顯示時分秒SJMPDISPPOP07HRETYEARS:MOVR0,#28H;顯示年月日;****************************************DISP:LCALLWRNBYT;調7290顯示子程序JNBP3.2,$;鍵盤修改中斷服務程序INT_7290RETI;****************************************;****************************************INT_7290:PUSH00H;BUZZPUSH02H;****************************************PUSH03HBUZZL:PUSH07HPUSH04HPUSH07HMOVTMOD,#01H;方式1PUSHACCMOVTL0,#66H;低頻500HzMOVTH0,#0FCHPUSHPSWMOVR7,#50MOVR7,#07H;寫入?yún)?shù)個數(shù)1-LCALLFLASHMOVR0,#20H;參數(shù)和控制命令緩沖區(qū)JBP3.3,$首地址LCALLRDKEYMOVR2,#02H;從器件內部從地址MOVR3,#WSLA_8563;準備向8563寫入數(shù)CJNEA,#0AH,STEP1;判斷鍵值是否滿足小據(jù)串時個位的要求(小于10)STEP1:JNCERROR2MOVR4,#RSLA_8563;準備從8563讀取數(shù)ANL14H,#0F0H據(jù)串ORL14H,ALCALLRDADDMOVA,14H入秒單元MOV12H,20H;寫MOV13H,21H;寫入分單元CJNEA,#24H,JJJ;判斷小時的值是否滿足要MOV14H,22H;寫入時單元求(小于24)JJJ:JNCERROR2RE:JBP3.3,$;以查詢方式等待下一次按鍵LCALLWR8563LCALLRDKEY;讀取鍵值CJNEA,#0AH,BKEY;判斷是否為A鍵LCALLCF;拆分,查表,R4(H),R3(L)AKEY:MOV51H,#80HMOV3EH,R3;回顯LCALLFLASHMOVR7,#01HJBP3.3,$MOVR0,#3EHLCALLRDKEYMOVR2,#16HMOVR3,#WSLA_7290CJNEA,#03H,HOUR1;判斷鍵入的數(shù)是否LCALLWRNBYT滿足小時十位的要求HOUR1:JNCERROR1;若鍵值大于2,則報錯MOV51H,#00H;停止閃爍LCALLFLASHSWAPA;將鍵值處理成小時數(shù)據(jù)的十位ANL14H,#0FHLJMPDOWNERROR2:LCALLBUZZHORL14H,A;小時數(shù)據(jù)的十位生成LJMPHOUR2LCALLWR8563;寫入8563BKEY:CJNEA,#0BH,CKEYLCALLCF;拆分,查表,R4(H),R3(L)MOV51H,#10HMOV3FH,R4;回顯MOVR7,#01HLCALLFLASHMOVR0,#3FHJBP3.3,$MOVR2,#17HLCALLRDKEYMOVR3,#WSLA_7290CJNEA,#06H,MIN1LCALLWRNBYTMIN1:JNCERROR3LJMPHOUR2SWAPAANL13H,#0FHERROR1:LCALLBUZZH;報錯,返回重新鍵入LJMPAKEYORL13H,AHOUR2:MOV51H,#40HLCALLWR85632-CJNEA,#06H,SEC1LCALLCF;拆分,查表,R4(H),R3(L)SEC1:JNCERROR5MOV3CH,R4;回顯MOVR7,#01HSWAPAMOVR0,#3CHANL12H,#0FHMOVR2,#14HORL12H,AMOVR3,#WSLA_7290LCALLWR8563LCALLWRNBYTLCALLCF;拆分,查表,R4(H),R3(L)LJMPMIN2MOV39H,R4;回顯ERROR3:LCALLBUZZHMOVR7,#01HLJMPBKEYMOVR0,#39HMIN2:MOV51H,#08HMOVR2,#11HLCALLFLASHMOVR3,#WSLA_7290JBP3.3,$LCALLWRNBYTLCALLRDKEYLJMPSEC2CJNEA,#0AH,STEP2ERROR5:LCALLBUZZHLJMPCKEYSTEP2:JNCERROR4ANL13H,#0F0HSEC2:MOV51H,#01HORL13H,ALCALLFLASHLCALLWR8563JBP3.3,$LCALLRDKEYLCALLCF;拆分,查表,R4(H),R3(L)CJNEA,#0AH,STEP3MOV3BH,R3;回顯MOVR7,#01HSTEP3:JNCERROR6ANL12H,#0F0HMOVR0,#3BHMOVR2,#13HORL12H,AMOVR3,#WSLA_7290LCALLWR8563LCALLWRNBYTLCALLCF;拆分,查表,R4(H),R3(L)MOV51H,#00HMOV38H,R3;回顯LCALLFLASHMOVR7,#01HLJMPDOWNMOVR0,#38HERROR4:LCALLBUZZHMOVR2,#10HLJMPMIN2MOVR3,#WSLA_7290CKEY:CJNEA,#0CH,ERRORLCALLWRNBYTMOV51H,#02HMOV51H,#00HLCALLFLASHLCALLFLASHJBP3.3,$LJMPDOWNLCALLRDKEYERROR6:LCALLBUZZH-3-LJMPSEC2MOVR3,#WSLA_8563LCALLWRNBYTERROR:LCALLBUZZH;若鍵入數(shù)不為A、RETB、C中的一個,則報錯;****************************************LCALLDELAYLCALLBUZZL;閃爍子程序DOWN:CLRIE1;****************************************CLRIE0FLASH:PUSH00HPUSH02HPOPPSWPOPACCPUSH03HPOP07HPUSH07HPOP04HMOV50H,#70HPOP03HMOVR7,#02HPOP02HMOVR0,#50HPOP00HMOVR2,#07HRETIMOVR3,#WSLA_7290LCALLWRNBYT;****************************************POP07H;讀鍵值子程序(出口參數(shù)累加器A——獲取到POP03H的鍵值)POP04HMOV21H,APOP04HMOV21H,AMOV3FH,R4MOVR3,AMOV3FH,R4MOVR3,A;****************************************POP02HRDKEY:MOVR0,#1FHPOP00HMOVR7,#01HRETMOVR2,#01H;****************************************MOVR3,#WSLA_7290;各子程序MOVR4,#RSLA_7290;****************************************LCALLRDADDCHAIFEN:PUSHPSWMOVA,1FHPUSHACCDECAPUSH03HRETPUSH04H;****************************************MOVA,20HLCALLCF;向日歷芯片寫入時間參數(shù)子程序MOV38H,R3;將RAM的10H-1DH中的時間參數(shù)(含控制字)MOV39H,R4寫入芯片的00H-0DH單元;****************************************MOV3AH,#02HWR8563:MOVR7,#0EHMOVA,21HMOVR0,#10HLCALLCFMOVR2,#00HMOV3BH,R3-4-MOV3CH,R4PUSHDPLMOV3DH,#02HMOVDPTR,#LEDSEGMOVA,22HMOVR2,ALCALLCFANLA,#0FHMOV3EH,R3MOVCA,@A+DPTRMOVA,23HMOVA,R2LCALLCFSWAPAMOVA,R3ANLA,#0FHORLA,#01HMOVCA,@A+DPTRMOVR3,AMOVR4,AMOV28H,R3POPDPLMOV29H,R4POPDPHMOVA,25HPOP02HLCALLCFRETMOVA,R3LEDSEG:DBORLA,#01H0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4HMOVR3,ADBMOV2AH,R30FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHMOV2BH,R4;****************************************MOVA,26H;將20H-26H中從PCF8563T中讀出的7個字節(jié)LCALLCF參數(shù)的無關位屏蔽掉MOVA,R3;****************************************ORLA,#01HADJUST:PUSHACCMOVR3,AMOVA,20HMOV2CH,R3ANLA,#7FHMOV2DH,R4MOV20H,AMOV2EH,#0FCHMOVA,21HMOV2FH,#0DAHANLA,#7FHPOP01HPOP01HPOP03HMOVA,22HPOPACCANLA,#3FHPOPPSWMOV22H,ARETMOVA,23HCF:PUSH02HANLA,#3FHPUSHDPHMOV23H,A-5-MOVA,24HANLA,#07HMOV24H,AMOVA,25HANLA,#1FHMOV25H,APOPACCRET;****************************************;;延時子程序;****************************************;DELAY:PUSH00HPUSH01HMOVR0,#00HDELAY1:MOVR1,#01HDJNZR1,$DJNZR0,DELAY1POP00HRET;****************************************;;12c子程序;****************************************;END-6-9系統(tǒng)調試運行結果說明、分析所出現(xiàn)得問題,設計體會與建議硬件環(huán)境:DP-51PROC單片機綜合仿真實驗臺,TKSMonitor51仿真器。軟件環(huán)境:PC及Keil軟件。結果說明:可通過8563日歷顯示芯片將時間顯示在數(shù)碼管上,按KEY1鍵可顯示日期,按人、B、C鍵可分別改變時、分、秒,按錯鍵時會有警告音提醒并要求重新輸入??蛇M行整點報時。調試中出現(xiàn)的問題及解決方法:(1)顯示兩位小時、兩位分鐘和兩位秒?yún)?shù),相互之間有分隔符號功能:在該環(huán)節(jié)中,利用書上的參考程序,實現(xiàn)每1s進入一次中斷實現(xiàn)讀取時間參數(shù),并進行拆分顯示等操作。最后能夠在數(shù)碼管上顯示出初始設置的時間,當按下key1鍵時可以顯示初始設置的日期。(2)整點報時功能:設置兩個驅動蜂鳴器發(fā)聲的子程序,一個發(fā)聲頻率為500HZ,另外一個為1500HZ。成功實現(xiàn)了當時間為59分55秒~59分59秒時以500Hz的頻率發(fā)聲,時間為整點時以1500HZ的頻率發(fā)聲(3)鍵盤修改時間功能:這部分程序是整個程序的難點,修改的過程為從8563讀取數(shù)據(jù)存入單片機,在單片機內修改后存回8563,并寫入729

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論