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

📄 iic按键读写与显示.txt

📁 用按键读写IIC并显示读写的内容
💻 TXT
📖 第 1 页 / 共 2 页
字号:
MODE		EQU	30H
WRITE		EQU	1
READ		EQU	2
;-------
SUB_MODE        EQU	31H
WRITE_NONE	EQU	1
WRITE_ADD	EQU	2
WRITE_LENGTH    EQU	3
WRITE_DATA	EQU	4
READ_NONE	EQU	1
READ_ADD	EQU	2
READ_LENGTH	EQU	3
READ_DATA	EQU	4
;-------
DISP_FLAG	BIT	00H
KEY_BUFF	EQU	32H
DISP_BUFF	EQU	34H
COUNT    	EQU	35H
COMMOND		EQU	38H
WRITE_ADD_BUFF 	EQU	40H
WRITE_LENGTH_BUFF	EQU	41H
WRITE_LENGTH_BUFF1	EQU	56H
WRITE_DATA_BUFF	EQU	42H
W_DATA_BUFF	EQU	70H
READ_ADD_BUFF	EQU     54H
READ_LENGTH_BUFF        EQU     55H
READ_LENGTH_BUFF1       EQU     57H
READ_DATA_BUFF	EQU     53H
R_DATA_BUFF	EQU	60H
;---------
SCL             BIT 	P3.2
SDA             BIT 	P3.3
CONTROL	        EQU	56H
DATA1		EQU	58H
;---------
RS		BIT	P3.5
RW		BIT	P3.6
EN		BIT	P3.7
;--------
DELAY1		EQU	50H
DELAY2		EQU	51H
DELAY3		EQU	52H
;--------------------------
        ORG	00H
	LJMP	INIT
	ORG	40H
;---------------------------
INIT:
	MOV	MODE,#WRITE
	MOV	SUB_MODE,#WRITE_NONE
	MOV	COUNT,#0
	SETB	DISP_FLAG
	MOV 	COMMOND,#38H   ;8位数据总线,两行模式,5*7点阵+光标显示模式
	LCALL	W_COMMOND
	MOV 	COMMOND,#01H   ;该指令将空格码(0x20)写入显存中;达到清屏显示的功能。
 	LCALL 	W_COMMOND 
	MOV 	COMMOND,#0FH   ;显示开,光标显示,光标所在位闪烁启动
	LCALL 	W_COMMOND
	MOV 	COMMOND,#06H   ;AC为自动加1计数器,操作数据后AC自动加1,写入字符数据时禁止画面滚动/光标移动
	LCALL 	W_COMMOND    
	MOV	R1,#0
	MOV	R7,#4
        MOV	R6,#2
	MOV	R0,#W_DATA_BUFF
	MOV	R2,#8
;---------------------------
MAIN:
	LCALL 	SCAN_KEY
	LCALL	DISP
	LJMP	MAIN
;----------------------------
;FUNCTON:显示子程序
;----------------------------
DISP:
	JNB	DISP_FLAG,DISP_RET1
	CLR	DISP_FLAG
	MOV	A,MODE
	CJNE	A,#WRITE,DISP_READ
;-------------------------------------
;FUNCTION:写模式下显示相关信息及数据
;--------------------------
	MOV	A,SUB_MODE
	CJNE	A,#WRITE_NONE,DISP_WRITE_ADD
	MOV	A,COUNT
	CJNE	A,#0,DISP_WRITE_NONE
	MOV	COMMOND,#80H
	MOV	DISP_BUFF,#'W'
	LCALL	DISP1                            ;DISP	"W"
	RET
DISP_RET1:
	RET
DISP_READ:
	LJMP	DISP_READ1
	RET
DISP_WRITE_NONE:
	MOV	COMMOND,#81H
	MOV	DISP_BUFF,#'*'                    
	LCALL	DISP1				;DISP	"*"
	RET
DISP_WRITE_ADD:
	CJNE	A,#WRITE_ADD,DISP_WRITE_LENGTH
	MOV	A,COUNT
	CJNE	A,#1,DISP_WRITE_ADD0
	MOV	COMMOND,#82H
	MOV	DISP_BUFF,#'A'
	LCALL	DISP1    			;DISP	"A"
	RET
DISP_WRITE_ADD0:
	CJNE	A,#2,DISP_WRITE_ADD1
	MOV	COMMOND,#83H
	LCALL	DISP1				;DISP	"DISP_BUFF"
	RET
DISP_WRITE_ADD1:
   	MOV	COMMOND,#84H
	LCALL	DISP1				;DISP	"DISP_BUFF"
	RET	
DISP_WRITE_LENGTH:
	CJNE	A,#WRITE_LENGTH,DISP_WRITE_DATA
	MOV	A,COUNT
	CJNE	A,#1,DISP_WRITE_LENGTH0
	MOV	COMMOND,#85H
	MOV	DISP_BUFF,#'L'			
	LCALL	DISP1				;DISP	"L"
	RET
DISP_WRITE_LENGTH0:
	MOV	COMMOND,#86H
	LCALL	DISP1				;DISP	"DISP_BUFF"
	RET
DISP_WRITE_DATA:
	MOV	A,COUNT
	CJNE	A,#1,DISP_WRITE_DATA1
	MOV	COMMOND,#0C0H
	MOV	DISP_BUFF,#'S'			
	LCALL	DISP1				;DISP	"S"
	RET
DISP_WRITE_DATA1:
	ADD	A,#0BEH
	MOV	COMMOND,A			
	LCALL	DISP1				;DISP	"DISP_BUFF"
	RET
;--------------------------
;FUNCTION:读模式下显示相关信息及数据
;--------------------------
DISP_READ1:
	MOV	A,SUB_MODE
	CJNE	A,#READ_NONE,DISP_READ_ADD
	MOV	A,COUNT
	CJNE	A,#0,DISP_READ_NONE
	MOV	COMMOND,#80H			
	MOV	DISP_BUFF,#'R'
	LCALL	DISP1				;DISP	"R"
	RET
DISP_RET:
	RET
DISP_READ_NONE:
	MOV	COMMOND,#81H
	MOV	DISP_BUFF,#'*'			
	LCALL 	DISP1				;DISP	"*"
	RET
DISP_READ_ADD:
	CJNE	A,#READ_ADD,DISP_READ_LENGTH
	MOV	A,COUNT
	CJNE	A,#1,DISP_READ_ADD1
	MOV	COMMOND,#82H
	MOV	DISP_BUFF,#'A'			
	LCALL	DISP1				;DISP	"A"
	RET
DISP_READ_ADD1:
	CJNE	A,#2,DISP_READ_ADD2
	MOV	COMMOND,#83H
	LCALL	DISP1				;DISP	"DISP_BUFF"
	RET
DISP_READ_ADD2:
	MOV	COMMOND,#84H
	LCALL	DISP1				;DISP	"DISP_BUFF"
	RET	
DISP_READ_LENGTH:
	CJNE	A,#READ_LENGTH,DISP_READ_DATA
	MOV	A,COUNT
	CJNE	A,#1,DISP_READ_LENGTH1
	MOV	COMMOND,#85H
	MOV	DISP_BUFF,#'L'
	LCALL	DISP1				;DISP	"L"
	RET
DISP_READ_LENGTH1:
	MOV	COMMOND,#86H
	LCALL	DISP1				;DISP	"DISP_BUFF"
	RET
DISP_READ_DATA:
	MOV	R0,#R_DATA_BUFF
	MOV	COMMOND,#0C0H
DISP_READ_DATA1:
	MOV  	A,@R0
	ANL	A,#0F0H
	SWAP	A
	MOV	DISP_BUFF,A
	LCALL	DISP_CHANGE
	LCALL	DISP1
	INC	COMMOND
	MOV     A,@R0
	ANL	A,#0FH
	MOV	DISP_BUFF,A
	LCALL	DISP_CHANGE
	LCALL	DISP1
	INC	COMMOND
	INC	R0			
	DJNZ	READ_LENGTH_BUFF1,DISP_READ_DATA1
	RET
;-------------------------------------------
;FUNCTION:按键扫描子程序
;------------------------------------
SCAN_KEY:
	MOV	P1,#1FH
	CLR	P3.0
	MOV	A,P1
	ORL	A,#0E0H
	CPL	A
	JNZ	SCAN_1
	RET
SCAN_1:
	LCALL	DELAY5MS
    	MOV	P1,#1FH
	CLR	P3.0
	MOV	A,P1
	ORL	A,#0E0H
	CPL	A
	JNZ	SCAN_2
	RET
SCAN_2:
	SETB	DISP_FLAG
    	SETB	P3.0
	MOV	P1,#0DFH
	JNB	P1.1,SCAN_KEY_1
	JNB	P1.2,SCAN_KEY_2
	JNB	P1.3,SCAN_KEY_3
	JNB	P1.4,SCAN_KEY_4
	MOV	P1,#0BFH
	JNB	P1.0,SCAN_KEY_5
	JNB	P1.1,SCAN_KEY_6
	JNB	P1.2,SCAN_KEY_7
	JNB	P1.3,SCAN_KEY_8
	JNB	P1.4,SCAN_KEY_9
	MOV	P1,#7FH
  	JNB	P1.0,SCAN_KEY_10
	JNB	P1.1,SCAN_KEY_11
	JNB	P1.2,SCAN_KEY_12
	JNB	P1.3,SCAN_KEY_13
	JNB	P1.4,SCAN_KEY_14
	CLR	P3.0
	MOV	P1,#0FFH
    	JNB	P1.1,SCAN_KEY_15
	JNB	P1.2,SCAN_KEY_16
	JNB	P1.3,SCAN_KEY_17
	JNB	P1.4,SCAN_KEY_18
	RET
;--------------
;FUNCITON:储存按键值并转到相应处理程序
;----------------
SCAN_KEY_1:
	MOV	KEY_BUFF,#00H
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_2:
	MOV	KEY_BUFF,#04H
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_3:
	MOV	KEY_BUFF,#08H
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_4:
	MOV	KEY_BUFF,#0CH
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_5:
	LJMP	MODE_CHANGE
	RET
SCAN_KEY_6:
	MOV	KEY_BUFF,#01H
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_7:
	MOV	KEY_BUFF,#05H
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_8:
	MOV	KEY_BUFF,#09H
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_9:
	MOV	KEY_BUFF,#0DH
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_10:
	LJMP	SUB_MODE_CHANGE
	RET
SCAN_KEY_11:
	MOV	KEY_BUFF,#02H
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_12:
	MOV	KEY_BUFF,#06H
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_13:
	MOV	KEY_BUFF,#0AH
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_14:
	MOV	KEY_BUFF,#0EH
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_15:
	MOV	KEY_BUFF,#03H
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_16:
	MOV	KEY_BUFF,#07H
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_17:
	MOV	KEY_BUFF,#0BH
	LJMP	KEY_PROCESS
	RET
SCAN_KEY_18:
	MOV	KEY_BUFF,#0FH
	LJMP	KEY_PROCESS
	RET
;--------------------
;FUNCTION:写模式下按键处理子程序
;---------------------
KEY_PROCESS:
	MOV	A,MODE
	CJNE	A,#WRITE,KEY_PROCESS_READ1
	MOV	A,SUB_MODE
	CJNE	A,#WRITE_NONE,KEY_PROCESS_WRITE_2
	RET
KEY_PROCESS_READ1:
	LJMP	KEY_PROCESS_READ
	RET
KEY_PROCESS_WRITE_2:
	CJNE	A,#WRITE_ADD,KEY_PROCESS_WRITE_3
	INC	COUNT
	MOV	A,COUNT
	CJNE	A,#2,KEY_PROCESS_WRITE_21
	MOV	A,KEY_BUFF
	SWAP	A
	MOV	WRITE_DATA_BUFF,A
	MOV	A,WRITE_ADD_BUFF
	ANL	A,#0FH
	ORL	A,WRITE_DATA_BUFF
	MOV	WRITE_ADD_BUFF,A
	MOV	DISP_BUFF,KEY_BUFF
	LCALL	DISP_CHANGE
	RET
KEY_PROCESS_WRITE_21:
	CJNE	A,#3,KEY_PROCESS_WRITE_22
	MOV	A,WRITE_ADD_BUFF
	ANL	A,#0F0H
	ORL	A,KEY_BUFF
	MOV	WRITE_ADD_BUFF,A
	MOV	DISP_BUFF,KEY_BUFF
	LCALL	DISP_CHANGE
	RET
KEY_PROCESS_WRITE_22:
	MOV	COUNT,#2
	MOV	A,WRITE_ADD_BUFF
	ANL	A,#0FH
	MOV	WRITE_ADD_BUFF,A
	MOV	A,KEY_BUFF
	SWAP	A
	ORL	A,WRITE_ADD_BUFF
	MOV	WRITE_ADD_BUFF,A
	MOV	DISP_BUFF,KEY_BUFF
	LCALL	DISP_CHANGE
	RET
KEY_PROCESS_WRITE_3:
	CJNE	A,#WRITE_LENGTH,KEY_PROCESS_WRITE_4     
        INC	COUNT
	MOV	A,COUNT
	CJNE	A,#2,KEY_PROCESS_WRITE_31
	MOV	WRITE_LENGTH_BUFF,KEY_BUFF
	MOV	DISP_BUFF,KEY_BUFF
	LCALL	DISP_CHANGE
	RET
KEY_PROCESS_WRITE_31:
	MOV	COUNT,#2
	MOV	WRITE_LENGTH_BUFF,KEY_BUFF
	MOV	DISP_BUFF,KEY_BUFF
	LCALL	DISP_CHANGE
	RET
;--------------------
;FUNCTION:对输入用于存储的数据进行处理,当超过输入长度时数据从头开始从写
;--------------------
KEY_PROCESS_WRITE_4:
        INC	COUNT
	MOV	A,COUNT
	CJNE	A,WRITE_LENGTH_BUFF1,KEY_PROCESS_WRITE_41
	MOV	A,KEY_BUFF
	MOV	WRITE_DATA_BUFF,A
	MOV	A,@R0
	ANL	A,#0F0H
	ORL	A,WRITE_DATA_BUFF
	MOV	@R0,A
	INC	R0
	MOV	R6,#2	
	MOV	DISP_BUFF,KEY_BUFF
	LCALL	DISP_CHANGE
	RET
KEY_PROCESS_WRITE_41:
	JNC	KEY_PROCESS_WRITE_42
	CJNE	R6,#2,KEY_PROCESS_WRITE_411
	MOV	A,KEY_BUFF
	SWAP	A
    	MOV	WRITE_DATA_BUFF,A
	MOV	A,@R0
	ANL	A,#0FH
	ORL	A,WRITE_DATA_BUFF
	MOV	@R0,A
	DEC	R6
	LJMP	KEY_RET1
KEY_PROCESS_WRITE_411:	
	MOV	A,KEY_BUFF
	MOV	WRITE_DATA_BUFF,A
	MOV	A,@R0
	ANL	A,#0F0H
	ORL	A,WRITE_DATA_BUFF
	MOV	@R0,A
	INC	R0
	MOV	R6,#2	
KEY_RET1:
	MOV	DISP_BUFF,KEY_BUFF
	LCALL	DISP_CHANGE
	RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -