📄 7290int.asm
字号:
;7290内部寄存器地址
KEY EQU 01H
REPCNT EQU 02H
FUNCKEY EQU 03H
FASTP EQU 04H
SYSTEMREG EQU 00H
FLASH EQU 0CH
SCANNUM EQU 0DH
DP0 EQU 10H
DP1 EQU 11H
DP2 EQU 12H
DP3 EQU 13H
DP4 EQU 14H
DP5 EQU 15H
DP6 EQU 16H
DP7 EQU 17H
CMDBUF0 EQU 07H
CMDBUF1 EQU 08H
COMMAND EQU 50H;命令控制字
KEYNUM EQU 31H;键值
NUM6 EQU 32H;数据存储区间
NUM5 EQU 33H;
NUM4 EQU 34H;
NUM3 EQU 35H;
NUM2 EQU 36H;
NUM1 EQU 37H;
INT7290:
ACALL START_I2C
MOV A,#70H
ACALL SENDBYTE
MOV A,#KEY
ACALL SENDBYTE
ACALL START_I2C
MOV A,#71H
ACALL SENDBYTE
ACALL RECEIVEBYTE
MOV KEYNUM,A
ACALL NO_ACK
ACALL STOP_I2C
XRL A,#0FFH
JNZ LEGAL_KEY
AJMP EXIT_INT7290
LEGAL_KEY:
MOV A,#3FH ;高三位为列值,DI三位为行值
ANL A,KEYNUM
MOV KEYNUM,A
MOV DPTR,#FUNC_TABLE
RL A
ANL A,#0EH ;键值清除高位,取行值,乘2后跳转到相应的功能子程序.
JMP @A+DPTR
FUNC_TABLE: ;根据键值的低三位(行数)选择不同的功能子程序
AJMP NUM_0_7 ;0
AJMP NUM_8_F ;1
AJMP CHANGMODE ;2
AJMP CHECK ;3
AJMP DONEOVER ;4
;AJMP DARK_CTL ;5
;AJMP FLASH_CTL ;6
;AJMP INSTRUCT ;7
;------------------------------------------------
NUM_0_7: ;下载数据并译码,数字0-7
ACALL DATA_SHIFT_1 ;数据左移一位
ACALL LIGHT_SHIFT_1 ;左移一位
ACALL START_I2C
MOV A,#70H
ACALL SENDBYTE
MOV A,#DP0
ACALL SENDBYTE
MOV A,KEYNUM
ACALL SHIFT_A_3
ACALL SENDBYTE
ACALL Stop_I2c
ACALL EXIT_INT7290
;------------------------------------------------
NUM_8_F: ;下载数据并译码,数字8-F
ACALL DATA_SHIFT_1 ;数据左移一位
ACALL LIGHT_SHIFT_1 ;左移一位
ACALL START_I2C
MOV A,#70H
ACALL SENDBYTE
MOV A,#DP0
ACALL SENDBYTE
MOV A,KEYNUM
ACALL SHIFT_A_3
ADD A,#08H
ACALL SENDBYTE
ACALL Stop_I2c
ACALL EXIT_INT7290
;------------------------------------------------
CHANGMODE: ;波形选择
ACALL SHIFT_A_3
RL A
MOV DPTR,#MODE_TABLE
MOVC A,@A+DPTR
MODE_TABLE:
AJMP SIN ;0
AJMP SAWTOOTH ;1
AJMP TRIANGULATION ;2
AJMP RECTANGULAR ;3
AJMP ELSE ;4待扩展
AJMP ENTER ;5确定
;------------------------------------------------
SIN: ;波形数据段安排待讨论
MOV DPTR,#0000H
ACALL EXIT_INT7290
SAWTOOTH:
MOV DPTR,#0400H
ACALL EXIT_INT7290
TRIANGULATION:
MOV DPTR,#0800H
ACALL EXIT_INT7290
RECTANGULAR:
MOV DPTR,#0B00H
ACALL EXIT_INT7290
ELSE: ;待扩展
ACALL EXIT_INT7290
ENTER:
ACALL I2C_AT24C256 ;波形数据转移到双口RAM
ACALL EXIT_INT7290
;------------------------------------------------
CHECK: ;输入错误时右移返回一位
ACALL DATA_RIGHT_1
MOV COMMAND,#00100000B
ACALL START_I2C
MOV A,#70H
ACALL SENDBYTE
MOV A,#CMDBUF0
ACALL SENDBYTE
MOV A,COMMAND
ACALL SENDBYTE
ACALL Stop_I2c
ACALL EXIT_INT7290
;------------------------------------------------
DONEOVER:
ACALL DATA_DEAL ;将非压缩码转换成压缩码
ACALL UART ;启动串口传输频率,子程序待写
ACALL EXIT_INT7290
;------------------------------------------------
LIGHT_SHIFT_1:
MOV COMMAND,#00010000B
ACALL START_I2C
MOV A,#70H
ACALL SENDBYTE
MOV A,#CMDBUF0
ACALL SENDBYTE
MOV A,COMMAND
ACALL SENDBYTE
ACALL Stop_I2c
RET
;------------------------------------------------
SHIFT_A_3: ;键值右移3位,取列值
RR A
RR A
RR A
ANL A,#07H
RET
;------------------------------------------------
DATA_SHIFT_1: ;数据左移一位
MOV A,NUMKEY
XCH A,NUM1
XCH A,NUM2
XCH A,NUM3
XCH A,NUM4
XCH A,NUM5
XCH A,NUM6
RET
;------------------------------------------------
DATA_RIGHT_1: ;数据右移一位
CLR A
XCH A,NUM6
XCH A,NUM5
XCH A,NUM4
XCH A,NUM3
XCH A,NUM2
XCH A,NUM1
RET
;------------------------------------------------
DATA_DEAL: ;将非压缩码转换成压缩码
MOV A,NUM2
SWAP A
XRL A,NUM1
MOV NUM1,A
MOV A,NUM4
SWAP A
XRL A,NUM3
MOV NUM2,A
MOV A,NUM6
SWAP A
XRL A,NUM5
MOV NUM3,A
RET
;------------------------------------------------
EXIT_INT7290:
RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -