📄 hd7279keyset.asm
字号:
BIT_COUNT DATA 07FH
TIMER DATA 07EH
TIMER1 DATA 07DH
TEN DATA 07CH
DATA_IN DATA 020H
DATA_OUT DATA 021H
;*******************************************
;I/O的定义
;*******************************************
CS BIT P2.0 ;HD7279A CS P2.0
CLK BIT P2.1 ;HD7279A CLK P2.1
DAT BIT P2.2 ;HD7279A DATA P2.2
KEY BIT P2.3 ;HD7279A KEY P2.3
ORG 0000H
JMP START
ORG 0030H
START: MOV SP,#2FH
MOV P2,#11011011B ;I/O初始化 (0CBH)
MOV TIMER,#50 ; 25MS
START_DELAY: MOV TIMER1,#255
START_DELAY1:DJNZ TIMER1,START_DELAY1
DJNZ TIMER,START_DELAY
MOV DATA_OUT,#10100100B ; (0A4H )复位指令
CALL SEND
SETB CS ; CS
MAIN: JB KEY,MAIN ;
MOV DATA_OUT,#00010101B ;15H 读键盘
CALL SEND
CALL RECEIVE
SETB CS ; CS
MOV B,#10 ;16 BCD
MOV A,DATA_IN
DIV AB
MOV TEN,A
MOV DATA_OUT,#10100001B ; 2 0A1H
CALL SEND ; HD7279A
MOV DATA_OUT,#10100001B ;A1H
CALL SEND
MOV DATA_OUT,#10000001B ; ( 2 )81H
CALL SEND
MOV DATA_OUT,TEN ; HD7279A
CALL SEND
MOV DATA_OUT,#10000000B ; 80H
CALL SEND
MOV DATA_OUT,B ; HD7279A
CALL SEND
SETB CS
WAIT: JNB KEY,WAIT ;
JMP MAIN
;*******************************************
; HD7279数据的发送
;*******************************************
SEND: MOV BIT_COUNT,#8 ; =8
CLR CS ; CS
CALL LONG_DELAY
; CALL KEYSET
SEND_LOOP: MOV C,DATA_OUT.7 ; 1
MOV DAT,C
SETB CLK ; CLK
MOV A,DATA_OUT
RL A
MOV DATA_OUT,A
CALL SHORT_DELAY
CLR CLK ; CLK
CALL SHORT_DELAY
DJNZ BIT_COUNT,SEND_LOOP ; 8
CLR DAT
RET
;*******************************************
; HD7279接收数据
;*******************************************
RECEIVE: MOV BIT_COUNT,#8 ; =8
SETB DAT ; P1.2(DATA)
CALL LONG_DELAY
RECEIVE_LOOP: SETB CLK ; CLK
CALL SHORT_DELAY ;
MOV A,DATA_IN ;
RL A
MOV DATA_IN,A
MOV C,DAT
MOV DATA_IN.0,C
CLR CLK ; CLK
CALL SHORT_DELAY
DJNZ BIT_COUNT,RECEIVE_LOOP; 8
CLR DAT ; DAT ( )
RET
LONG_DELAY: MOV TIMER,#25 ; 50uS
DELAY_LOOP: DJNZ TIMER,DELAY_LOOP
RET
SHORT_DELAY: MOV TIMER,#4 ; 8uS
SHORT_LP: DJNZ TIMER,SHORT_LP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -