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

📄 testled.asm

📁 红外遥控利率屏汇编源码。 MCU:普通51即可 时间芯片:DS1302 遥控器:用38K晶振的任意型号彩电遥控器
💻 ASM
📖 第 1 页 / 共 3 页
字号:
K_AB54:	MOV	A,#0AH		;调谐	空数字,按了光标所在位都不亮
	LCALL	DISPLAY_NUM
	RET
K_AACC:	LCALL	DISPLAY_DOT	;单/双	小数点
	RET
K_55AA:	LCALL	RESTORE_LED_DATA;招回
	RET
K_5996:	LCALL	SAVE_DATA_AUTO_SELECT	;存储,备份数据待用
	RET
K_AB52:	LCALL	FULL_LED	;对比+
	RET
K_56A6:	LCALL	FULL_TIME	;对比-
	RET
K_AB32:	LCALL	CLR_LED		;色彩+
	RET
K_5666:	LCALL	CLR_TIME	;色彩-
	RET
K_AB2C:	LCALL	DISPLAY_LED	;亮度+
	RET
K_565A:	LCALL	DISPLAY_TIME	;亮度-
	RET
K_AD4A:	LCALL	FULL_LED	;录象
	LCALL	FULL_TIME
	RET
K_5AAA:	LCALL	DISPLAY_TIME	;电视
	LCALL	DISPLAY_LED
	RET
;*******************************************************
;根据A的值返回其LED显示数据
GET_NUM_DATA:
	PUSH	DPH
	PUSH	DPL
	MOV	DPTR,#NUMDATA
	MOVC	A,@A+DPTR
	POP	DPL
	POP	DPH
	RET
;****************************************
SET_EDIT_NUM_MODE:
	;根据DATA_INDEX.7判断是否在编辑状态(约定0为编辑状态),
	;当前不是编辑状态则进入,是编辑状态则保存数据退出
	JB	DATA_INDEX.7,ENTER_EDIT_NUM_MODE;DATA_INDEX.7为1,先前状态不是编辑中
 EXIT_EDIT_NUM_MODE:
	JNB	DATA_INDEX.6,REFRESH_NUM;判断当前状态,如果不是编辑利率状态则保存好时间信息,进入编辑利率的状态,否则就退出编辑利率状态
	LCALL	SAVE_TIME_DATA		;保存时间数据到1302
	LCALL	READ_TIME		;读取时间数据
	LCALL	DISPLAY_TIME		;刷新时间
	CLR	DATA_INDEX.6		;修改利率/时间标志位为1,表示从编辑时间状态转换为编辑利率状态
	AJMP	ENTER_EDIT_NUM_MODE
  REFRESH_NUM:
	LCALL	REFRESH_AUTO_SELECT		;刷新利率屏
	SETB	DATA_INDEX.7		;修改编辑状态标志位为1,表示退出编辑状态
	RET
 ENTER_EDIT_NUM_MODE:		;进入利率编辑模式
	MOV	DATA_INDEX,NUM_COUNT
	DEC	DATA_INDEX
	CLR	DATA_INDEX.7		;设置当前为编辑模式
	CLR	DATA_INDEX.6		;设置利率/时间标志位为利率

	PUSH	DPH
	PUSH	DPL
	LCALL	SET_DATA_DPTR_AUTO_SELECT
	LCALL	GET_INDEX_DATA_TO_BUFF	;从存储器中取出当前位置的数据,放到DATA_BUFF中
	MOV	A,#0FFH
	MOVX	@DPTR,A
	POP	DPH
	POP	DPL

	LCALL	REFRESH_AUTO_SELECT
	RET
;****************************************
SET_EDIT_TIME_MODE:
	;根据DATA_INDEX.7判断是否在编辑状态(约定0为编辑状态),
	;当前不是编辑状态则进入,是编辑状态则保存数据退出
	JB	DATA_INDEX.7,ENTER_EDIT_TIME_MODE
 EXIT_EDIT_TIME_MODE:
	JB	DATA_INDEX.6,REFRESH_TIME;判断当前编辑状态,利率/时间标志位为利率,
					 ;转到刷新利率屏,否则保存时间数据到1302,
					 ;刷新时间显示后退出
	LCALL	SAVE_NUM_DATA
	LCALL	REFRESH_AUTO_SELECT	;刷新利率屏
	AJMP	ENTER_EDIT_TIME_MODE
  REFRESH_TIME:
	LCALL	SAVE_TIME_DATA		;保存时间数据到1302
	LCALL	READ_TIME		;读取时间数据
	LCALL	REFRESH_AUTO_SELECT	;刷新时间
	SETB	DATA_INDEX.7		;修改编辑状态标志位为1,表示退出编辑状态
	RET
 ENTER_EDIT_TIME_MODE:		;进入编辑模式
	MOV	DATA_INDEX,TIME_COUNT
	DEC	DATA_INDEX
	CLR	DATA_INDEX.7		;设置当前为编辑模式
	SETB	DATA_INDEX.6		;设置利率/时间标志位为时间
	LCALL	GET_INDEX_DATA_TO_BUFF	;从存储器中取出当前位置的数据,放到DATA_BUFF中

	PUSH	DPH
	PUSH	DPL
	LCALL	SET_DATA_DPTR_AUTO_SELECT
	MOV	A,#0FFH
	MOVX	@DPTR,A
	POP	DPH
	POP	DPL

    	LCALL	READ_TIME
	LCALL	DISPLAY_TIME
	RET
;****************************************
;根据DATA_INDEX的标志刷新相应的显示屏
REFRESH_AUTO_SELECT:
	JNB	DATA_INDEX.6,REF_LED
 REF_TIME:
	LCALL	DISPLAY_TIME
	RET
 REF_LED:
	LCALL	DISPLAY_LED
	RET
;****************************************
;光标右移一位
CURSOR_DEC:
	JB	DATA_INDEX.7,CURSOR_DEC_EXIT1	;不是编辑状态的话退出
	PUSH	DPH
	PUSH	DPL
	LCALL	SET_DATA_DPTR_AUTO_SELECT
	MOV	A,DATA_BUFF
	MOVX	@DPTR,A		;将DATA_BUFF中的数据写回DATA_INDEX指示的位置
	POP	DPL
	POP	DPH

	MOV	A,DATA_INDEX
	CLR	ACC.6
	JZ	CURSOR_DEC_EXIT	;是0退出,不是0可以减1
	MOV	A,DATA_INDEX
	DEC	A
	MOV	DATA_INDEX,A
	LCALL	RESET_DATA_BUFF	;重新设置DATA_BUFF的数据
 CURSOR_DEC_EXIT:
 	LCALL	SET_EMPTY
 CURSOR_DEC_EXIT1:
 	LCALL	REFRESH_AUTO_SELECT
	RET
;****************************************
;光标左移一位
CURSOR_INC:
	JB	DATA_INDEX.7,CURSOR_INC_EXIT1	;不是编辑状态的话退出
	PUSH	B

	PUSH	DPH
	PUSH	DPL
	LCALL	SET_DATA_DPTR_AUTO_SELECT	;设置DPTR
	MOV	A,DATA_BUFF
	MOVX	@DPTR,A		;将DATA_BUFF中的数据写回DATA_INDEX指示的位置
	POP	DPL
	POP	DPH
	
	JB	DATA_INDEX.6,IS_EDIT_TIME
 IS_EDIT_NUM:
	MOV	B,NUM_COUNT
	JMP	CURSOR_INC_1
 IS_EDIT_TIME:
 	MOV	B,TIME_COUNT
 CURSOR_INC_1:
	DEC	B
	MOV	A,DATA_INDEX
	CLR	ACC.6
	CJNE	A,B,INC_ADD1	;不是末尾的数,可以+1
	SJMP	CURSOR_INC_EXIT
 INC_ADD1:
	MOV	A,DATA_INDEX
	INC	A
	MOV	DATA_INDEX,A
	LCALL	RESET_DATA_BUFF	;重新设置DATA_BUFF的数据
 CURSOR_INC_EXIT:
 	POP	B
 	LCALL	SET_EMPTY
 CURSOR_INC_EXIT1:
 	LCALL	REFRESH_AUTO_SELECT
	RET
;****************************************
;光标右移B指定的位数
CURSOR_DEC_LOOP:
	LCALL	CURSOR_DEC
	DJNZ	B,CURSOR_DEC_LOOP
	RET
;****************************************
;光标左移B指定的位数
CURSOR_INC_LOOP:
	LCALL	CURSOR_INC
	DJNZ	B,CURSOR_INC_LOOP
	RET
;****************************************
;光标右移四位
CURSOR_DEC_EX:
	JB	DATA_INDEX.7,CURSOR_DEC_EX_EXIT	;不是编辑状态的话退出
	JB	DATA_INDEX.6,DEC4_TIME
 DEC4_NUM:	;利率
 	MOV	B,#04H
	LCALL	CURSOR_DEC_LOOP
 CURSOR_DEC_EX_EXIT:
 	RET
 DEC4_TIME:	;时间
 	MOV	A,DATA_INDEX
 	CLR	ACC.6
 	CJNE	A,#0CH,DEC_SKIP_B	;千年
 	MOV	B,#04H
	LCALL	CURSOR_DEC_LOOP
 	RET
 DEC_SKIP_B:
 	CJNE	A,#0BH,DEC_SKIP_A	;百年
 	MOV	B,#03H
	LCALL	CURSOR_DEC_LOOP
	RET
 DEC_SKIP_A:
 	CJNE	A,#0AH,DEC_SKIP_9	;十年
 	MOV	B,#02H
	LCALL	CURSOR_DEC_LOOP
  	RET
 DEC_SKIP_9:
 	CJNE	A,#09H,DEC_SKIP_8	;年
 	LCALL	CURSOR_DEC
  	RET
 DEC_SKIP_8:
 	CJNE	A,#08H,DEC_SKIP_7	;十月
 	MOV	B,#02H
	LCALL	CURSOR_DEC_LOOP
  	RET
 DEC_SKIP_7:
 	CJNE	A,#07H,DEC_SKIP_6	;月
 	MOV	B,#02H
	LCALL	CURSOR_DEC_LOOP
  	RET
 DEC_SKIP_6:
 	CJNE	A,#06H,DEC_SKIP_5	;十日
 	MOV	B,#02H
	LCALL	CURSOR_DEC_LOOP
  	RET
 DEC_SKIP_5:
 	CJNE	A,#05H,DEC_SKIP_4	;日
 	LCALL	CURSOR_DEC
  	RET
 DEC_SKIP_4:
 	CJNE	A,#04H,DEC_SKIP_3	;周
 	LCALL	CURSOR_DEC
  	RET
 DEC_SKIP_3:
 	CJNE	A,#03H,DEC_SKIP_2	;十时
 	MOV	B,#03H
	LCALL	CURSOR_DEC_LOOP
  	RET
 DEC_SKIP_2:
 	CJNE	A,#02H,DEC_SKIP_1	;时
 	MOV	B,#02H
	LCALL	CURSOR_DEC_LOOP
  	RET
 DEC_SKIP_1:
 	CJNE	A,#01H,DEC_SKIP_0	;十分
 	LCALL	CURSOR_DEC
  	RET
 DEC_SKIP_0:
	RET
;****************************************
;光标左移四位
CURSOR_INC_EX:
	JB	DATA_INDEX.7,CURSOR_INC_EX_EXIT	;不是编辑状态的话退出
	JB	DATA_INDEX.6,INC4_TIME
 INC4_NUM:	;编辑利率
 	MOV	B,#04H
	LCALL	CURSOR_INC_LOOP
 CURSOR_INC_EX_EXIT:
 	RET
 INC4_TIME:	;编辑时间
 	MOV	A,DATA_INDEX
 	CLR	ACC.6
 	CJNE	A,#0CH,INC_SKIP_B	;千年
 	RET
 INC_SKIP_B:
 	CJNE	A,#0BH,INC_SKIP_A	;百年
	LCALL	CURSOR_INC_LOOP
	RET
 INC_SKIP_A:
 	CJNE	A,#0AH,INC_SKIP_9	;十年
 	MOV	B,#02H
	LCALL	CURSOR_INC_LOOP
  	RET
 INC_SKIP_9:
 	CJNE	A,#09H,INC_SKIP_8	;年
 	MOV	B,#03H
 	LCALL	CURSOR_INC
  	RET
 INC_SKIP_8:
 	CJNE	A,#08H,INC_SKIP_7	;十月
 	MOV	B,#04H
	LCALL	CURSOR_INC_LOOP
  	RET
 INC_SKIP_7:
 	CJNE	A,#07H,INC_SKIP_6	;月
 	MOV	B,#02H
	LCALL	CURSOR_INC_LOOP
  	RET
 INC_SKIP_6:
 	CJNE	A,#06H,INC_SKIP_5	;十日
 	MOV	B,#02H
	LCALL	CURSOR_INC_LOOP
  	RET
 INC_SKIP_5:
 	CJNE	A,#05H,INC_SKIP_4	;日
 	MOV	B,#02H
 	LCALL	CURSOR_INC_LOOP
  	RET
 INC_SKIP_4:
 	CJNE	A,#04H,INC_SKIP_3	;周
 	MOV	B,#02H
 	LCALL	CURSOR_INC_LOOP
  	RET
 INC_SKIP_3:
 	CJNE	A,#03H,INC_SKIP_2	;十时
	LCALL	CURSOR_INC
  	RET
 INC_SKIP_2:
 	CJNE	A,#02H,INC_SKIP_1	;时
 	MOV	B,#02H
	LCALL	CURSOR_INC_LOOP
  	RET
 INC_SKIP_1:
 	CJNE	A,#03H,INC_SKIP_0	;十分
 	MOV	B,#03H
 	LCALL	CURSOR_INC_LOOP
  	RET
 INC_SKIP_0:
 	MOV	B,#04H
	LCALL	CURSOR_INC_LOOP
	RET
;****************************************
;清空DATA_INDEX指示的目标的显示数据(全不显示)
SET_EMPTY:
	PUSH	DPH
	PUSH	DPL
	LCALL	SET_DATA_DPTR_AUTO_SELECT
	MOV	A,#0FFH
	MOVX	@DPTR,A		;将DATA_BUFF中的数据写回DATA_INDEX指示的位置
	POP	DPL
	POP	DPH
	RET
;****************************************
;光标所在的数+1,循环顺序为0-9,点保留
CURSOR_NUM_INC:
	JB	DATA_INDEX.7,CURSOR_NUM_INC_EXIT	;不是编辑状态的话退出
 	PUSH	DPH
 	PUSH	DPL
	XCH	A,B
	PUSH	ACC
	XCH	A,B

	MOV	A,DATA_BUFF
	MOV	C,ACC.7
	MOV	A,#0FFH
	MOV	ACC.7,C
	MOV	B,A			;有点B是7FH,没有点B是FFH

	MOV	DPTR,#NUMDATA		;DPTR指向LED显示数据
	MOV	A,DATA_BUFF		;从缓存中取出LED显示数据
	LCALL	GET_NUM_ID		;换算成数字
	INC	A
	CJNE	A,#0AH,SKIP_SET_Z1	;INC后不是点(空数字后的数据),跳过清0
	MOV	A,#00H			;清0
 SKIP_SET_Z1:	
	CJNE	A,#0BH,SKIP_SET_Z	;INC后不是点(空数字后的数据),跳过清0
	MOV	A,#00H			;清0
 SKIP_SET_Z:
	MOV	DPTR,#NUMDATA		;DPTR指向LED显示数据
	MOVC	A,@A+DPTR		;查表获取LED数据
	ANL	A,B
	MOV	DATA_BUFF,A		;获取的LED数据打入DATA_BUFF
	LCALL	SET_DATA_DPTR_AUTO_SELECT
	MOVX	@DPTR,A

	XCH	A,B
	POP	ACC
	XCH	A,B
 	POP	DPL
 	POP	DPH
 	LCALL	REFRESH_AUTO_SELECT
 CURSOR_NUM_INC_EXIT:
	RET
;****************************************
;光标所在的数+1,循环顺序为0-9,点保留
CURSOR_NUM_DEC:
	JB	DATA_INDEX.7,CURSOR_NUM_DEC_EXIT	;不是编辑状态的话退出
 	PUSH	DPH
 	PUSH	DPL
	XCH	A,B
	PUSH	ACC
	XCH	A,B

	MOV	A,DATA_BUFF
	MOV	C,ACC.7
	MOV	A,#0FFH
	MOV	ACC.7,C
	MOV	B,A			;有点B是7FH,没有点B是FFH

	MOV	DPTR,#NUMDATA		;DPTR指向LED显示数据
	MOV	A,DATA_BUFF		;从缓存中取出LED显示数据
	LCALL	GET_NUM_ID		;换算成数字
	DEC	A
	CJNE	A,#0FFH,SKIP_SET_EMPTY	;DEC后不是-1(0前的数据),跳过填9
	MOV	A,#09H			;
 SKIP_SET_EMPTY:
	MOV	DPTR,#NUMDATA		;DPTR指向LED显示数据
	MOVC	A,@A+DPTR		;查表获取LED数据
	ANL	A,B
	MOV	DATA_BUFF,A		;获取的LED数据打入DATA_BUFF
	LCALL	SET_DATA_DPTR_AUTO_SELECT
	MOVX	@DPTR,A

	XCH	A,B
	POP	ACC
	XCH	A,B
 	POP	DPL
 	POP	DPH
	LCALL	REFRESH_AUTO_SELECT
 CURSOR_NUM_DEC_EXIT:
	RET
;****************************************
;查表获取LED数字,返回值保存在A
GET_NUM_ID:
	PUSH	B
	XCH	A,R0
	PUSH	ACC
	XCH	A,R0
	PUSH	DPH
	PUSH	DPL

	MOV	B,A
	MOV	R0,#00H
	MOV	DPTR,#NUMDATA
 GET_NUM_ID_LOOP:
 	CLR	C
 	MOV	A,#0BH
 	SUBB	A,R0
 	JC	GET_NUM_ID_NO_FIND	;查询12次,没有找到就放弃
 	MOV	A,#00H
	MOVC	A,@A+DPTR
	INC	DPTR
	INC	R0
	XCH	A,B
	MOV	C,ACC.7
	XCH	A,B
	MOV	ACC.7,C
	CJNE	A,B,GET_NUM_ID_LOOP	;与查表数据不相符,继续查
	DEC	R0
	SJMP	GET_NUM_ID_EXIT
 GET_NUM_ID_NO_FIND:
 	MOV	R0,#00H			;没找到就填0
 GET_NUM_ID_EXIT:
 	
 	POP	DPL
 	POP	DPH
	POP	ACC
	XCH	A,R0			;将查找结果送入A,同时R0也恢复进栈的数
	POP	B
	RET
;****************************************
;根据DATA_INDEX重新设置DATA_BUFF的数据
RESET_DATA_BUFF:
	PUSH	DPH
	PUSH	DPL
	PUSH	ACC
	LCALL	SET_DATA_DPTR_AUTO_SELECT	;调用程序,设置数据的DPTR
	MOVX	A,@DPTR			;取出数据
	MOV	DATA_BUFF,A
	POP	ACC
	POP	DPL
	POP	DPH
	RET
;****************************************
;编辑利率模式,使当前光标位置闪烁
EDIT_NUM_MODE:
	CLR	EA
	LCALL	SET_DATA_DPTR_AUTO_SELECT;调用程序,设置数据的DPTR
	MOVX	A,@DPTR			;取出数据
	CJNE	A,#0FFH,DISPLAY_FILL_Z;数据不是空(0FFH)则跳到DISPLAY_FILL_Z
 DISPLAY_FILL_NUM:
	MOV	A,DATA_BUFF
	SJMP	DISPLAY_DATA
 DISPLAY_FILL_Z:			;数据不是空(0FFH)则把当前数据保存到DATA_BUFF,然后显示空(0FFH)
	MOV	DATA_BUFF,A		;数据保存到DATA_BUFF
	MOV	A,#0FFH			;显示数据的地址添FF
 DISPLAY_DATA:
	MOVX	@DPTR,A
	LCALL	DISPLAY_LED
	LCALL	READ_TIME
	LCALL	DISPLAY_TIME
	SETB	EA
	LCALL	DELAY_500MS
	CLR	EA
	JB	DATA_INDEX.6,EXIT_NUM_MODE	;DATA_INDEX.6为1则退出编辑利率状态
	JNB	DATA_INDEX.7,EDIT_NUM_MODE	;	;DATA_INDEX.7为0则循环显示,否则便向下执行,退出编辑状态
 EXIT_NUM_MODE:
	CLR	EA
	MOV	A,DATA_BUFF
	LCALL	SET_DATA_DPTR_AUTO_SELECT
	MOVX	@DPTR,A
	LCALL	REFRESH_AUTO_SELECT
	SETB	EA
	RET
;****************************************
;编辑时间模式,使当前光标位置闪烁
EDIT_TIME_MODE:
	CLR	EA
	LCALL	SET_DATA_DPTR_AUTO_SELECT
	MOVX	A,@DPTR			;取出数据
	CJNE	A,#0FFH,DISPLAY_FILL_Z1	;数据不是空(0FFH)则跳到DISPLAY_FILL_Z1
 DISPLAY_FILL_TIME:
	MOV	A,DATA_BUFF
	SJMP	DISPLAY_DATA1
 DISPLAY_FILL_Z1:			;数据不是空(0FFH)则把当前数据保存到DATA_BUFF,然后显示空(0FFH)
	MOV	DATA_BUFF,A		;数据保存到DATA_BUFF
	MOV	A,#0FFH			;显示数据的地址添FF
 DISPLAY_DATA1:
	MOVX	@DPTR,A
	LCALL	DISPLAY_TIME
	SETB	EA
	LCALL	DELAY_500MS
	CLR	EA
	JNB	DATA_INDEX.6,EXIT_TIME_MODE	;DATA_INDEX.6为0则退出编辑时间状态
	JNB	DATA_INDEX.7,EDIT_TIME_MODE	;DATA_INDEX.7为0则循环显示,否则便向下执行,退出编辑状态
 EXIT_TIME_MODE:
	CLR	EA
	MOV	A,DATA_BUFF
	LCALL	SET_DATA_DPTR_AUTO_SELECT
	MOVX	@DPTR,A
	LCALL	SAVE_TIME_DATA
	LCALL	READ_TIME
	LCALL	DISPLAY_TIME
	SETB	EA
	RET
;****************************************
;测试2K内存块,地址为2000H-3FFFH
TEST_EXT_MEM:
	MOV	DPTR,#2000H
	MOV	R0,01FH
TEST_MEM_LOOP1:
	MOV	R1,0FFH
TEST_MEM_LOOP2:
	MOVX	A,@DPTR
	PUSH	ACC
	
	MOV	A,#00H
	MOVX	@DPTR,A
	MOV	A,#0FFH
	MOVX	A,@DPTR
	CJNE	A,#00H,MEMTEST_ERR

	MOV	A,#0FFH
	MOVX	@DPTR,A
	MOV	A,#00H
	MOVX	A,@DPTR
	CJNE	A,#0FFH,MEMTEST_ERR

	POP	ACC
	MOVX	@DPTR,A

	INC	DPTR
	DJNZ	R1,TEST_MEM_LOOP2
	DJNZ	R0,TEST_MEM_LOOP1
	CLR	C
	RET
MEMTEST_ERR:
	SETB	C
	RET
;****************************************
;取出DATA_INDEX指示的数据,放到DATA_BUFF中
GET_INDEX_DATA_TO_BUFF:
	PUSH	DPH
	PUSH	DPL
	PUSH	ACC
	MOV	A,DATA_INDEX
	LCALL	SET_DATA_DPTR_AUTO_SELECT
	CLR	ACC.7
	CLR	ACC.6		;标志位全清0,仅保留序数

	MOVX	A,@DPTR		;读出A中数字的显示编码
	MOV	DATA_BUFF,A	;保存到DATA_BUFF

	POP	ACC
	POP	DPL
	POP	DPH
	RET
;****************************************
;根据DATA_INDEX设置DPTR
SET_DATA_DPTR_AUTO_SELECT:
	PUSH	ACC
	JB	DATA_INDEX.6,IS_SET_TIME_DPTR
 IS_SET_NUM_DPTR:
	MOV	DPL,NUM_START_L
	MOV	DPH,NUM_START_H
	LJMP	SET_DATA_DPTR_1
 IS_SET_TIME_DPTR:
	MOV	DPL,TIME_START_L
	MOV	DPH,TIME_START_H
 SET_DATA_DPTR_1:
	CLR	C
	MOV	A,DATA_INDEX

	CLR	ACC.7
	CLR	ACC.6
	ADD	A,DPL
	MOV	DPL,A

	MOV	A,DPH
	ADDC	A,#00H
	MOV	DPH,A
	POP	ACC
	RET
;****************************************
;根据当前编辑类型保存数据
SAVE_DATA_AUTO_SELECT:
	JB	DATA_INDEX.7,SAVE_DATA_AUTO_SELECT_EXIT	;不是编辑状态的话退出
	JNB	DATA_INDEX.6,SAVE_NUM
	LCALL	SAVE_TIME_DATA
	RET
 SAVE_NUM:

⌨️ 快捷键说明

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