新手啊,費了好多天時(shí)間,這個(gè)加上軟件修正,初步完成的作品,不過(guò)走時(shí)很快,一小時(shí)快1分鐘,,電路板布線(xiàn)不好干擾大,1302好像不太穩定,,,以后再完善,想要時(shí)間日期交替顯示不知怎么做
32768晶振是從電子表上拆下來(lái)的,是沒(méi)問(wèn)題的,1小時(shí)快一分鐘太離譜了,是哪里出了問(wèn)題?布線(xiàn)到底要怎么樣,1302和晶振后面并無(wú)多余布線(xiàn)啊
urrsu新上圖
;6位數碼管顯示
;P0 為段碼口、P2 為位碼口
;晶振 11.0592M
;時(shí)鐘芯片:DS1302
;************** DS1302 端口位定義 **************
SCLK BIT P1.0 ; 數據傳送總線(xiàn)
IO BIT P1.1 ; 時(shí)鐘控制總線(xiàn)
RST BIT P1.2 ; 復位總線(xiàn)
K2 EQU P3.4 ;減1
K1 EQU P3.5 ;+1
K3 EQU P3.6 ;功能
BEEP EQU P3.7 ;蜂鳴器
T_CONU EQU 22H ;中斷計數
SSZZ EQU 32H ;校時(shí)變量
TIME EQU 50H ;顯示時(shí)間單元首地址
DATE EQU 56H ;顯示日期單元首地址
;------------------------------------------------
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INT_T0
ORG 0100H
;------------------------------------------------
MAIN:
BIJIAO DATA 30H ;分鐘比較變量,用于判斷分鐘不等相等時(shí)計數器加1
JISHUQI DATA 31H ;校時(shí)計數變量,用于校時(shí)時(shí)間計數
MOV SSZZ,#3;快多少秒?
MOV BIJIAO,#0
MOV JISHUQI,#0
MOV TMOD,#01H ;T0,方式1
MOV T_CONU,#0 ;中斷次數
MOV IE,#82H ;EA=1,ET0=1
MOV A,#00H
MOV R0,#40H ;從40H單元開(kāi)始
MOV R1,#40H ;清64個(gè)單元
M_CLEAR: MOV @R0,A
INC R0
DJNZ R1,M_CLEAR
MOV 7FH,#0AH ;送熄滅符
SETB BEEP
LCALL TIME_DELAY ;調顯示延時(shí)
LCALL GET_TIME;比較年份小于10年就初始化
mov a,#10
cjne a,45H,BD
ajmp MAIN1 ;10=45H
BD: jc MAIN1 ;10<45H
LCALL SETDS1302 ;DS1302初始化
MAIN1:
LCALL GET_TIME ;從DS1302讀數據程序
LCALL AUTOJS;自動(dòng)校時(shí)子程序
XD: LCALL CHULI ;實(shí)時(shí)時(shí)間數據處理
MOV R0,#TIME ;顯示時(shí)、分、秒
LCALL DISP
MOV R0,#TIME
LCALL DISPLAY
LCALL SET_KEY ;鍵功能程序
JB K1,MAIN1
ACALL BEEP_BL
MAIN2:
LCALL CHULI ;日期數據處理
MOV R0,#DATE
LCALL DISP ;顯示年、月、日
MOV R0,#DATE
LCALL DISPLAY
JB K1,MAIN2
ACALL BEEP_BL
AJMP MAIN1
; LCALL DS_CHULI ;定時(shí)時(shí)間數據處理
; MOV R0,#DS_DATA
; LCALL DS_SP ;顯示定時(shí)時(shí)間
; MOV R0,#DS_DATA
; LCALL DS_DISPLAY
; JB K1,MAIN3
; ACALL BEEP_BL
;AJMP MAIN1
;--------------------------------------------
;中斷服務(wù)子程序
;500MS對閃動(dòng)標記取反一次
;--------------------------------------------
INT_T0:
PUSH ACC
PUSH PSW
MOV TL0,#0
MOV TH0,#4CH
INC T_CONU
MOV A,T_CONU
CJNE A,#10,INT_END
MOV T_CONU,#0
CPL 0AH ;取反0AH位
INT_END:
POP PSW
POP ACC
RETI
;--------------------------------------------
;DS1302 初始化子程序
; (R0)=數據 (R1)=地址
;--------------------------------------------
SETDS1302:
;初始化時(shí)間 -10年23:59:55
MOV 40H,#52H ;秒賦初值
MOV 41H,#59H ;分賦初值
MOV 42H,#23H ;時(shí)賦初值
MOV 43H,#21H ;日賦初值
MOV 44H,#03H ;月賦初值
MOV 46H,#01H ;星期賦初值
MOV 45H,#10H ;年賦初值
CLR RST ;DS1302復位
CLR SCLK
NOP
NOP
SETB RST
MOV R1,#8EH ;寫(xiě)保護控制命令字
MOV R0,#00H ;允許寫(xiě)入
LCALL WRITE
MOV R1,#80H ;寫(xiě)秒寄存器
MOV R0,40H ;啟動(dòng)振蕩器
LCALL WRITE
MOV R1,#82H ;寫(xiě)分寄存器
MOV R0,41H
LCALL WRITE
MOV R1,#84H ;寫(xiě)時(shí)寄存器
MOV R0,42H
LCALL WRITE
MOV R1,#86H ;寫(xiě)日寄存器
MOV R0,43H
LCALL WRITE
MOV R1,#88H ;寫(xiě)月寄存器
MOV R0,44H
LCALL WRITE
MOV R1,#8AH ;寫(xiě)周寄存器
MOV R0,46H
LCALL WRITE
MOV R1,#8CH ;寫(xiě)年寄存器
MOV R0,45H
LCALL WRITE
MOV R1,#90H ;寫(xiě)充電寄存器
MOV R0,#10100110B;一個(gè)二極管,4K電阻
LCALL WRITE
MOV R1,#8EH ;寫(xiě)保護控制命令字
MOV R0,#80H;禁示寫(xiě)入
LCALL WRITE
RET
;===============================================
;讀時(shí)間、日期數據子程序
;存放單元 40H - 46H
;===============================================
GET_TIME:
MOV R1,#81H ;讀秒
LCALL READ
MOV 40H,R0
MOV R1,#83H ;讀分
LCALL READ
MOV 41H,R0
MOV R1,#85H ;讀時(shí)
LCALL READ
MOV 42H,R0
MOV R1,#87H ;讀出日期
LCALL READ
MOV 43H,R0
MOV R1,#89H ;讀出月份
LCALL READ
MOV 44H,R0
MOV R1,#8BH ;讀出星期
LCALL READ
MOV 46H,R0
MOV R1,#8DH ;讀出年
LCALL READ
MOV 45H,R0
RET
;================================================
;寫(xiě) DS1302 子程序
;================================================
WRITE:
CLR SCLK
NOP
NOP
SETB RST
NOP
MOV A,R1
MOV R2,#08H
WRI_01:
RRC A ;傳輸地址到DS1302
NOP
NOP
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R2,WRI_01
CLR SCLK
NOP
NOP
MOV A,R0
MOV R2,#08H
WRI_02:
RRC A ;傳輸數據到DS1302
NOP
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R2,WRI_02
CLR SCLK
NOP
NOP
CLR RST
NOP
NOP
RET
;=================================================
;讀 DS1302 子程序
;=================================================
READ:
CLR SCLK
NOP
NOP
SETB RST
NOP
NOP
MOV A,R1
MOV R2,#08H
READ_01:
RRC A
NOP ;先傳輸地址到DS1302
MOV IO,C
NOP
NOP
SETB SCLK
NOP
NOP
CLR SCLK
NOP
NOP
DJNZ R2,READ_01
NOP
NOP
SETB IO
CLR A
CLR C
MOV R2,#08H
READ_02:
CLR SCLK
NOP
NOP
MOV C,IO
NOP
NOP
RRC A ;再從DS1302接收數據
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R2,READ_02
MOV R0,A
CLR RST
RET
;==============================================
;實(shí)時(shí)時(shí)間、日期數據處理子程序,40H-50~51H 70H~~
;==============================================
CHULI:
MOV A,40H ;處理秒數據
ANL A,#0FH
MOV 50H,A
MOV 70H,A
MOV A,40H
ANL A,#0F0H
SWAP A
MOV 51H,A
MOV 71H,A
;---------------------------------------------
MOV A,41H ;處理分數據
ANL A,#0FH
MOV 52H,A
MOV 72H,A
MOV A,41H
ANL A,#0F0H
SWAP A
MOV 53H,A
MOV 73H,A
;---------------------------------------------
MOV A,42H ;處理時(shí)數據
ANL A,#0FH
MOV 54H,A
MOV 74H,A
MOV A,42H
ANL A,#0F0H
SWAP A
MOV 55H,A
MOV 75H,A
;----------------------------------------------
MOV A,43H ;處理日數據
ANL A,#0FH
MOV 56H,A
MOV 76H,A
MOV A,43H
ANL A,#0F0H
SWAP A
MOV 57H,A
MOV 77H,A
;---------------------------------------------
MOV A,44H ;處理月數據
ANL A,#0FH
MOV 58H,A
MOV 78H,A
MOV A,44H
ANL A,#0F0H
SWAP A
MOV 59H,A
MOV 79H,A
;---------------------------------------------
MOV A,45H ;處理年數據
ANL A,#0FH
MOV 5AH,A
MOV 7AH,A
MOV A,45H
ANL A,#0F0H
SWAP A
MOV 5BH,A
MOV 7BH,A
;----------------------------------------------
MOV A,46H ;處理周數據
MOV 5CH,A
MOV 7CH,A
RET
; MOV R5,#6 ;6個(gè)地址放年月日時(shí)分秒
; MOV R0,#50H;拆放在首 50H
; MOV R1,#40H ;實(shí)時(shí)數據首在40H
;******
; MOV A,@R1
; ANL A,#0FH;秒位
; MOV @R0,A
; MOV A,@R1
;ANL A,#0F0H;10秒位
;SWAP A
;inc R0
; MOV @R0,A
; inc R0
; inc R1
;*****
;djnz R5,CHAN
; MOV A,46H ;處理周數據
; MOV 5CH,A
; MOV 7CH,A
;*********
;---------------------------------------------
;
;=============================================
;實(shí)時(shí)時(shí)間、日期查表取數子程序
;=============================================
DISP: ;MOV R0,#TIME; MOV R0,#DATA
MOV R3,#06H
DISP1: MOV A,@R0
MOV DPTR,#TAB_NU
MOVC A,@A+DPTR
MOV @R0,A
INC R0
DJNZ R3,DISP1
RET
;====================================================
;時(shí)間、日期顯示子程序
;====================================================
DISPLAY:
;**********************
; 顯示數據在#TIME單元內,用六位LED共陽(yáng)數碼管顯示,P0口輸出段碼數據,P2
口作掃描控制,每個(gè)LED數碼管亮1MS時(shí)間再逐位循環(huán)。
;**********************
;
MOV R5,#0FEH ;掃描控制字初值
PLAY:
MOV P0,@R0 ;掃描字放入p0
MOV A,R5
MOV P2,A ;數碼顯示
LCALL DELAY;顯示1MS
INC R0 ;指向下一地址
JNB ACC.5,ENDOUT ;ACC.5=0時(shí)一次顯示結束
RL A ;A中數據循環(huán)左移
MOV R5,A ;放回R5內
AJMP PLAY ;跳回PLAY循環(huán)
ENDOUT: SETB P2.5 ;一次顯示結束,P2口復位
MOV P0,#0FFH ;P0口復位
RET ;子程序返回
DELAY:
MOV R4,#0AH
L15: MOV R5,#64H
L16: DJNZ R5,L16
DJNZ R4,L15
RET
;***************************
DISP11:
MOV DPTR,#TAB_NU
MOVC A,@A+DPTR
mov p0,a
clr p2.0
Lcall DELAY1ms
setb p2.0
RET
;******************************************************
SET_KEY: ;按鍵程序
SETB K1 ;增加鍵
SETB K2 ;減少鍵
SETB K3 ;選擇鍵
;******************************************************
NOP
KEY01: JB K3,KEY02
LCALL BEEP_BL
JMP SET_TIME ;進(jìn)入時(shí)間設定子程序
KEY02: JB K2,KEY03
LCALL BEEP_BL
LCALL SET_DAY;進(jìn)入DAY設定程序
KEY03: RET
;***************************************
;======================================
;實(shí)時(shí)時(shí)間設定子程序
;K1為加鍵、K2為減鍵、K3為選擇鍵
;======================================
SET_TIME:
MOV R1,#8EH ;寫(xiě)保護寄存器
MOV R0,#00H ;允許寫(xiě)入
LCALL WRITE
SETB TR0 ;中斷啟動(dòng)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
K00H: ACALL TIME_DELAY ;校時(shí)
JNB K3,K00H ;K3為位移鍵
K0H0:
LCALL GET_TIME
ACALL CHULI
JNB 0AH,KH01
MOV 54H,7FH ;送入熄滅符
MOV 55H,7FH
JMP KH02
KH01: MOV 54H,74H ;送實(shí)時(shí)值
MOV 55H,75H ;送實(shí)時(shí)值
KH02: MOV R0,#TIME
ACALL DISP
MOV R0,#TIME
ACALL DISPLAY
JNB K1,K0H1A;+
JNB K2,K0H1B;-
JNB K3,K00F
JMP K0H0
K0H1A:;加1
MOV A,42H
ADD A,#01H
DA A
MOV 42H,A
XRL A,#24H
JNZ K0H2A
MOV 42H,#00H
K0H2A: MOV R1,#84H ;寫(xiě)時(shí)寄存器
MOV R0,42H
LCALL WRITE
ACALL TIME_DELAY
JMP K0H0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
K0H1B:;減1
MOV A,42H
XRL A,#00H
JZ K0H2B
SETB C ;求補運算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;減去減數
ADD A,42H ;加被減數
DA A ;十進(jìn)制調整
MOV 42H,A ;
XRL A,#00H
JNZ K0H2C
K0H2B: MOV 42H,#23H
K0H2C: MOV R1,#84H ;寫(xiě)時(shí)寄存器
MOV R0,42H
LCALL WRITE
ACALL TIME_DELAY
JMP K0H0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
K00F: ACALL TIME_DELAY ;校分
JNB K3,K00F ;K3為位移鍵
K0F0:
LCALL GET_TIME
ACALL CHULI
JNB 0AH,KM01
MOV 52H,7FH ;送入熄滅符
MOV 53H,7FH
JMP KM02
KM01: MOV 52H,72H ;送實(shí)時(shí)值
MOV 53H,73H ;送實(shí)時(shí)值
KM02: MOV R0,#TIME
ACALL DISP
MOV R0,#TIME
ACALL DISPLAY
JNB K1,K0F1A
JNB K2,K0F1B
JNB K3,K002
JMP K0F0
K0F1A: ;加1
MOV A,41H
ADD A,#01H
DA A
MOV 41H,A
XRL A,#60H
JNZ K0F2A
MOV 41H,#00H
K0F2A: MOV R1,#82H ;寫(xiě)分寄存器
MOV R0,41H
LCALL WRITE
ACALL TIME_DELAY
JMP K0F0
;---------------------------------------------------
K0F1B:;減1
MOV A,41H
XRL A,#00H
JZ K0F2B
SETB C ;求補運算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;減去減數
ADD A,41H ;加被減數
DA A ;十進(jìn)制調整
MOV 41H,A ;
XRL A,#00H
JNZ K0F2C
K0F2B: MOV 41H,#59H
K0F2C: MOV R1,#82H ;寫(xiě)分寄存器
MOV R0,41H
LCALL WRITE
ACALL TIME_DELAY
JMP K0F0
;---------------------------------------------------
K002: ACALL TIME_DELAY ;校秒
JNB K3,K002 ;K3為位移鍵
K020:
LCALL GET_TIME
ACALL CHULI
JNB 0AH,KS01
MOV 50H,7FH ;送入熄滅符
MOV 51H,7FH
JMP KS02
KS01: MOV 50H,70H ;送實(shí)時(shí)值
MOV 51H,71H ;送實(shí)時(shí)值
KS02: MOV R0,#TIME
ACALL DISP
MOV R0,#TIME
ACALL DISPLAY
JNB K1,K021A
JNB K2,K021B
JNB K3,END_SJ
JMP K020
K021A: ;加1
MOV A,40H
ADD A,#01H
DA A
MOV 40H,A
XRL A,#60H
JNZ K022A
MOV 40H,#00H
K022A: MOV R1,#80H ;寫(xiě)秒寄存器
MOV R0,40H
LCALL WRITE
ACALL TIME_DELAY
JMP K020
;---------------------------------------------------
K021B: ;減1
MOV A,40H
XRL A,#00H
JZ K022B
SETB C ;求補運算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;減去減數
ADD A,40H ;加被減數
DA A ;十進(jìn)制調整
MOV 40H,A ;
XRL A,#00H
JNZ K022C
K022B: MOV 40H,#59H
K022C: MOV R1,#80H ;寫(xiě)秒寄存器
MOV R0,40H
LCALL WRITE
ACALL TIME_DELAY
JMP K020
END_SJ: LCALL KXBH;寫(xiě)保護
CLR 0AH
CLR TR0
ACALL BEEP_BL
RET
;-------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET_DAY:;進(jìn)入DAY設定程序;;;;;;;;;;;;;;;;;;;;;
MOV R1,#8EH ;寫(xiě)保護寄存器
MOV R0,#00H ;允許寫(xiě)入
LCALL WRITE
SETB TR0
K003: ACALL DATE_DELAY ;校日
JNB K2,K003 ;K2為位移鍵
K030: ACALL CHULI
JNB 0AH,KR01
MOV 56H,7FH ;送入熄滅符
MOV 57H,7FH
JMP KR02
KR01: MOV 56H,76H ;送實(shí)時(shí)值
MOV 57H,77H ;送實(shí)時(shí)值
KR02: MOV R0,#DATE
ACALL DISP
MOV R0,#DATE
ACALL DISPLAY
JNB K3,K031A
JNB K1,K031B
JNB K2,K004
JMP K030
K031A:
MOV A,43H
ADD A,#01H
DA A
MOV 43H,A
XRL A,#32H
JNZ K032A
MOV 43H,#00H
K032A: MOV R1,#86H ;寫(xiě)日寄存器
MOV R0,43H
LCALL WRITE
ACALL DATE_DELAY
JMP K030
K031B:
MOV A,43H
XRL A,#00H
JZ K032B
SETB C ;求補運算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;減去減數
ADD A,43H ;加被減數
DA A ;十進(jìn)制調整
MOV 43H,A
XRL A,#00H
JNZ K032C
K032B: MOV 43H,#31H
K032C: MOV R1,#86H ;寫(xiě)日寄存器
MOV R0,43H
LCALL WRITE
ACALL DATE_DELAY
JMP K030
;------------------------------------------------
K004: ACALL DATE_DELAY ;校月
JNB K2,K004 ;K3為位移鍵
K040: ACALL CHULI
JNB 0AH,KC01
MOV 58H,7FH ;送入熄滅符
MOV 59H,7FH
JMP KC02
KC01: MOV 58H,78H ;送實(shí)時(shí)值
MOV 59H,79H ;送實(shí)時(shí)值
KC02: MOV R0,#DATE
ACALL DISP
MOV R0,#DATE
ACALL DISPLAY
JNB K3,K041A
JNB K1,K041B
JNB K2,K005
JMP K040
K041A:
MOV A,44H
ADD A,#01H
DA A
MOV 44H,A
XRL A,#13H
JNZ K042A
MOV 44H,#00H
K042A: MOV R1,#88H ;寫(xiě)月寄存器
MOV R0,44H
LCALL WRITE
ACALL DATE_DELAY
JMP K040
K041B:
MOV A,44H
XRL A,#00H
JZ K042B
SETB C ;求補運算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;減去減數
ADD A,44H ;加被減數
DA A ;十進(jìn)制調整
MOV 44H,A ;
XRL A,#00H
JNZ K042C
K042B: MOV 44H,#12H
K042C: MOV R1,#88H ;寫(xiě)月寄存器
MOV R0,44H
LCALL WRITE
ACALL DATE_DELAY
JMP K040
;-----------------------------------------------
K005: ACALL DATE_DELAY ;校年
JNB K2,K005 ;K3為位移鍵
K050: ACALL CHULI
JNB 0AH,KY01
MOV 5AH,7FH ;送入熄滅符
MOV 5BH,7FH
JMP KY02
KY01: MOV 5AH,7AH ;送實(shí)時(shí)值
MOV 5BH,7BH ;送實(shí)時(shí)值
KY02: MOV R0,#DATE
ACALL DISP
MOV R0,#DATE
ACALL DISPLAY
JNB K3,K051A
JNB K1,K051B
JNB K2,K006
JMP K050
K051A:
MOV A,45H
ADD A,#01H
DA A
MOV 45H,A
XRL A,#9AH
JNZ K052A
MOV 45H,#00H
K052A: MOV R1,#8CH ;寫(xiě)年寄存器
MOV R0,45H
LCALL WRITE
ACALL DATE_DELAY
JMP K050
K051B:
MOV A,45H
XRL A,#00H
JZ K052B
SETB C ;求補運算
CLR A
ADDC A,#99H ;加99
SUBB A,#01H ;減去減數
ADD A,45H ;加被減數
DA A ;十進(jìn)制調整
MOV 45H,A ;
XRL A,#00H
JNZ K052C
K052B: MOV 45H,#99H
K052C: MOV R1,#8CH ;寫(xiě)年寄存器
MOV R0,45H
LCALL WRITE
ACALL DATE_DELAY
JMP K050
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
K006: ACALL DATE_DELAY ;校誤差
JNB K2,K006 ;K3為位移鍵
K060:
MOV A,#SSZZ
ACALL DISP11
JNB K3,K061A
JNB K1,K061B
JNB K2,END_RQ
JMP K060
K061A:
MOV A,sszz
add a,#1
mov sszz,a
jmp K060
K061B:
MOV A,sszz
subb a,#1
clr c
MOV sszz, A
JMP K060
END_RQ: LCALL KXBH ;寫(xiě)保護
CLR 0AH
CLR TR0
ACALL BEEP_BL
RET
;-------------------------------------------------
KXBH: JNB K3,KXBH;開(kāi)寫(xiě)保護
MOV R1,#8EH ;寫(xiě)保護寄存器
MOV R0,#80H ;禁止寫(xiě)入
LCALL WRITE
SETB SCLK
CLR RST
ACALL DATE_DELAY
RET
;===================================================
;====================================================
;====================================================
;鍵延時(shí)子程序
;多次調用顯示程序做鍵延時(shí)
;====================================================
TIME_DELAY: ;設定時(shí)間,鍵延時(shí)用
MOV R6,#0AH
TIME_KK:
LCALL CHULI
MOV R0,#TIME
LCALL DISP
MOV R0,#TIME
ACALL DISPLAY
DJNZ R6,TIME_KK
RET
DATE_DELAY: ;設定日期,鍵延時(shí)用
MOV R6,#0AH
DATE_KK:
LCALL CHULI
MOV R0,#DATE
LCALL DISP
MOV R0,#DATE
ACALL DISPLAY
DJNZ R6,DATE_KK
RET
;====================================================
;蜂鳴器響一聲子程序
;====================================================
BEEP_BL:
MOV R6,#100
BL2: ACALL DEX1
CPL BEEP
DJNZ R6,BL2
MOV R5,#10
ACALL DELAY_BL
RET
DEX1: MOV R7,#180
DE2: NOP
DJNZ R7,DE2
RET
DELAY_BL: ;(R5)*延時(shí)10MS
MOV R6,#50
DL1: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL1
DJNZ R5,DELAY_BL
RET
DELAY1ms: ;誤差 -0.651041666667us
MOV R6,#66H
DL00:
MOV R5,#03H
DJNZ R5,$
DJNZ R6,DL00
RET
;*************************************************************
TAB_NU: DB 81H,0BDH,49H,19H,35H,13H,03H,0B9H,01H,11H ;0-9
DB 0FFH ;滅
;《 共陽(yáng)數碼管 》
;*************************************************************
;自動(dòng)校時(shí)子程序,用來(lái)修正時(shí)間誤差
AUTOJS:
MOV A,41H;分鐘放入A
CJNE A,BIJIAO,AU_1;比較分是否相同
JMP AU_2
AU_1: MOV BIJIAO,A;不同則放入比較器
MOV A,JISHUQI;計數器加1
INC A
MOV JISHUQI,A
AU_2: MOV A,JISHUQI;相同則比較計數器
CJNE A,#2,OUT;計數是否到1?
MOV A,40H;到了
CJNE A,sszz,OUT;是否到了sz秒等于sz ?;氐?秒
CLR RST
CLR SCLK
SETB RST
MOV R1,#8EH ;寫(xiě)控制命令字
MOV R0,#00H ;允許寫(xiě)入
LCALL WRITE
MOV R1,#80H ;寫(xiě)秒寄存器
MOV R0,#00H ;設回0秒
LCALL WRITE
MOV R1,#8EH ;寫(xiě)控制命令字
MOV R0,#80H ;禁止寫(xiě)入
LCALL WRITE
SETB SCLK
CLR RST
MOV JISHUQI,#0 ;計數器清0
OUT: RET
end
[ 此帖被fang3在2010-03-24 16:35重新編輯 ]