單片機(jī)綜合設(shè)計(jì)說明_第1頁
單片機(jī)綜合設(shè)計(jì)說明_第2頁
單片機(jī)綜合設(shè)計(jì)說明_第3頁
單片機(jī)綜合設(shè)計(jì)說明_第4頁
單片機(jī)綜合設(shè)計(jì)說明_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 .大連理工大學(xué)本科設(shè)計(jì)報(bào)告題目:基于7290的LED時(shí)鐘系統(tǒng)設(shè)計(jì) 課程名稱: 單片機(jī)綜合設(shè)計(jì) 學(xué)院(系): 電子信息與電氣工程學(xué)部專 業(yè): 電子信息工程 班 級 電子0804 學(xué) 號: 200801204 學(xué)生姓名: 宋陸陽 成 績: 2011 年 05 月 23 日題目:基于7290的LED時(shí)鐘系統(tǒng)設(shè)計(jì)1 設(shè)計(jì)要求1)顯示功能:a.用開關(guān)K1K2切換用8位數(shù)碼管顯示當(dāng)前“時(shí)-分-秒”;b.用開關(guān)K1K2切換用8位數(shù)碼管顯示當(dāng)前“年-月-分”;c.用開關(guān)K1K2切換用8位數(shù)碼管顯示報(bào)警“日.時(shí)-分”。2)修改功能: a.能夠通過按鍵操作修改當(dāng)前時(shí)、分、秒并顯示;b.能夠通過按鍵操作修改報(bào)警時(shí)

2、、分并顯示。3) 錯(cuò)誤提示功能:當(dāng)輸入修改值不符合時(shí)間合法數(shù)值時(shí)即時(shí)大于24,分大于60,秒大于60,提示"Error"錯(cuò)誤,并返回正常走表。4)報(bào)警功能:a.整點(diǎn)報(bào)時(shí)功能:59分55秒開始每秒響一下,且00秒頻率提高;b.定時(shí)報(bào)警:當(dāng)當(dāng)前走表時(shí)間與所設(shè)置的報(bào)警時(shí)間一致時(shí),驅(qū)動(dòng)蜂鳴器產(chǎn)生“DO.RA.MI.FA.SO.LA.XI.DUO.”的鈴音進(jìn)行定時(shí)報(bào)警。2 設(shè)計(jì)分析及系統(tǒng)方案設(shè)計(jì)1. 主程序結(jié)構(gòu):無限循環(huán)結(jié)構(gòu).完成初始化功能:進(jìn)行7290復(fù)位,初始化PCF8563T的時(shí)間數(shù)據(jù),對中斷INT0,INT1進(jìn)行工作方式設(shè)置,開中斷,并進(jìn)入無限循環(huán)且等待中斷產(chǎn)生.2.中斷IN

3、T0:順序結(jié)構(gòu)每秒鐘PCF8567的CLKOUT產(chǎn)生一個(gè)中斷,從PCF8563T中讀入數(shù)據(jù)進(jìn)行調(diào)整拆分送入內(nèi)存,時(shí)鐘秒加一并顯示,當(dāng)K1=1,K2=1時(shí),8位數(shù)碼管顯示當(dāng)前“時(shí)-分-秒”;當(dāng)K1=0時(shí),8位數(shù)碼管顯示當(dāng)前“年-月-分”;K1=1,K2=0時(shí),8位數(shù)碼管顯示報(bào)警“日.時(shí)-分”.判斷當(dāng)前時(shí)間是否為整點(diǎn),若是,則從分秒開始每秒鐘驅(qū)動(dòng)蜂鳴器每秒響1000HZ鈴音0.5秒,秒頻率提高;判斷當(dāng)前時(shí)間是否與所設(shè)置報(bào)警時(shí)間相同,若滿足要求,則驅(qū)動(dòng)蜂鳴器產(chǎn)生一個(gè)“DO.RA.MI.FA.SO.LA.XI.DUO.”的鈴聲。.中斷INT1:順序結(jié)構(gòu)當(dāng)有按鍵操作時(shí)產(chǎn)生中斷。讀取鍵值,當(dāng)按鏈介于“AE

4、”選擇需修改的內(nèi)容:A:修改當(dāng)前時(shí)間“時(shí)”;B:修改當(dāng)前時(shí)間“秒”;C:修改當(dāng)前時(shí)間“分”;D:修改報(bào)警時(shí)間“時(shí)”;E:修改報(bào)警時(shí)間“分”,然后等待輸入2次按鍵"0-9"所修改數(shù)據(jù),當(dāng)輸入數(shù)據(jù)部符合時(shí)間格式時(shí),即時(shí)大于24,分大于60,秒大于60,顯示提示“Error”并返回主程序,當(dāng)輸入數(shù)據(jù)符合正常時(shí)間格式時(shí),回顯,并退出中斷;若輸入其它鍵則無操作退出中斷.3系統(tǒng)電路圖ZLG7290BPCF8563T4 外圍接口模塊硬件電路功能描述P3.2接PC8567的CLKOUT,每秒產(chǎn)生一次中斷;P3.3接ZLG7290B,當(dāng)有按鍵操作時(shí)產(chǎn)生中斷;P1.3接蜂鳴器;P1.2接開關(guān)K

5、1,選擇切換顯示當(dāng)前“時(shí)分秒”或“年月日”;P1.4接開關(guān)K2,選擇切換顯示當(dāng)前時(shí)間或報(bào)警“日時(shí)分”;P1.7接ZLG7290復(fù)位鍵;P1.0接I2C通訊線SDA;P1.1接I2C通訊線SCK。89C51:89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MC

6、S-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的89C51是一種高效微控制器,89C2051是它的一種精簡版本。89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。 ZLG7290B:ZLG7290B是廣州周立功單片機(jī)發(fā)展有限公司自行設(shè)計(jì)的數(shù)碼管動(dòng)態(tài)顯示驅(qū)動(dòng)、建鍵盤掃描管理芯片。能夠驅(qū)動(dòng)8位共陰極結(jié)構(gòu)的LED數(shù)碼管或64位獨(dú)立的LED,同時(shí)還能掃描管理多達(dá)64個(gè)按鍵(S1-S56、F0-F7)的掃描識別。其中8只?。‵0-F7)可以作為功能鍵使用就像電腦鍵盤上的Ctrl、Shift、Alt鍵一樣。另外ZLG7290B 內(nèi)部還設(shè)置有連擊

7、計(jì)數(shù)器,能夠使某些按鍵按下后不松手而連續(xù)有效。接口采用I2C結(jié)構(gòu)。該芯片為工業(yè)級芯片,被廣泛運(yùn)用于儀器儀表等工業(yè)測量領(lǐng)域的電路設(shè)計(jì)中。特點(diǎn):直接驅(qū)動(dòng)1英寸以下的8位LED共陰極數(shù)碼管或獨(dú)立的64位LED ;能夠管理多達(dá)64只按鍵。具有自動(dòng)去抖,其中8只按鍵可直接作為功能鍵使用;段電流可達(dá)20mA。位電流可達(dá)100mA以上;利用外接功率驅(qū)動(dòng)器可以驅(qū)動(dòng)一英寸以上的大型數(shù)碼管;具有閃爍、段點(diǎn)亮、段熄滅、功能鍵、連擊計(jì)數(shù)等功能;提供10種數(shù)字、21種字母的譯碼顯示功能,也可以將字形碼寫入顯示寄存器直接顯示數(shù)據(jù);系統(tǒng)僅使用鍵盤電路時(shí),工作電流為1mA;與主控器之間采用I2C 接口,僅需兩條信號線;工作電

8、壓范圍:+3.3+5.5V;工作溫度范圍:-40+85;封裝:DIP24(窄體) 或SOP-24.PCF8563T:PCF8563T 是低功耗CMOS實(shí)時(shí)時(shí)鐘/日歷芯片,它具有一個(gè)可編程的時(shí)鐘輸出,一個(gè)中斷輸出和掉電檢測電路,與外部主控器之間通過I2C總線連接。最大總線速度為400KHZ。每次對其的讀寫操作內(nèi)部的地址寄存器都會(huì)自動(dòng)產(chǎn)生增量。PCF8563T內(nèi)部具有16個(gè)8位的寄存器;一個(gè)可自動(dòng)增量的地址寄存器;一個(gè)32.768KHZ的振蕩器(具有集成的補(bǔ)償電容),一個(gè)用與為實(shí)時(shí)時(shí)鐘RTC提供時(shí)鐘源的分頻器;一個(gè)可編程的時(shí)鐘輸出電路;一個(gè)定時(shí)器;一個(gè)報(bào)警器;一個(gè)掉電檢測電路和一個(gè)400KHZ的I

9、2C總線接口5 主程序中主要變量定義變量名稱RAM單元/寄存器功能當(dāng)前時(shí)間值10H-1DH程序初始時(shí)存儲(chǔ)初始時(shí)間,當(dāng)運(yùn)行后存當(dāng)前時(shí)間PC8563時(shí)間20H-29H存儲(chǔ)從PC8563中讀出當(dāng)前的時(shí)間參數(shù)當(dāng)前時(shí)間130H-37H存儲(chǔ)處理無效位后當(dāng)前日、月、年信息當(dāng)前時(shí)間238H-3FH存儲(chǔ)處理無效位后當(dāng)前秒、時(shí)、分信息報(bào)警時(shí)間40H-47H存儲(chǔ)處理無效位后報(bào)警日、時(shí)、分信息Data50H-57H存儲(chǔ)“Error”的查表信息數(shù)據(jù)個(gè)數(shù)R7I2C操作時(shí)讀入數(shù)據(jù)個(gè)數(shù)目標(biāo)地址R0I2C操作時(shí)目標(biāo)數(shù)據(jù)塊首址器件地址R2I2C操作時(shí)器件內(nèi)部從地址寫地址R3I2C寫操作時(shí)地址讀地址R4I2C讀操作時(shí)地址6系統(tǒng)軟件

10、中各個(gè)子程序的功能描述子程序名稱入口參數(shù)出口參數(shù)功能 描述INT_RCT無無走表中斷子程序,并且判斷整點(diǎn)鬧鈴以及報(bào)警INT_7290無無按鍵中斷子程序,修改當(dāng)前“時(shí)分秒”或者報(bào)警“時(shí)分”可以進(jìn)行輸入錯(cuò)誤提示,回顯等功能ALARM無無產(chǎn)生0.5秒1000HZ音頻ALARM1R5、R6無產(chǎn)生指定頻率音頻0.5秒CHAFEN20H-2AH30H-47H對20H-2AH數(shù)據(jù)進(jìn)行拆分CFAR3、R4把A拆分成獨(dú)立BCD碼ADJUST20H-26H20H-26H屏蔽PCF8563讀出無關(guān)位DIS_ERR無無LED顯示“Error”RDKEY無A讀按鍵值WR8563寫8563操作DELAY無無延時(shí)子程序7

11、主程序程序流程圖開辟一個(gè)數(shù)據(jù)區(qū)10H-1DH存儲(chǔ)時(shí)間、data-data+7存儲(chǔ)顯示命令參數(shù)等待中斷主程序流程圖主程序?qū)?0H-1DH存儲(chǔ)時(shí)間、命令參數(shù)送PCF8563T中A鍵?查詢按鍵?按鍵定義A鍵:修改小時(shí)B鍵:修改分;C鍵:修改秒;D鍵:修改按鍵時(shí);E鍵:修改按鍵分;YYNYINT1讀取鍵值查詢按鍵?N讀取鍵值送小時(shí)的位RETINC鍵?B鍵?當(dāng)前分鐘處理( 同小時(shí) 處理 )當(dāng)前秒處理 ( 同小時(shí)處理 )開中斷YN關(guān)中斷YYN調(diào)拆分、查表送28H-2FH 送7290調(diào)顯示N將51的10H-1DH的數(shù)據(jù)送PCF8563TD鍵?報(bào)警時(shí)處理 ( 同小時(shí)處理 )D鍵?報(bào)警時(shí)處理 ( 同小時(shí)處理 )

12、NYYN數(shù)據(jù)合法NY讀取鍵值送小時(shí)的時(shí)位數(shù)據(jù)合法YN調(diào)程序顯示"Error"按鍵中斷INT_7290利用RDADD從PCF8563T中讀出時(shí)間參數(shù)送20H-2AH利用ADJUST屏蔽掉參數(shù)中的無用的位中斷服務(wù)NINTernetINTernet調(diào)CHAFEN子程序?qū)r(shí)間分別送28H-2FH、38H-3FH緩沖區(qū)P1.2=1?RETI顯示時(shí)分秒顯示年月日NY報(bào)警時(shí)間到整點(diǎn)時(shí)間到P1.4=1?顯示報(bào)警日時(shí)分產(chǎn)生報(bào)警鬧鈴產(chǎn)生整點(diǎn)鬧鈴YYNN終端服務(wù)INT0鬧鈴1000HZ,0.5ms ALARM:程序入口PUSH PSWPUSH 07HT0.T1初始化R710啟動(dòng)T0.T1NTF0

13、=1?YT0初值,TF00驅(qū)動(dòng)BUZZNYTF1=1?T1初值,TF10NR7-1R7 R7=0?Y關(guān)閉T0.T1POP 07HPOP PSW8程序清單SDABITP1.0;定義I2C信號引腳SCLBITP1.1 WSLAEQU070HRSLAEQU071HDISDAEQU20H;源數(shù)據(jù)塊首地址DISCONEQU08H;寫入數(shù)據(jù)個(gè)數(shù)DATA_1EQU50H;變量區(qū)首地址WSLA_8563EQU0A2H;PCF8563口地址RSLA_8563EQU0A3HWSLA_7290EQU70H;ZLG7290口地址RSLA_7290EQU71HORG8000HLJMP8100H ORG8003HLJMP

14、INT_RCTORG8100HORG8013HLJMPINT_7290ORG8100HSTART: MOVSP,#60HCLRP1.7 ;7290復(fù)位LCALLDELAYSETBP1.7;*;設(shè)定PCF8563的時(shí)間和命令參數(shù)(參數(shù)和控制命令緩沖區(qū)10H-1DH);*MOV10H,#00H;啟動(dòng)控制字MOV11H,#1FH;設(shè)置報(bào)警及定時(shí)器中斷MOV12H,#55H ;秒單元MOV13H,#37H;分單元MOV14H,#10H;小時(shí)單元MOV15H,#26H ;日期單元MOV16H,#03H ;星期單元MOV17H,#05H ;月單元 MOV18H,#10H;年單元MOV19H,#36H ;設(shè)

15、定分報(bào)警MOV1AH,#10H;設(shè)定小時(shí)報(bào)警MOV1BH,#26H ;設(shè)定日報(bào)警MOV1CH,#03H;設(shè)定星期報(bào)警MOV1DH,#83H;設(shè)定CLKOUT的頻率(1S)MOVDATA_1, #13H;變量緩沖區(qū)(顯示 "Error " )MOVDATA_1+1,#13H;注意:MOVDATA_1+2,#13H ;變量取值范圍0-FMOVDATA_1+3,#11HMOVDATA_1+4,#12HMOVDATA_1+5,#11HMOVDATA_1+6,#11H MOVDATA_1+7,#10H;*MOVR7,#0EH;寫入?yún)?shù)個(gè)數(shù)(時(shí)間和控制字) MOVR0,#10H ;參數(shù)

16、和控制命令緩沖區(qū)首地址MOVR2,#00H;從器件內(nèi)部從地址MOVR3,#WSLA_8563;準(zhǔn)備向PCF8563T寫入數(shù)據(jù)串LCALLWRNBYT;寫入時(shí)間、控制命令到8563 SETBEAMOVTCON,#00HSETBEX0CLRIT0SETBEX1SETBIT1SJMP$ ;等待中斷;*;中斷服務(wù)INT_RCT子程序;*INT_RCT:MOVR7,#0AH;讀出數(shù)個(gè)數(shù)MOVR0,#20H ;目標(biāo)數(shù)據(jù)塊首址MOVR2,#02H;從器件內(nèi)部從地址MOVR3,#WSLA_8563MOVR4,#RSLA_8563;準(zhǔn)備讀PCF8563T的時(shí)間參數(shù)LCALLRDADD;調(diào)讀數(shù)據(jù)子程序,將讀出的數(shù)

17、據(jù);存放于單片機(jī)20-26H中LCALLADJUST;調(diào)時(shí)間調(diào)整子程序MOV12H,20HMOV13H,21HMOV14H,22HMOV19H,27HMOV1AH,28HMOV1BH,29HLCALLCHAFEN ;調(diào)拆分子程序(包含查表) MOVA,22H;判斷是否到定時(shí)時(shí)間CJNEA,28H,MMBUYMOVA,21HCJNEA,27H,MMBUYMOVA,#00HCJNEA,20H,MJ_1MOVR5,#21HMOVR6,#0F9HCALLALARM1MJ_1:MOVA,#01HCJNEA,20H,MJ_2MOVR5,#0E0HMOVR6,#0F9HCALLALARM1MJ_2:MOVA

18、,#02HCJNEA,20H,MJ_3MOVR5,#8BHMOVR6,#0FAHCALLALARM1MJ_3:MOVA,#03HCJNEA,20H,MJ_4MOVR5,#0D7HMOVR6,#0FAHCALLALARM1MJ_4:MOVA,#04HCJNEA,20H,MJ_5MOVR5,#67HMOVR6,#0FBHCALLALARM1MJ_5:MOVA,#05HCJNEA,20H,MJ_6MOVR5,#0E8HMOVR6,#0FBHCALLALARM1MJ_6:MOVA,#06HCJNEA,20H,MJ_7MOVR5,#5BHMOVR6,#0FCHCALLALARM1MJ_7:MOVA,#0

19、7HCJNEA,20H,MMBUYMOVR5,#8EHMOVR6,#0FCHCALLALARM1MMBUY:MOVA,#59H;判斷是否整點(diǎn)CJNEA,21H,LCMOVA,#55HCJNEA,20H,LC_1LCALLALARMLC_1:MOVA,#56HCJNEA,20H,LC_2CALLALARMLC_2:MOVA,#57HCJNEA,20H,LC_3CALLALARMLC_3:MOVA,#58HCJNEA,20H,LC_4CALLALARMLC_4:MOVA,#59HCJNEA,20H,LCCALLALARMLC:MOVA,#00HCJNEA,21H,LCCCJNEA,20H,LCCM

20、OVR5,#44HMOVR6,#0FEHCALLALARM1LCC:MOVR7,#08HMOVR2,#10HMOVR3,#WSLA_7290JNBP1.2,YEARS;使用P1.2控制顯示內(nèi)容JNBP1.4,BAOJINMOVR0,#38H;顯示小時(shí)、分鐘和秒SJMPDISPYEARS:MOVR0,#30H ;顯示年、月和日期SJMPDISPBAOJIN:MOVR0,#40HDISP:LCALLWRNBYT;調(diào)7290顯示JNBP3.2,$RETI;*;ALARM;*ALARM:PUSHPSW;產(chǎn)生0.5秒1000HZ音頻PUSH07HMOVTMOD,#11HMOVTL0,#33HMOVTH0

21、,#0FEHMOVTL1,#0FCHMOVTH1,#4BHSETBTR0SETBTR1LOOPC:JNBTF0,$MOVTL0,#33HMOVTH0,#0FEHCLRTF0CPLP1.3JBTF1,LOOPCMOVTL1,#0FCHMOVTH1,#4BHCLRTF1DJNZR7,LOOPCCLRTR0CLRTR1POP07HPOPPSWRETALARM1:PUSHPSW;產(chǎn)生指定頻率音頻0.5秒PUSH07HMOVTMOD,#11HMOVTL0,R5MOVTH0,R6MOVTL1,#0FCHMOVTH1,#4BHSETBTR0SETBTR1LOOPD:JNBTF0,$MOVTL0,R5MOVT

22、H0,R6CLRTF0CPLP1.3JBTF1,LOOPDMOVTL1,#0FCHMOVTH1,#4BHCLRTF1DJNZR7,LOOPDCLRTR0CLRTR1POP07HPOPPSWRET;*;各子程序;* ORG8300H CHAFEN:PUSHPSW ;對20H-2AH單元的參數(shù)拆分,PUSHACC;查表后送28H-2FH(年月日) PUSH 03H ;和38H-3FH (時(shí)分秒)PUSH04HMOVA,20H;取秒?yún)?shù)LCALLCF ;拆分、查表在R4(H)、R3中MOV38H,R3;送秒的個(gè)位MOV39H,R4;送秒的十位MOV3AH,#02H;送分隔符-MOVA,21H;取分參

23、數(shù)LCALLCF ;拆分、查表在R4(H)、R3中MOV3BH,R3;送分的個(gè)位MOV3CH,R4;送分的十位MOV3DH,#02H;送分隔符-MOVA,22H;取小時(shí)參數(shù)LCALLCF ;拆分、查表在R4(H)、R3中MOV3EH,R3;送小時(shí)的個(gè)位MOV3FH,R4;送小時(shí)的十位MOVA,23H;取日起參數(shù)LCALLCFMOVA,R3ORLA,#01HMOVR3,AMOV30H,R3MOV31H,R4MOVA,25H;取月參數(shù)LCALLCFMOVA,R3ORLA,#01HMOVR3,AMOV32H,R3MOV33H,R4MOVA,26H;取年參數(shù)LCALLCFMOVA,R3ORLA,#01

24、HMOVR3,AMOV34H,R3MOV35H,R4MOV36H,#0FCH;年的高兩位處理MOV37H,#0DAHMOVA,27H;報(bào)警分LCALLCFMOV40H,R3MOV41H,R4MOV42H,#02HMOVA,28H;報(bào)警時(shí)LCALLCFMOV43H,R3MOV44H,R4MOV45H,#01MOVA,29H;報(bào)警日LCALLCFMOV46H,R3MOV47H,R4POP04HPOP03HPOPACCPOPPSW;*CF:PUSH02H ;將A中的數(shù)據(jù)拆分為兩個(gè)獨(dú)立的PUSHDPH; BCD碼并查表PUSHDPL; 結(jié)果分別存于R4、R3中MOVDPTR,#LEDSEGMOVR2,

25、AANLA,#0FHMOVCA,A+DPTRMOVR3,AMOVA,R2SWAPAANLA,#0FHMOVCA,A+DPTRMOVR4,APOPDPLPOPDPHPOP02HRET;*;將20H -26H中從PCF8563中讀出的7個(gè)字節(jié)參數(shù)的無關(guān)位屏蔽掉(參見表8.7);*ADJUST:PUSHACCMOVA,20H ;處理秒單元ANLA,#7FHMOV20H,AMOVA,21H;處理分單元ANLA,#7FHMOV21H,AMOVA,22H;處理小時(shí)單元ANLA,#3FHMOV22H,AMOVA,23H;處理日期單元ANLA,#3FHMOV23H,AMOVA,24H;處理星期單元ANLA,#

26、07HMOV24H,AMOVA,25H;處理月單元ANLA,#1FHMOV25H,APOPACCRET;*;中斷服務(wù)INT_7290子程序;*INT_7290:PUSH00HPUSH02HPUSH03HPUSH04HPUSH07HPUSHACCPUSHPSWLCALLRDKEY;讀取第一個(gè)按鍵值(功能鍵)CJNEA,#0AH,MINUTE;判斷是A鍵嗎?;是A鍵時(shí)開始處理小時(shí)數(shù)據(jù)AKEY_1:JBP3.3,$;以查詢的方式等待下一次按鍵操作LCALLRDKEY;讀取第二個(gè)按鍵值(小時(shí)的十位數(shù)?SWAPA;處理輸入的數(shù)據(jù)(十位)CJNEA,#00H,X_1SJMPXXX_1:CJNEA,#10H

27、,X_2SJMPXXX_2:CJNEA,#20H,X_3SJMPXXX_3:LJMPDIS_ERRXX:ANL14H,#0FHORL14H,AJBP3.3,$;以查詢的方式等待下一次按鍵操作LCALLRDKEY;讀取第三個(gè)按鍵值(小時(shí)的個(gè)位數(shù))CJNEA,#00H,Y_1LJMPYYY_1:CJNEA,#01H,Y_2LJMPYYY_2:CJNEA,#02H,Y_3LJMPYYY_3:CJNEA,#03H,Y_4LJMPYYY_4:CJNEA,#04H,Y_5LJMPYYY_5:LJMPDIS_ERRYY:ANL14H,#0F0H;處理輸入的數(shù)據(jù)(個(gè)位)ORL14H,ALCALLWR8563L

28、JMPBACKMINUTE:CJNEA,#0BH,SECOND;判斷是B鍵嗎?是B鍵時(shí)開始處理分?jǐn)?shù)據(jù)AKEY_2:JBP3.3,$;以查詢的方式等待下一次按鍵操作LCALLRDKEY;讀取第二個(gè)按鍵值(分鐘的十位數(shù)?SWAPA;處理輸入的數(shù)據(jù)(十位)CJNEA,#00H,Z_1SJMPZZZ_1:CJNEA,#10H,Z_2SJMPZZZ_2:CJNEA,#20H,Z_3SJMPZZZ_3:CJNEA,#30H,Z_4SJMPZZZ_4:CJNEA,#40H,Z_5SJMPZZZ_5:CJNEA,#50H,Z_6SJMPZZZ_6:LJMPDIS_ERRZZ:ANL13H,#0FHORL13H

29、,AJBP3.3,$;以查詢的方式等待下一次按鍵操作LCALLRDKEY;讀取第三個(gè)按鍵值(分鐘的個(gè)位數(shù))ANL13H,#0F0H;處理輸入的數(shù)據(jù)(個(gè)位)ORL13H,ALCALLWR8563;將修改后的時(shí)間參數(shù)送PCF8563LJMPBACKSECOND:CJNEA,#0CH,HOUR_1;判斷是C鍵嗎?是C鍵時(shí)開始處理秒數(shù)據(jù)AKEY_3:JBP3.3,$;以查詢的方式等待下一次按鍵操作LCALLRDKEY;讀取第二個(gè)按鍵值(秒的十位數(shù)?SWAPA;處理輸入的數(shù)據(jù)(十位)CJNEA,#00H,Q_1SJMPQQQ_1:CJNEA,#10H,Q_2SJMPQQQ_2:CJNEA,#20H,Q_

30、3SJMPQQQ_3:CJNEA,#30H,Q_4SJMPQQQ_4:CJNEA,#40H,Q_5SJMPQQQ_5:CJNEA,#50H,Q_6SJMPQQQ_6:LJMPDIS_ERRQQ:ANL12H,#0FHORL12H,AJBP3.3,$;以查詢的方式等待下一次按鍵操作LCALLRDKEY;讀取第三個(gè)按鍵值(秒的個(gè)位數(shù))ANL12H,#0F0H;處理輸入的數(shù)據(jù)(個(gè)位)ORL12H,ALCALLWR8563;將修改后的時(shí)間參數(shù)送PCF8563LJMPBACKHOUR_1:CJNEA,#0DH,MIN_1;判斷是D鍵嗎?;是D鍵時(shí)開始處理報(bào)警小時(shí)數(shù)據(jù)AKEY_4:JBP3.3,$;以查詢

31、的方式等待下一次按鍵操作LCALLRDKEY;讀取第二個(gè)按鍵值(小時(shí)的十位數(shù)?SWAPA;處理輸入的數(shù)據(jù)(十位)CJNEA,#00H,E_1SJMPEEE_1:CJNEA,#10H,E_2SJMPEEE_2:CJNEA,#20H,E_3SJMPEEE_3:LJMPDIS_ERREE:ANL1AH,#0FHORL1AH,AJBP3.3,$;以查詢的方式等待下一次按鍵操作LCALLRDKEY;讀取第三個(gè)按鍵值(小時(shí)的個(gè)位數(shù))CJNEA,#00H,F_1LJMPFFF_1:CJNEA,#01H,F_2LJMPFFF_2:CJNEA,#02H,F_3LJMPFFF_3:CJNEA,#03H,F_4LJ

32、MPFFF_4:CJNEA,#04H,F_5LJMPFFF_5:LJMPDIS_ERRFF:ANL1AH,#0F0H;處理輸入的數(shù)據(jù)(個(gè)位)ORL1AH,ALCALLWR8563SJMPBACKMIN_1:CJNEA,#0EH,BACK;判斷是E鍵嗎?;是E鍵時(shí)開始處理報(bào)警分?jǐn)?shù)據(jù)AKEY_5:JBP3.3,$;以查詢的方式等待下一次按鍵操作LCALLRDKEY;讀取第二個(gè)按鍵值(分鐘的十位數(shù)?SWAPA;處理輸入的數(shù)據(jù)(十位)CJNEA,#00H,S_1SJMPSSS_1:CJNEA,#10H,S_2SJMPSSS_2:CJNEA,#20H,S_3SJMPSSS_3:CJNEA,#30H,S_

33、4SJMPSSS_4:CJNEA,#40H,S_5SJMPSSS_5:CJNEA,#50H,S_6SJMPSSS_6:LJMPDIS_ERRSS:ANL19H,#0FHORL19H,AJBP3.3,$;以查詢的方式等待下一次按鍵操作LCALLRDKEY;讀取第三個(gè)按鍵值(分鐘的個(gè)位數(shù))ANL19H,#0F0H;處理輸入的數(shù)據(jù)(個(gè)位)ORL19H,ALCALLWR8563;將修改后的時(shí)間參數(shù)送PCF8563SJMPBACKBACK:CJNEA,#0FH,DOWNDOWN:CLRIE0;清標(biāo)志POPPSWPOPACCPOP07HPOP04HPOP03HPOP02HPOP00HRETI;*;DISP

34、AY "Error"*DIS_ERR:PUSH07HPUSH00HPUSH01HPUSH02HPUSH03HMOVDPTR,#LEDSEG ;開始對變量查表MOVR7,#DISCON;寫入數(shù)據(jù)個(gè)數(shù)MOVR0,#DISDA ;源數(shù)據(jù)塊首地址MOVR1,#DATA_1LOOP1:MOVA,R1MOVCA,A+DPTR ;查表得對應(yīng)的字形碼MOVR0,A ;送顯示緩沖區(qū)INCR1INCR0DJNZR7,LOOP1 MOV28H,#00HLOOP:MOVR7,#DISCONMOVR2,#10HMOVR3,#WSLAMOVR0,#DISDA LCALLWRNBYT;調(diào)顯示子程序LCA

35、LLDELAY LCALLDELAYPOP03HPOP02HPOP01HPOP00HPOP07HSJMPDOWN;*;讀鍵值子程序 (;出口參數(shù)累加器A-獲取到的鍵值) ;*RDKEY:MOVR0,#1FH;鍵值緩沖單元MOVR7,#01H;取一個(gè)數(shù)據(jù)(鍵值)MOVR2,#01H ;指向內(nèi)部數(shù)據(jù)鍵值寄存器地址MOVR3,#WSLA_7290;取器件地址(寫)MOVR4,#RSLA_7290;取器件地址(讀) LCALLRDADD;讀出7290的01H單元中的鍵值MOVA,1FH;取健值送緩沖單元DECARET;*;向日歷芯片寫入時(shí)間參數(shù)子程序;將RAM的10H-1DH中的時(shí)間參數(shù)(含控制字)寫

36、入芯片的00H-0DH單元;*WR8563:MOVR7,#0EH;寫入?yún)?shù)個(gè)數(shù)(時(shí)間和控制字) MOVR0,#10H ;參數(shù)和控制命令緩沖區(qū)首地址MOVR2,#00H;從器件內(nèi)部從地址MOVR3,#WSLA_8563;準(zhǔn)備向PCF8563T寫入數(shù)據(jù)串LCALLWRNBYT;寫入時(shí)間、控制命令到8563 RET;*;*LEDSEG:DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4HDB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHDB9EH,18H,3AH,00H ;E,r,o;*; 延時(shí)子程序;*DELAY:PUSH00HPUSH01HMOVR

37、0,#00HDELAY1:MOVR1,#00HDJNZR1,$DJNZR0,DELAY1POP01HPOP00HRET;*;由匯編語言編制的I2C通訊子程序;*;通用的I2C通訊子程序(多字節(jié)寫操作);入口參數(shù)R7字節(jié)數(shù),R0:源數(shù)據(jù)塊首地址;R0原數(shù)據(jù)塊首地址;R2從器件內(nèi)部子地址;R3:外圍器件地址(寫);*WRNBYT:PUSHPSWPUSHACCWRADD:MOVA,R3;取外圍器件地地址(包含r/w=0)LCALLSTA;發(fā)送起始信號S LCALLWRBYT;發(fā)送外圍地址LCALLCACK;檢測外圍器件的應(yīng)答信號JBF0,WRADD;如果應(yīng)MOVA,R2LCALLWRBYT;發(fā)送內(nèi)部

38、寄存器首地址LCALLCACK;檢測外圍器件的應(yīng)答信號JBF0,WRADD;如果應(yīng)答不正確返回重來 WRDA:MOVA,R0LCALLWRBYT;發(fā)送外圍地址LCALLCACK;檢測外圍器件的應(yīng)答信號JBF0,WRADD;如果應(yīng)答不正確返回重來INCR0DJNZ R7,WRDALCALLSTOP POPACCPOPPSWRET ;*;(2)帶有內(nèi)部單元地址的多字節(jié)讀操作子程序 RDADD ;*;通用的I2C通訊子程序(多字節(jié)讀操作);入口參數(shù)R7字節(jié)數(shù);;R0目標(biāo)數(shù)據(jù)塊首地址;R2從器件內(nèi)部子地址;;R3器件地址(寫);R4器件地址(讀);相關(guān)子程序WRBYT、STOP、CACK、STA、MNACK ;*RDADD: PUSHPSW;從PCF8563的02H單元讀入7個(gè)參數(shù)PUSHACC;存放于20H-26H單元RDADD1:LCALLSTA MOVA,R3;取器件地址(寫)LCALLWRBYT;發(fā)送外圍地址LCALLCACK;檢測外圍器件的應(yīng)答信號JBF0,RDADD1;如果應(yīng)答不正確返回重來MOVA,R2;取內(nèi)部地址LCALLWRBYT;發(fā)送外圍地址LCALLC

溫馨提示

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

最新文檔

評論

0/150

提交評論