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

📄 yjp_nxsx.asm

📁 一个液晶驱动程序,配合计算机软件可方便的制作文本显示器用于工控场合
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;标号:    MULD1
;功    能:双字节二进制无符号数乘法
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7
;堆栈需求:2字节

MULD1:	   MOV	   A,R3
	   MOV	   B,R7
	   MUL	   AB
	   MOV	   R4,B
	   MOV	   R5,A
	   MOV	   A,R3
	   MOV	   B,R6
	   MUL	   AB
	   ADD	   A,R4
	   MOV	   R4,A
	   CLR	   A
	   ADDC    A,B
	   MOV	   R3,A
	   MOV	   A,R2
	   MOV	   B,R7
	   MUL	   AB
	   ADD	   A,R4
	   MOV	   R4,A
	   MOV	   A,R3
	   ADDC    A,B
	   MOV	   R3,A
	   CLR	   A
	   RLC	   A
	   XCH	   A,R2
	   MOV	   B,R6
	   MUL	   AB
	   ADD	   A,R3
	   MOV	   R3,A
	   MOV	   A,R2
	   ADDC    A,B
	   MOV	   R2,A
	   RET
;;====================================
DATA_CHANG3:
	   MOV R2,#27H
	   MOV R3,#10H
	   MOV R6,#0
	   MOV A,SHOW1BUF5
	   MOV R7,A
	   LCALL MULD1
	   MOV A,R4
	   MOV R0,A
	   MOV A,R5
	   MOV R1,A
	   MOV R2,#03H
	   MOV R3,#0E8H
	   MOV R6,#0
	   MOV A,SHOW1BUF4
	   MOV R7,A
	   LCALL MULD1
	   MOV A,R5
	   ADD A,R1
	   MOV R1,A
	   MOV A,R4
	   ADDC A,R0
	   MOV R0,A
	   MOV R2,#00H
	   MOV R3,#64H
	   MOV R6,#0
	   MOV A,SHOW1BUF3
	   MOV R7,A
	   LCALL MULD1
	   MOV A,R5
	   ADD A,R1
	   MOV R1,A
	   MOV A,R4
	   ADDC A,R0
	   MOV R0,A
	   MOV A,SHOW1BUF2
	   MOV B,#10
	   MUL AB
	   ADD A,R1
	   MOV R1,A
	   MOV A,#0
	   ADDC A,R0
	   MOV R0,A
	   MOV A,SHOW1BUF1
	   ADD A,R1
	   MOV R1,A
	   MOV A,#0
	   ADDC A,R0
	   MOV R0,A
	   MOV A,R0
	   MOV R4,A
	   MOV A,R1
	   MOV R5,A
	   RET
;;====================================
PLUS:	   MOV A,FLASH_X
	   CJNE A,#00H,PP2
	   MOV A,SHOW1BUF1
	   CLR C
	   SUBB A,#9
	   JNC PA1
	   INC SHOW1BUF1
	   RET
PA1:	   MOV SHOW1BUF1,#0
	   RET
PP2:	   MOV A,FLASH_X
	   CJNE A,#01H,PP3
	   MOV A,SHOW1BUF2
	   CLR C
	   SUBB A,#9
	   JNC PA2
	   INC SHOW1BUF2
	   RET
PA2:	   MOV SHOW1BUF2,#0
	   RET
PP3:	   MOV A,FLASH_X
	   CJNE A,#02H,PP4
	   MOV A,SHOW1BUF3
	   CLR C
	   SUBB A,#9
	   JNC PA3
	   INC SHOW1BUF3
	   RET
PA3:	   MOV SHOW1BUF3,#0
	   RET
PP4:	   MOV A,FLASH_X
	   CJNE A,#03H,PP5
	   MOV A,SHOW1BUF4
	   CLR C
	   SUBB A,#9
	   JNC PA4
	   INC SHOW1BUF4
	   RET
PA4:	   MOV SHOW1BUF4,#0
	   RET
PP5:	   MOV A,FLASH_X
	   CJNE A,#04H,PP6
	   MOV A,SHOW1BUF5
	   CLR C
	   SUBB A,#9
	   JNC PA5
	   INC SHOW1BUF5
	   RET
PA5:	   MOV SHOW1BUF5,#0
PP6:	   RET
;;====================================
BAKDATA:
	   LCALL DATA_CHANG3
	   MOV A,R4
	   MOV SET_H_BUF,A
	   MOV A,R5
	   MOV SET_L_BUF,A
	   RET
;;====================================
GETDATA:
	   MOV A,SET_H_BUF
	   MOV R4,A
	   MOV A,SET_L_BUF
	   MOV R5,A
	   LCALL DATA_CHANG2
	   RET
;;====================================
KEY1_0END: RET		;上页键
KEY1_0:    LCALL KEY_COM1
	   MOV A,R7	 ;丢失表格数据
	   JNZ KEY1_0END
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#01
	   MOVC A,@A+DPTR
	   MOV R0,A
	   MOV A,#02
	   MOVC A,@A+DPTR
	   MOV R1,A
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#0
	   MOVC A,@A+DPTR
	   JZ KEY1_0END
	   LCALL KEY_COM2
	   RET
;;====================================
KEY1_1END: RET		;下页键
KEY1_1:    LCALL KEY_COM1
	   MOV A,R7	 ;丢失表格数据
	   JNZ KEY1_1END
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#04
	   MOVC A,@A+DPTR
	   MOV R0,A
	   MOV A,#05
	   MOVC A,@A+DPTR
	   MOV R1,A
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#0
	   MOVC A,@A+DPTR
	   JZ KEY1_1END
	   LCALL KEY_COM2
	   RET
;;====================================
;;在设置状态下,光标向左移一位
KEY1_2A:   MOV A,FLASH_X
	   CLR C
	   SUBB A,SHOW_LENTH
	   JNC KEY1_2END
	   INC FLASH_X
	   MOV CLR_CUR_BZ,#1
	   RET
;;....................................
KEY1_2END: RET		 ;左键
KEY1_2:    MOV A,SET_X
	   JNZ KEY1_2A	 ;设置状态
	   LCALL KEY_COM1
	   MOV A,R7	 ;丢失表格数据
	   JNZ KEY1_2END
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#07
	   MOVC A,@A+DPTR
	   MOV R0,A
	   MOV A,#08
	   MOVC A,@A+DPTR
	   MOV R1,A
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#0
	   MOVC A,@A+DPTR
	   JZ KEY1_2END
	   LCALL KEY_COM2
	   RET
;;====================================
;;在设置状态下,光标向左移一位
KEY1_3A:   MOV A,FLASH_X
	   JZ  KEY1_3AEND
	   DEC FLASH_X
	   MOV CLR_CUR_BZ,#1
KEY1_3AEND:RET
;;....................................
KEY1_3END: RET		;右键
KEY1_3:    MOV A,SET_X
	   JNZ KEY1_3A
	   LCALL KEY_COM1
	   MOV A,R7	 ;丢失表格数据
	   JNZ KEY1_3END
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#10
	   MOVC A,@A+DPTR
	   MOV R0,A
	   MOV A,#11
	   MOVC A,@A+DPTR
	   MOV R1,A
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#0
	   MOVC A,@A+DPTR
	   JZ KEY1_3END
	   LCALL KEY_COM2
	   RET
;;====================================
;;在设置状态下,将当前光标的值+1
KEY2_0A:
	   LCALL GETDATA
	   LCALL PLUS
	   LCALL BAKDATA
	   RET
;;....................................
KEY2_0END: RET		;上键
KEY2_0:    MOV A,SET_X
	   JNZ KEY2_0A	;设置状态
	   LCALL KEY_COM1
	   MOV A,R7	 ;丢失表格数据
	   JNZ KEY2_0END
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#13
	   MOVC A,@A+DPTR
	   MOV R0,A
	   MOV A,#14
	   MOVC A,@A+DPTR
	   MOV R1,A
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#0
	   MOVC A,@A+DPTR
	   JZ KEY2_0END
	   LCALL KEY_COM2
	   RET
;;====================================
MMIN:	   MOV A,FLASH_X
	   CJNE A,#00H,MP2
	   MOV A,SHOW1BUF1
	   JZ  MA1
	   DEC SHOW1BUF1
	   RET
