?? 1302-12232f.asm
字號:
;****************************************************************;
; 1302時鐘程序( 用12232F顯示) ;
; ;
; AT89C52/12M晶振/編寫者h(yuǎn)ewende/2008.10.30 ;
; ;
;****************************************************************;
;
; 從1302中讀出的數(shù)據(jù)放在 52H(小時)51H(分鐘)50H(秒)
; 顯示緩沖單元 72H-73H(45H-44H)小時,75H-76H(43H-42H)分鐘,78H-79H(41H-40H)秒
; 定時器T1為調(diào)整時候閃爍用。
; 顯示式樣第一行為: 時間: 15:38:12
; 顯示式樣第二行為: 中文字符共7個
;*****************定義*********************;
;
SCLK EQU P3.2 ; 1302時鐘口,1302第7腳
IO EQU P3.3 ; 數(shù)據(jù)口,1302第6腳
RST EQU P3.4 ; 使能EQU302第5腳
KEYSW0 EQU P1.0 ; 調(diào)時按鍵
KEYSW1 EQU P1.1 ; 加1按鍵
KEYSW2 EQU P1.2 ; 減1按鍵
KEYSW3 EEQU P1.3 ;定時鬧鐘設(shè)定
hour DATAEQUH ; 1302讀出時
mintue DATA 51H ; 1302讀出分
second DATA 50H ; 1302讀出秒
DS1302_ADDR DATA 32H ; 1302需操作的地址數(shù)據(jù)存放
DS1302_DATA DATA 31H ; 1302讀出或需寫入的數(shù)據(jù)存放
INTCON DATA 30H ; 閃爍中斷計時用
CON_DATA DATA 06H ; 閃爍時間=65*6=0.39秒
;************LCD定義***********************;
LAMPBLAK EQU P2.4 ;背光燈控制,=0時開,=1時關(guān).
CS EQU P2.5 ;液晶使能,=1操作,=0禁止.
SID EQU P2.6 ;液晶串行數(shù)據(jù)輸入口
CLK EQU P2.7 ;液晶EQU作時鐘口
;
;*********************程序入口*********************;
;
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
LJMP INTT1
ORG 0023H
RETI
ORG 002BH
RETI
;
;*****************;主程序;*********************;
;
START:
CLR CS ;液晶操作禁止
mov SP, #80H ;堆棧在80H上
MOV 70H,#0AH ;放北京時間后的“:”代碼字
MOV 71H,#0FH ;空
MOV 74H,#0AH ; ": "
MOV 77H,#0AH ; ": "
MOV TMOD,#10H ;計數(shù)器1,方式1
MOV TL1,#00H
MOV TH1,#00H
MOV INTCON,#CON_DATA
CLR 00H ;清閃爍標(biāo)志
CLR 01H ;清閃爍標(biāo)志
SETB EA
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允許寫1302 ,#80,禁止
LCALL WRITE
MOV DS1302_ADDR,#90H
MOV DS1302_DATA,#0A6H;1302充電充電電流1.1MA;#A5:2.2MA,#A7:0.6MA
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302晶振開始振蕩;#80H,禁止
LCALL WRITE
;
LCALL SETUP ;LCD初始化
LCALL LOGON ;開機顯示畫面
LCALL TIME ;上行顯示"時間: 00:00:00"
;以下主程序
MAIN1: MOV DS1302_ADDR,#85H ;讀出小時
LCALL READ
MOV hour,DS1302_DATA
MOV DS1302_ADDR,#83H ;讀出分鐘
LCALL READ
MOV mintue,DS1302_DATA
MOV DS1302_ADDR,#81H ;讀出秒
LCALL READ
MOV second,DS1302_DATA
;
MOV R0,hour ;小時分離,送顯示緩存
LCALL DIVIDE
MOV 73H,R1 ;時個位
MOV 44H,R1
MOV 72H,R2 ;時十位
MOV 45H,R2
MOV R0,mintue ;分鐘分離,送顯示緩存
LCALL DIVIDE
MOV 76H,R1 ;時個位
MOV 42H,R1
MOV 75H,R2 ;時十位
MOV 43H,R2
MOV R0,second ;秒分離,送顯示緩存
LCALL DIVIDE
MOV 79H,R1 ;秒個位
MOV 40H,R1
MOV 78H,R2 ;秒十位
MOV 41H,R2
LCALL TIMEUP ;顯示涮新
;
JNB KEYSW0,SETG ;調(diào)整時間控制鍵
LJMP MAIN1
;
;******************公歷設(shè)置程序*********************;
;
SETG : SETB TR1
SETB ET1
MOV 78H,#00H ;調(diào)時時秒位為0
MOV 79H,#00H ;調(diào)時時秒位為0
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允許寫1302
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H ;1302停止振蕩
LCALL WRITE
;
SETG8: LCALL DELAY1
JNB KEYSW0,SETG8
SETG9:
JNB KEYSW0,SETG10
JNB KEYSW1,GADDHOUR
AJMP SETG9
GADDHOUR: LCALL DELAY1
JNB KEYSW1,GADDHOUR
MOV R7,52H ;小時加一
LCALL ADD1
MOV 52H,A
CJNE A,#24H,GADDHOUR11
GADDHOUR11: JC GADDHOUR1
MOV 52H,#00H
GADDHOUR1: MOV DS1302_ADDR,#84H ;小時值送人1302
MOV DS1302_DATA,52H
LCALL WRITE
MOV R0,52H
LCALL DIVIDE ;小時值分離送顯示緩存
MOV 73H,R1
MOV 44H,R1
MOV 72H,R2
MOV 45H,R2
WAITT5:
JNB KEYSW1,WAITT5
AJMP SETG9
SETG10: SETB 01H ;調(diào)分時候閃標(biāo)志
GWAIT10: LCALL DELAY1
JNB KEYSW0,GWAIT10
SETG11:
JNB KEYSW0,SETGOUT
JNB KEYSW1,GADDMINTUE
AJMP SETG11
GADDMINTUE: LCALL DELAY1
JNB KEYSW1,GADDMINTUE
MOV R7,51H ;分鐘加一
LCALL ADD1
MOV 51H,A
CJNE A,#60H,GADDMINTUE11
GADDMINTUE11: JC GADDMINTUE1
MOV 51H,#00H
GADDMINTUE1: MOV DS1302_ADDR,#82H ;分鐘值送人1302
MOV DS1302_DATA,51H
LCALL WRITE
MOV R0,51H
LCALL DIVIDE ;分鐘值分離送顯示緩存
MOV 76H,R1
MOV 42H,R1
MOV 75H,R2
MOV 43H,R2
WAITT6:
JNB KEYSW1,WAITT6
AJMP SETG11
SETGOUT: LCALL DELAY1
JNB KEYSW0,SETGOUT
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302晶振開始振蕩
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ;禁止寫入1302
LCALL WRITE
CLR 00H
CLR 01H
CLR ET1 ;關(guān)閃中斷
CLR TR1
LJMP MAIN1
;
;****************閃動調(diào)時程序*********************;
;
INTT1: PUSH ACC
PUSH PSW
DJNZ INTCON,GFLASHOUT
MOV INTCON,#CON_DATA
GFLASH: CPL 00H
JB 00H,GFLASH5
MOV 72H,45H ;全顯示
MOV 73H,44H
MOV 75H,43H
MOV 76H,42H
MOV 78H,41H
MOV 79H,40H
GFLASHOUT: LCALL TIMEUP
POP PSW
POP ACC
RETI
;
GFLASH5: JB 01H,GFLASH6 ;調(diào)小時閃
MOV 72H,#0FH
MOV 73H,#0FH
AJMP GFLASHOUT
GFLASH6: MOV 75H,#0FH ;調(diào)分鐘閃
MOV 76H,#0FH
AJMP GFLASHOUT
;
;*******************加一程序***************;
;
ADD1: MOV A,R7
ADD A,#01H
DA A
RET
;
;*****************分離程序**********************;
;
DIVIDE: MOV A,R0
ANL A,#0FH
MOV R1,A
MOV A,R0
SWAP A
ANL A,#0FH
MOV R2,A
RET
;
;****************寫1302程序****************;
;
WRITE: CLR SCLK
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
WRITE1: RRC A ;送地址給1302
NOP
NOP
CLR SCLK
NOP
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE1
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -