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

📄 key.asm

📁 自己制作的MAX038信号发生器程序
💻 ASM
字号:
;;;;;;;---------------------------------按键程序参考-------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;****编程状态****;;;;;;;;;;;;;;;;;;;;;;;;;;
SYSTEM09:		MOV		R0,KEYCODE		;散转指令根据KEYCODE的值来转到相应的程序执行
				CJNE	R0,#0BH,BCKEYGO1;判断按键码是否大于现有按键码
BCKEYGO1:		JC		BCKEYGO2
				LJMP	KEYEND
BCKEYGO2:		MOV		DPTR,#DEALTAB09	;取表头地址
				MOV		A,R0
				MOV		B,#03H			;长跳转指令占3个字节
				MUL		AB				;R0的内容乘以3
				XCH		A,B				;高低位互换
				ADD		A,DPH			;计算高地址
				MOV		DPH,A			;高地址给DPH
				XCH		A,B				
				JMP		@A+DPTR			;跳到散转表中相应位置
				
DEALTAB09:		LJMP	BCKEY1			;"调格"
				LJMP	BCKEY2			;"班产"
				LJMP	BCKEY3			;"换箱"
				LJMP	BCKEY4			;"班组"
				LJMP	BCKEY0			;"+"
				LJMP	BCKEY6			;"调纬"
				LJMP	BCKEY7			;"盘长"
				LJMP	BCKEY8			;"设定"
				LJMP	BCKEY9			;"RST"
				LJMP	BCKEY5			;"-"
				LJMP	KEYEND			;自检
				LJMP	BCKEYB			;编程
				
				
BCKEY0:			MOV		A,EFDATA		
				ANL		A,#0FH			;取出地址内容2
				CJNE	A,#0FH,BCNUMGO1	;判断地址内容2是否到最大F
				MOV		A,EFDATA
				ANL		A,#0F0H			;将地址内容2的值复位成0
				MOV		EFDATA,A		;存回
				SJMP	BCOUT			;送出
BCNUMGO1:		MOV		A,#01H			;地址内容2的值+1
				ADD		A,EFDATA
				MOV		EFDATA,A		;存回
BCOUT:			LCALL	BCDTDIS			;调用编程数据显示程序
				LJMP	KEYEND
				
BCKEY1:			MOV		A,EFDATA		
				ANL		A,#0F0H			;取出地址内容1
				SWAP	A				;高低字节交换
				CJNE	A,#0FH,BCNUMGO2	;判断地址内容2是否到最大F
				MOV		A,EFDATA
				ANL		A,#0FH			;将地址内容1的值复位成0
				MOV		EFDATA,A		;存回
				SJMP	BCOUT1			;送出
BCNUMGO2:		MOV		A,#10H			;地址内容1的值+1
				ADD		A,EFDATA
				MOV		EFDATA,A		;存回
BCOUT1:			LCALL	BCDTDIS			;调用编程数据显示程序
				LJMP	KEYEND
				
BCKEY2:			JB		ADSUFLAG,BCSUBB	;如果为减模式则转到减功能
AINCNEXT:		MOV		A,ADDESS1		;判断地址是否到达最大1FFFH
				CJNE	A,#1FH,BCKEY2GO1
				MOV		A,ADDESS2
				CJNE	A,#0FFH,BCKEY2GO1
				MOV		ADDESS1,#00H
				MOV		ADDESS2,#00H	;如果地址到达最大,则复位成0000H
				MOV		DPH,ADDESS1
				MOV		DPL,ADDESS2
				SJMP	BCDAOUT
BCKEY2GO1:		MOV		DPH,ADDESS1
				MOV		DPL,ADDESS2
				INC		DPTR			;地址+1
				MOV		ADDESS1,DPH
				MOV		ADDESS2,DPL
BCDAOUT:		MOVX	A,@DPTR			;读出地址内容
				MOV		EFDATA,A		
				LCALL	BCDTDIS			;调用编程数据显示程序
				LJMP	KEYEND
BCSUBB:			MOV		A,ADDESS2		
				ANL		A,#0FH			;取出地址2
				CJNE	A,#00H,BCNUMGO3	;判断地址2是否到最小0
				MOV		A,ADDESS2
				ORL		A,#0FH			;将地址2复位成F
				MOV		ADDESS2,A		;存回
				SJMP	BCOUT2			;送出
BCNUMGO3:		MOV		A,ADDESS2		;地址2-1
				CLR		C
				SUBB	A,#01H
				MOV		ADDESS2,A		;存回
BCOUT2:			MOV		DPH,ADDESS1
				MOV		DPL,ADDESS2
				SJMP	BCDAOUT
				LJMP	KEYEND			

				
BCKEY3:			JB		ADSUFLAG,BCSUBB1	;如果为减模式则转到减功能
				MOV		A,ADDESS2	
				ANL		A,#0F0H			;取出地址1
				SWAP	A
				CJNE	A,#0FH,BCNUMGO4	;判断地址1是否到最大F
				MOV		A,ADDESS2
				ANL		A,#0FH			;将地址1的值复位成0
				MOV		ADDESS2,A		;存回
				SJMP	BCOUT3			;送出
BCNUMGO4:		MOV		A,#10H			;地址内容2的值+1
				ADD		A,ADDESS2
				MOV		ADDESS2,A		;存回
BCOUT3:			MOV		DPH,ADDESS1
				MOV		DPL,ADDESS2
				SJMP	BCDAOUT
				LJMP	KEYEND		
BCSUBB1:		MOV		A,ADDESS2		
				ANL		A,#0F0H			;取出地址1
				CJNE	A,#00H,BCNUMGO5	;判断地址1是否到最小0
				MOV		A,ADDESS2
				ORL		A,#0F0H			;将地址1复位成F
				MOV		ADDESS2,A		;存回
				SJMP	BCOUT4			;送出
BCNUMGO5:		MOV		A,ADDESS2		;地址1-1
				CLR		C
				SUBB	A,#10H
				MOV		ADDESS2,A		;存回
BCOUT4:			MOV		DPH,ADDESS1
				MOV		DPL,ADDESS2
				SJMP	BCDAOUT
				LJMP	KEYEND			
				
BCKEY4:			JB		ADSUFLAG,BCSUBB2	;如果为减模式则转到减功能
				MOV		A,ADDESS1	
				CJNE	A,#01FH,BCNUMGO6	;判断地址1是否到最大F
				MOV		ADDESS1,#00H		;到最大,恢复到00H
				SJMP	BCOUT5			;送出
BCNUMGO6:		INC		ADDESS1			;地址1+1
BCOUT5:			MOV		DPH,ADDESS1
				MOV		DPL,ADDESS2
				LJMP	BCDAOUT
					
BCSUBB2:		MOV		A,ADDESS1	
				CJNE	A,#00H,BCNUMGO7	;判断地址1是否到最小00
				MOV		ADDESS1,#1FH		;到最小,恢复到1FH
				SJMP	BCOUT6			;送出
BCNUMGO7:		DEC		ADDESS1			;地址1+1
BCOUT6:			MOV		DPH,ADDESS1
				MOV		DPL,ADDESS2
				LJMP	BCDAOUT
				
BCKEY5:			MOV		A,EFDATA		
				ANL		A,#0FH			;取出地址内容2
				CJNE	A,#00H,BCNUMGO8	;判断地址内容2是否到最小0
				MOV		A,EFDATA
				ORL		A,#0FH			;将地址内容2的值复位成F
				MOV		EFDATA,A		;存回
				SJMP	BCOUT7			;送出
BCNUMGO8:		MOV		A,EFDATA		;地址内容2的值-1
				CLR		C
				SUBB	A,#01H
				MOV		EFDATA,A		;存回
BCOUT7:			LCALL	BCDTDIS			;调用编程数据显示程序
				LJMP	KEYEND
BCKEY6:			MOV		A,EFDATA		
				ANL		A,#0F0H			;取出地址内容1
				CJNE	A,#00H,BCNUMGO9	;判断地址内容1是否到最小0
				MOV		A,EFDATA
				ORL		A,#0F0H			;将地址内容1的值复位成F
				MOV		EFDATA,A		;存回
				SJMP	BCOUT8			;送出
BCNUMGO9:		MOV		A,EFDATA		;地址内容2的值-1
				CLR		C
				SUBB	A,#10H
				MOV		EFDATA,A		;存回
BCOUT8:			LCALL	BCDTDIS			;调用编程数据显示程序
				LJMP	KEYEND
BCKEY7:			LCALL	KEYOVER			;等待抬起
				MOV		DPH,ADDESS1
				MOV		DPL,ADDESS2
				MOV	A,EFDATA			;将EFDATA的值写入指定的地址中
				CLR		P1.3
				MOVX	@DPTR,A			;写入
				SETB	P1.3
				LCALL	WRDEALY			;调用12.5MS的延时程序,等待28C64B数据写入完毕
				LJMP	AINCNEXT		;数据写入以后指向下一个地址
				LJMP	KEYEND
BCKEY8:			LCALL	KEYOVER			;等待按键抬起(KEYOVER只有按键抬起后才返回)
				CPL		ADSUFLAG		;将+/-状态翻转
				LJMP	KEYEND
BCKEY9:			LJMP	STARTGO4

BCKEYB:			LJMP	STARTGO4		;在编程状态下再次按下编程键,直接复位



;;;;;;;;;;;;;;;;;;;;;;;;编程数据显示程序;;;;;;;;;;;;;;;;;;;;;;;;
;;函数名:	 BCDTDIS
;;功能:	 	 编程数据显示
;;操作的变量:ADDESS1,编程地址高两位数据
;;	         ADDESS2,编程地址低两位数据
;;			 EFDATA,地址内容
;;调用的程序:DISPLAY,显示程序
;;堆栈使用:	 
;;注意:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCDTDIS:	MOV		A,ADDESS1			;编程地址高两位数据显示在前两位
			ANL		A,#0FH				;屏蔽掉1地址值
			MOV		DISBUF2,A			;送2地址值到显示缓冲区2
			MOV		A,ADDESS1
			ANL		A,#0F0H				;屏蔽掉2地址值
			SWAP	A	
			MOV		DISBUF1,A			;送1地址值到显示缓冲区1
			MOV		A,ADDESS2			;编程地址高两位数据显示在中间两位
			ANL		A,#0FH				;屏蔽掉3地址值
			MOV		DISBUF4,A			;送4地址值到显示缓冲区4
			MOV		A,ADDESS2
			ANL		A,#0F0H				;屏蔽掉4地址值
			SWAP	A	
			MOV		DISBUF3,A			;送3地址值到显示缓冲区3
			MOV		A,EFDATA			;地址内容数据显示在最后两位
			ANL		A,#0FH				;屏蔽掉1内容值
			MOV		DISBUF6,A			;送2内容值到显示缓冲区6
			MOV		A,EFDATA
			ANL		A,#0F0H				;屏蔽掉2内容值
			SWAP	A	
			MOV		DISBUF5,A			;送1内容值到显示缓冲区5
			ACALL	DISPLAY				;送出显示
			RET
;;;;;;------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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