📄 keyandled.asm
字号:
ZLG7289_CS BIT P1.7
ZLG7289_CLK BIT P1.6
ZLG7289_DIO BIT P1.5
ZLG7289_KEY BIT P3.2
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H
MOV R7,#20H
DJNZ R7,$
MOV A,#0A4H
ACALL ZLG7289_SENDCOM
ACALL DELAY_LONG
MOV R0,#8
MOV R1,#87H
MOV R2,#00H
REDIS: MOV A,R2
ACALL ZLG7289_SENDDAT
DEC R1
INC R2
ACALL DELAY_LONG
DJNZ R0,REDIS
LOOP: JB ZLG7289_KEY,LOOP
CLR ZLG7289_CS
MOV A,#15H
ACALL ZLG7289_SENDBYTE
ACALL READ_KEY
SETB ZLG7289_CS
ACALL DELAY_LONG
KEY0: CJNE A,#01H,KEY1
MOV R1,#87H
MOV A,#08H
ACALL ZLG7289_SENDDAT
JNB ZLG7289_KEY,$
LJMP LOOP
KEY1: CJNE A,#09H,KEY2
MOV R1,#86H
MOV A,#09H
ACALL ZLG7289_SENDDAT
JNB ZLG7289_KEY,$
LJMP LOOP
KEY2: CJNE A,#11H,KEY3
MOV R1,#0CDH
MOV A,#0AH
ACALL ZLG7289_SENDDAT
JNB ZLG7289_KEY,$
LJMP LOOP
KEY3: CJNE A,#19H,KEY4
MOV R1,#0CCH
MOV A,#0BH
ACALL ZLG7289_SENDDAT
JNB ZLG7289_KEY,$
LJMP LOOP
KEY4: CJNE A,#21H,KEY5
MOV R1,#0CBH
MOV A,#0CH
ACALL ZLG7289_SENDDAT
JNB ZLG7289_KEY,$
LJMP LOOP
KEY5: CJNE A,#29H,KEY6
MOV R1,#0CAH
MOV A,#0DH
ACALL ZLG7289_SENDDAT
JNB ZLG7289_KEY,$
LJMP LOOP
KEY6: CJNE A,#31H,KEY7
MOV R1,#0C9H
MOV A,#0EH
ACALL ZLG7289_SENDDAT
JNB ZLG7289_KEY,$
LJMP LOOP
KEY7: CJNE A,#39H,LOOP
MOV R1,#0C8H
MOV A,#0FH
ACALL ZLG7289_SENDDAT
JNB ZLG7289_KEY,$
LJMP LOOP
;*********************************************************************
;向ZLG7289发送8位数据,高位在前
;入口参数:ACC待发送的数据
;占用资源:R7、CY、R6
;注:使用此函数前要选择ZLG7289,即执行"CLR ZLG7289_CS"命令
;*********************************************************************
ZLG7289_SENDBYTE:
MOV R7,#8 ;设发送位数为8位
CALL DELAY_LONG ;延时50us
ZLG7289_SCL1:
RLC A
MOV ZLG7289_DIO,C
NOP
NOP
NOP
NOP
SETB ZLG7289_CLK
CALL DELAY_SHORT ;延时10us
CLR ZLG7289_CLK
CALL DELAY_SHORT ;延时10us
DJNZ R7,ZLG7289_SCL1
RET
;*********************************************************************
;向ZLG7289发送命令子程序
;入口参数:ACC命令字
;占用资源:(ZLG7289_SENDBYTE)R6、R7、CY
;*********************************************************************
ZLG7289_SENDCOM:
CLR ZLG7289_CLK
CLR ZLG7289_CS
ACALL ZLG7289_SENDBYTE
SETB ZLG7289_CS
RET
;*********************************************************************
;带数据的指令发送子程序,将显示数据发送给ZLG7289
;入口参数:R1要发送的命令,A要发送的数据
;占用资源:(ZLG7289_SENDBYTE)R6、R7、CY
;*********************************************************************
ZLG7289_SENDDAT:
CLR ZLG7289_CLK
CLR ZLG7289_CS
PUSH ACC
MOV A,R1
ACALL ZLG7289_SENDBYTE ;发送命令字
POP ACC
ACALL ZLG7289_SENDBYTE ;发送数据
SETB ZLG7289_CS
RET
;********************************************************************
;读取按键值子程序
;入口参数:无
;出口参数:ACC,按键值
;占用资源:R7
;********************************************************************
READ_KEY:
CLR A
CLR C
MOV R7,#8
ZLG7289_SCL2:
SETB ZLG7289_CLK
ACALL DELAY_SHORT ;延时10us
SETB ZLG7289_DIO
MOV C,ZLG7289_DIO
RLC A
CLR ZLG7289_CLK
ACALL DELAY_SHORT ;延时10us
DJNZ R7,ZLG7289_SCL2
RET
;********************************************************************
;软件延时子程序1
;占用资源:R6
;********************************************************************
DELAY_LONG: MOV R6,#100
DJNZ R6,$
RET
;********************************************************************
;软件延时子程序2
;占用资源:R6
;********************************************************************
DELAY_SHORT: MOV R6,#20
DJNZ R6,$
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -