⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7290int.asm

📁 基于i2c串行总线结构7290的硬件初始化及按键功能的选择的总体程序构架
💻 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 + -