MA1:	   MOV SHOW1BUF1,#9
	   RET
MP2:	   MOV A,FLASH_X
	   CJNE A,#01H,MP3
	   MOV A,SHOW1BUF2
	   JZ  MA2
	   DEC SHOW1BUF2
	   RET
MA2:	   MOV SHOW1BUF2,#9
	   RET
MP3:	   MOV A,FLASH_X
	   CJNE A,#02H,MP4
	   MOV A,SHOW1BUF3
	   JZ  MA3
	   DEC SHOW1BUF3
	   RET
MA3:	   MOV SHOW1BUF3,#9
	   RET
MP4:	   MOV A,FLASH_X
	   CJNE A,#03H,MP5
	   MOV A,SHOW1BUF4
	   JZ  MA4
	   DEC SHOW1BUF4
	   RET
MA4:	   MOV SHOW1BUF4,#9
	   RET
MP5:	   MOV A,FLASH_X
	   CJNE A,#04H,MP6
	   MOV A,SHOW1BUF5
	   JZ  MA5
	   DEC SHOW1BUF5
	   RET
MA5:	   MOV SHOW1BUF5,#9
MP6:	   RET
;;====================================
;;在设置状态下,将当前光标的值-1
KEY2_1A:
	   LCALL GETDATA
	   LCALL MMIN
	   LCALL BAKDATA
	   RET
;;....................................
KEY2_1END: RET		;下键
KEY2_1:    MOV A,SET_X
	   JNZ KEY2_1A	;设置状态
	   LCALL KEY_COM1
	   MOV A,R7	 ;丢失表格数据
	   JNZ KEY2_1END
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#16
	   MOVC A,@A+DPTR
	   MOV R0,A
	   MOV A,#17
	   MOVC A,@A+DPTR
	   MOV R1,A
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#0
	   MOVC A,@A+DPTR
	   JZ KEY2_1END
	   LCALL KEY_COM2
	   RET
;;====================================
KEY2_2END: RET		;SET键
KEY2_2:    LCALL KEY_COM1
	   MOV A,R7	 ;丢失表格数据
	   JNZ KEY2_2END
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#19
	   MOVC A,@A+DPTR
	   MOV R0,A
	   MOV A,#20
	   MOVC A,@A+DPTR
	   MOV R1,A
	   MOV A,R0
	   MOV DPH,A
	   MOV A,R1
	   MOV DPL,A
	   MOV A,#0
	   MOVC A,@A+DPTR
	   MOV B,A
	   JZ KEY2_2END
	   XRL A,#4
	   JZ KEY2_2A
	   MOV A,B
	   LCALL KEY_COM2
	   RET
;;....................................
KEY2_2A:	;SET键被定义成设置键
	   MOV A,#1
	   MOVC A,@A+DPTR
	   MOV SET_MODE,A
;;------------------------------------
KEY2_2B:
	   MOV A,SET_X
	   JZ  IN_SET1
	   MOV CLR_CUR_BZ,#1
	   INC SET_X
	   CLR C
	   MOV A,SET_X
	   SUBB A,SET_NUMB
	   JNC EXIT_SET1
	   MOV FLASH_X,#0
	   LCALL SET_COM1
	   RET
EXIT_SET1: MOV SET_X,#0
	   MOV FLASH_X,#0
	   MOV SET_MODE,#0
	   RET

IN_SET1:   MOV SET_X,#1
	   MOV FLASH_X,#0
	   LCALL SET_COM1
	   RET
;;....................................
SET_COM1:  MOV A,DPH_S1
	   MOV DPH,A
	   MOV A,DPL_S1
	   MOV DPL,A
	   MOV A,SET_X
	   DEC A
	   MOVC A,@A+DPTR
	   MOV DPL,A
	   MOV DPH,#01H
	   MOVX A,@DPTR
	   MOV SET_H_BUF,A
	   INC DPTR
	   MOVX A,@DPTR
	   MOV SET_L_BUF,A
;;可设置寄存器标号数据
	   MOV A,DPH_S2
	   MOV DPH,A
	   MOV A,DPL_S2
	   MOV DPL,A
	   MOV A,SET_X
	   DEC A
	   MOV B,#2
	   MUL AB
	   MOVC A,@A+DPTR
	   DEC A
	   MOV SHOW_LENTH,A
;;可设置寄存器显示位数数据
	   MOV A,DPH_S3
	   MOV DPH,A
	   MOV A,DPL_S3
	   MOV DPL,A
	   MOV A,SET_X
	   DEC A
	   MOV B,#4
	   MUL AB
	   MOV B,A
	   MOVC A,@A+DPTR
	   MOV SET_HIGH_H,A
	   MOV A,B
	   INC A
	   MOV B,A
	   MOVC A,@A+DPTR
	   MOV SET_HIGH_L,A
	   MOV A,B
	   INC A
	   MOV B,A
	   MOVC A,@A+DPTR
	   MOV SET_LOW_H,A
	   MOV A,B
	   INC A
	   MOVC A,@A+DPTR
	   MOV SET_LOW_L,A
	   RET
;;可设置寄存器上限下限数据
;;====================================
CKDATA:    MOV R7,#0
	   LCALL CKDATA_HIGH
	   LCALL CKDATA_LOW
	   RET
;;....................................
CKDATA_HIGH:
	   MOV A,SET_HIGH_L
	   CLR C
	   SUBB A,SET_L_BUF
	   MOV A,SET_HIGH_H
	   SUBB A,SET_H_BUF
	   JNC CKDATA_HIGHEND
	   MOV R7,#1
CKDATA_HIGHEND:
	   RET
;;....................................
CKDATA_LOW:
	   MOV A,SET_L_BUF
	   CLR C
	   SUBB A,SET_LOW_L
	   MOV A,SET_H_BUF
	   SUBB A,SET_LOW_H
	   JNC CKDATA_LOWEND
	   MOV R7,#1
CKDATA_LOWEND:
	   RET
;;====================================
;;将设置值存储在MWn中
KEY2_3B:
;;	   首先检查数据是否越界
;;	   如果越界,不予存储
	   LCALL CKDATA
	   MOV A,R7
	   JNZ KEY2_3B1
	   MOV A,DPH_S1
	   MOV DPH,A
	   MOV A,DPL_S1
	   MOV DPL,A
	   MOV A,SET_X
	   DEC A
	   MOVC A,@A+DPTR
	   MOV DPL,A
	   MOV DPH,#01H
	   MOV A,SET_H_BUF
	   MOVX @DPTR,A
	   INC DPTR
	   MOV A,SET_L_BUF
	   MOVX @DPTR,A
KEY2_3B1:  LCALL KEY2_2B
	   RET
;;====================================
;;将设置值存储在SDA2000A中,时钟值
KEY2_3C:
;;	   首先检查数据是否越界
;;	   如果越界,不予存储
	   LCALL CKDATA
	   MOV A,R7
	   JNZ KEY2_3C1
	   MOV A,DPH_S1
	   MOV DPH,A
	   MOV A,DPL_S1
	   MOV DPL,A
	   MOV A,SET_X
	   DEC A
	   MOVC A,@A+DPTR
	   MOV DPL,A
	   MOV DPH,#01H
	   MOV A,SET_H_BUF
	   MOVX @DPTR,A
	   INC DPTR
	   MOV A,SET_L_BUF
	   MOVX @DPTR,A
	   LCALL SDA2_HEXZH    ;转换BCD码
	   LCALL SDA2_SENDDATA ;写入时钟
;	   LCALL SDA2_BCDZH    ;转换HEX码
KEY2_3C1:  LCALL KEY2_2B
	   RET
;;====================================
KEY2_3D:
;;将设置值存储在24C021中,时段值
;;	   首先检查数据是否越界
;;	   如果越界,不予存储
	   LCALL CKDATA
	   MOV A,R7
	   JNZ KEY2_3D1
	   MOV A,DPH_S1
	   MOV DPH,A
	   MOV A,DPL_S1
	   MOV DPL,A
	   MOV A,SET_X
	   DEC A
	   MOVC A,@A+DPTR
	   MOV DPL,A
	   MOV R0,A
	   MOV DPH,#01H
	   MOV A,SET_H_BUF
	   MOVX @DPTR,A

⌨️ 快捷键说明

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