📄 code.asm
字号:
ORG 0000H
AJMP MAIN
BIT_CNT DATA 30H
DELAY1 DATA 31H
DELAY DATA 33H
DECIMAL DATA 32H
REC_BUF DATA 20H
SEND_BUF DATA 21H
LEDBuf EQU 40H
State EQU 41H
D_BUF EQU 42H
CS BIT P1.3
CLK BIT P1.2
DIO BIT P1.1
KEY BIT P1.0
MAIN:
MOV State,#00H
RESET:
SETB CS
SETB KEY
SETB DIO
MOV DELAY,#25
RST_DELAY1:
DJNZ DELAY1,RST_DELAY1
DJNZ DELAY,RST_DELAY1
MOV SEND_BUF,#10111111B
CALL SEND
SETB CS
MOV SEND_BUF,#10100100B
CALL SEND
SETB CS
ACALL HELLO
;==================================
ACALL INTKEY
CLR C ;判断键值范围
MOV A,#08H
SUBB A,REC_BUF
JC INTKEY ;
MOV A,REC_BUF
CJNE A,#08H,NINE
EIGHT:
ACALL OPEN
ACALL INTKEY
CLR C ;判断键值范围
MOV A,#08H
SUBB A,REC_BUF
JNC EIGHT
ACALL STATE_
MOV A,D_BUF
JNB ACC.0,D_OPEN
ACALL OPENED
;延时1S
AJMP EIGHT
D_OPEN:
MOV SEND_BUF,#80H
CALL SEND
MOV A,REC_BUF
ORL A,#08H
MOV SEND_BUF,A
CALL SEND
SETB CS
CALL LONG_DELAY
AJMP EIGHT
NINE:
CJNE A,#09H,TEN
ACALL CLOSE
NINE2:
ACALL INTKEY
CLR C ;判断键值范围
MOV A,#08H
SUBB A,REC_BUF
JNC NINE2
ACALL STATE_
MOV A,D_BUF
JB ACC.0,D_CLOSE
ACALL CLOSED
;延时1S
AJMP NINE2
D_CLOSE:
MOV SEND_BUF,#80H
CALL SEND
MOV A,REC_BUF
ORL A,#08H
MOV SEND_BUF,A
CALL SEND
SETB CS
CALL LONG_DELAY
AJMP NINE2
TEN:
CJNE A,#0AH,ELEVEN
AJMP RESET
MOV SEND_BUF,#80H
CALL SEND
MOV A,REC_BUF
MOV SEND_BUF,A
CALL SEND
SETB CS
CALL LONG_DELAY
;=====================================
INTKEY:
JB KEY,INTKEY
MOV SEND_BUF,#00010101B ;读键盘数据
CALL SEND
CALL RECEIVE
SETB CS
JNB KEY,$
JMP INTKEY
;====================
STATE_:
MOV R7,#01H ;判断状态
MOV A,R7
LOOP1:
RL A
DJNZ REC_BUF,LOOP1
MOV LEDBuf,A
MOV A,State
LOOP2:
RR A
DJNZ REC_BUF,LOOP2
MOV D_BUF,A
MOV A,LEDBuf
XRL State,A
RET
;==================================
HELLO:
;================================= DISP "H"
MOV SEND_BUF,#81H
CALL SEND
MOV SEND_BUF,#0CH
CALL SEND
SETB CS
;================================= DISP "E"
MOV SEND_BUF,#82H
CALL SEND
MOV SEND_BUF,#0BH
CALL SEND
SETB CS
;================================= DISP "L"
MOV SEND_BUF,#83H
CALL SEND
MOV SEND_BUF,#0DH
CALL SEND
SETB CS
;================================ DISP "L"
MOV SEND_BUF,#84H
CALL SEND
MOV SEND_BUF,#0DH
CALL SEND
SETB CS
;================================= DISP "O"
MOV SEND_BUF,#85H
CALL SEND
MOV SEND_BUF,#0H
CALL SEND
SETB CS
;=================================
RET
OPEN:
;=================================DISP"-"闪烁
mov SEND_BUF,#10001000h
call SEND
mov SEND_BUF,#0feh
call SEND
MOV SEND_BUF,#80H
CALL SEND
MOV SEND_BUF,#0AH
CALL SEND
SETB CS
;=================================DISP"-"
MOV SEND_BUF,#81H
CALL SEND
MOV SEND_BUF,#0AH
CALL SEND
SETB CS
;=================================DISP"0"
MOV SEND_BUF,#82H
CALL SEND
MOV SEND_BUF,#00H
CALL SEND
SETB CS
;=================================DISP"P"
MOV SEND_BUF,#83H
CALL SEND
MOV SEND_BUF,#0EH
CALL SEND
SETB CS
;=================================DISP"E"
MOV SEND_BUF,#84H
CALL SEND
MOV SEND_BUF,#0BH
CALL SEND
SETB CS
;=================================DISP"N"
MOV SEND_BUF,#95H
CALL SEND
MOV SEND_BUF,#76H
CALL SEND
SETB CS
RET
OPENED:
;=================================DISP"0"
MOV SEND_BUF,#80H
CALL SEND
MOV SEND_BUF,#00H
CALL SEND
SETB CS
;=================================DISP"P"
MOV SEND_BUF,#81H
CALL SEND
MOV SEND_BUF,#0EH
CALL SEND
SETB CS
;=================================DISP"E"
MOV SEND_BUF,#82H
CALL SEND
MOV SEND_BUF,#0BH
CALL SEND
SETB CS
;=================================DISP"N"
MOV SEND_BUF,#93H
CALL SEND
MOV SEND_BUF,#76H
CALL SEND
SETB CS
;=================================DISP"E"
MOV SEND_BUF,#84H
CALL SEND
MOV SEND_BUF,#0BH
CALL SEND
SETB CS
;=================================DISP"D"
MOV SEND_BUF,#0CDH
CALL SEND
MOV SEND_BUF,#0DH
CALL SEND
SETB CS
RET
CLOSE:
;=================================DISP"-"闪烁
mov SEND_BUF,#10001000h
call SEND
mov SEND_BUF,#0feh
call SEND
MOV SEND_BUF,#80H
CALL SEND
MOV SEND_BUF,#0AH
CALL SEND
SETB CS
;=================================DISP"C"
MOV SEND_BUF,#0C9H
CALL SEND
MOV SEND_BUF,#0CH
CALL SEND
SETB CS
;=================================DISP"L"
MOV SEND_BUF,#82H
CALL SEND
MOV SEND_BUF,#0DH
CALL SEND
SETB CS
;=================================DISP"0"
MOV SEND_BUF,#83H
CALL SEND
MOV SEND_BUF,#00H
CALL SEND
SETB CS
;================================DISP"S"
MOV SEND_BUF,#84H
CALL SEND
MOV SEND_BUF,#05H
CALL SEND
SETB CS
;=================================DISP"E"
MOV SEND_BUF,#85H
CALL SEND
MOV SEND_BUF,#0BH
CALL SEND
SETB CS
RET
CLOSED:
;=================================DISP"C"
MOV SEND_BUF,#0C8H
CALL SEND
MOV SEND_BUF,#0CH
CALL SEND
SETB CS
;=================================DISP"L"
MOV SEND_BUF,#81H
CALL SEND
MOV SEND_BUF,#0DH
CALL SEND
SETB CS
;=================================DISP"0"
MOV SEND_BUF,#82H
CALL SEND
MOV SEND_BUF,#00H
CALL SEND
SETB CS
;================================DISP"S"
MOV SEND_BUF,#83H
CALL SEND
MOV SEND_BUF,#05H
CALL SEND
SETB CS
;=================================DISP"E"
MOV SEND_BUF,#84H
CALL SEND
MOV SEND_BUF,#0BH
CALL SEND
SETB CS
;=================================DISP"D"
MOV SEND_BUF,#0CDH
CALL SEND
MOV SEND_BUF,#0DH
CALL SEND
SETB CS
RET
SEND:
MOV BIT_CNT,#8
CLR CS
CALL LONG_DELAY
SEND_LP:
MOV A,SEND_BUF
RLC A
MOV SEND_BUF,A
MOV DIO,C
NOP
NOP
SETB CLK
CALL SHORT_DELAY
CLR CLK
CALL SHORT_DELAY
DJNZ BIT_CNT,SEND_LP
CLR DIO
RET
;=====================
RECEIVE:
MOV BIT_CNT,#8
;SETB DAT
CALL LONG_DELAY
RECEIVE_LP:
SETB CLK
CALL SHORT_DELAY
setb DIO
MOV C,DIO
MOV A,REC_BUF
RLC A
MOV REC_BUF,A
CLR CLK
CALL SHORT_DELAY
DJNZ BIT_CNT,RECEIVE_LP
CLR DIO
RET
;=====================
LONG_DELAY: ;延时25us
MOV DELAY,#25
DJNZ DELAY,$
RET
SHORT_DELAY: ;延时4us
MOV DELAY,#4
DJNZ DELAY,$
RET
LLONG_DELAY:
MOV DELAY,#0FFH
MOV DELAY1,#0FFH
AAA: DJNZ DELAY1,AAA
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ DELAY,AAA
RET
DIO
RET
;=====================
LONG_DELAY: ;延时25us
MOV DELAY,#25
DJNZ DELAY,$
RET
SHORT_DELAY: ;延时4us
MOV DELAY,#4
DJNZ DELAY,$
RET
LLONG_DELAY:
MOV DELAY,#0FFH
MOV DELAY1,#0FFH
AAA: DJNZ DELAY1,AAA
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ DELAY,AAA
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -