?? digitalclock.asm
字號(hào):
DATA_IN DATA 0020H
DATA_OUT DATA 0021H
SHUDATA DATA 0022H
KEY BIT P3.3 ;7279的KEY按鍵輸出
DAT BIT P1.1 ;7279的DATA串行數(shù)據(jù)引腳
CLK BIT P1.0 ;7279的CLK同步時(shí)鐘引腳
CS BIT P2.6 ;7279的CS片選輸入端
;*************************************
;************主程序*****
;*************************************
ORG 0000H
LJMP START
ORG 0013H
LJMP INT1
ORG 001BH
LJMP INT
ORG 0300H
START: MOV SP,#2FH
SETB CS
SETB KEY
CLR CLK
CLR DAT ;初始化I/O口
CALL DELAY25 ;延時(shí)25mS
MOV R3,#20
SETB EA
SETB ET1
SETB EX1
SETB PX1
MOV TMOD,#10H
MOV TH1,#03CH
MOV TL1,#0B0H
SETB TR1 ;中斷初始化
MOV DATA_OUT,#0A4H
CALL SEND ;發(fā)復(fù)位(清除)指令
SETB CS
MOV R4,#00H ;存放秒數(shù)字
MOV R5,#00H ;存放分?jǐn)?shù)字
MOV R6,#00H ;存放時(shí)數(shù)字
MOV SHUDATA,#87H
;----------------------------------------
; 第三個(gè)和第六個(gè)數(shù)碼管位一橫并閃爍
;----------------------------------------
CFSM: MOV DATA_OUT,#95H
CALL SEND
MOV DATA_OUT,#01H
CALL SEND
MOV DATA_OUT,#88H
CALL SEND
MOV DATA_OUT,#11011011B
CALL SEND
;--------------------------------
MOV DATA_OUT,#92H
CALL SEND
MOV DATA_OUT,#01H
CALL SEND
;--------------------------------
MOV A,R6 ;顯示時(shí)
MOV B,#10
DIV AB
MOV DATA_OUT,#86H
CALL SEND
MOV DATA_OUT,B
CALL SEND
MOV DATA_OUT,#87H
CALL SEND
MOV DATA_OUT,A
CALL SEND
;--------------------------------
MOV A,R5 ;顯示分
MOV B,#10
DIV AB
MOV DATA_OUT,#83H
CALL SEND
MOV DATA_OUT,B
CALL SEND
MOV DATA_OUT,#84H
CALL SEND
MOV DATA_OUT,A
CALL SEND
;--------------------------------
MOV A,R4 ;顯示秒
MOV B,#10
DIV AB
MOV DATA_OUT,#80H
CALL SEND
MOV DATA_OUT,B
CALL SEND
MOV DATA_OUT,#81H
CALL SEND
MOV DATA_OUT,A
CALL SEND
SJMP CFSM
;*****************************
; 中斷服務(wù)程序
;*****************************
INT: DJNZ R3,OUT
MOV R3,#20
INC R4 ;秒+1
CJNE R4,#60,OUT ;如果還沒(méi)到60秒,返回
MOV R4,#00H
INC R5 ;到60秒。秒就清零,分+1
CJNE R5,#60,OUT ;如果還沒(méi)到60分,返回
MOV R5,#00H
INC R6 ;到60分。分就清零,時(shí)+1
CJNE R6,#24,OUT ;如果還沒(méi)到24時(shí),返回
MOV R6,#00H ;到24時(shí)。時(shí)就清零
OUT:MOV TH1,#03CH
MOV TL1,#0B0H
RETI
;*******************************************************
;從HD7279接受一個(gè)字節(jié),高位在前
;*******************************************************
RECEIVE: MOV R7,#8
SETB DAT ;P1口為輸入狀態(tài),要至1
CLR CS
D2: CALL DELAY100
SETB CLK
CALL DELAY100
MOV A,DATA_IN
RL A
MOV DATA_IN,A
MOV C,DAT
MOV DATA_IN.0,C
CLR CLK
DJNZ R7,D2
CLR DAT ;接收完畢
CALL DELAY100
RET
;*******************************
;發(fā)送1個(gè)字節(jié)到HD7279,高位在前
;*******************************
SEND: PUSH A
MOV R7,#8;設(shè)定位計(jì)數(shù)器
CLR CS
CALL DELAY100
D1:MOV C,DATA_OUT.7
MOV DAT,C
SETB CLK
MOV A,DATA_OUT
RL A
MOV DATA_OUT,A
CALL DELAY100
CLR CLK
DJNZ R7,D1
CLR DAT ;發(fā)送完畢
POP A
RET
;***************************
; 延時(shí)子程序
;***************************
DELAY25:MOV R1,#250
D0:MOV R2,#100
DJNZ R2,$
DJNZ R1,D0
RET
;---------------------
DELAY100:MOV R0,#50
DJNZ R0,$
RET
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -