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

📄 屏幕显示(51).asm

📁 这是一个有关于单片机屏幕显示的的源代码。真的不很不错。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;2003-01-18 16:43:59
;问题:
;(1)输出或测量时无法更换UNIT(数字键处理程序未清K7B位)
;(2)测量电信号时屏幕底部显示压力传感器量程

;KPA,MPA,PSI,AT,BAR,MBAR,MH2O,MMH2O,IWC,MMHG,INHG1111111
;AT	工程大气压
;PSI	磅力每平方英寸
;INHG	英寸汞柱

;2002-08-16 14:21:34(1字节),共开辟3字节内存
;(2)量程及序号从测量模块发送而来,在通信子程序中存储
;(3)测量压力页的显示:本页性质位(测量=0),本页UNIT(1字节)当前传感器量程序号
;0-10KPA,0-16KPA,0-100KPA,-100KPA-0KPA,0-1MPA,0-1.6MPA,0-6.0MPA,0-6.8MPA,0-10MPA,0-16MPA

;压感量程及其序号的显示		;2天
;(1)量程存放位置零点(1位或1字节)满度(1字节),序号存放位置

;2002-08-27 14:07:57
;13种压力UNIT的显示		;1天

;******PROGRAM START
;--------外部引脚定义X25045------
	XCS	BIT	P2.3	;X25045 的片选,也是WDI, 0有效
	XSCK	BIT	P3.5	;X5045读写时钟
	XSO	BIT	P2.2	;X5045读写数据线
	XSI	BIT	P2.2

	BUZ	BIT	P2.0	;蜂鸣器引脚,指示按键操作有效
	RLP	BIT	P2.4	;REAR LIGHT;背光控制引脚

	TEN	BIT	P3.4	;EN485使能

;----------------DS12887A---------
	CS12887	BIT	P2.5	;DS12887A片选

;----------------液晶屏所用引脚------
	;DB0-DB7-->P0
	RW	BIT 	P3.6
	DI	BIT	P3.7
	CSA	BIT	P2.6
	CSB	BIT	P2.7
	EN	BIT	P2.1

;-------外通信使用引脚=------
	XRK	BIT	P3.2	;外中断时钟(中断0)
	XRD	BIT	P3.3	;外通信收数据

	XTK	BIT	P3.3
	;XTK	BIT	P0.0`
	XTD	BIT	P3.2	;外通信发数据

;键盘引脚接于P1口
;测量输出量个数:
	MOUN	EQU	15
	MCMAX	EQU	1FH	;测量最大命令
	OCMAX	EQU	17H	;输出最大命令
	OCN	EQU	16	;测量工作命令个数
	MCN	EQU	31	;输出工作命令个数

;##############内存定义###############
;位区20H-2BH
;-----键盘用位20H-------
	KEYB	EQU	20H
	PV	BIT	20H.0	;按键(KEY-PRESS)有效(VALID)标志位
	NUM	BIT	20H.1	;数字状态
	UNT	BIT	20H.2	;UNIT状态
	CP	BIT	20H.3	;步进继续(CONTINUE)0/暂停(PAUSE)1
	OL	BIT	20H.4	;定值输出(OUTING)锁定(LOCKED)/继续跟踪
	SA	BIT	20H.5	;步(STEP)进前进(ADVANCE)位
	ZC1	BIT	20H.6	;p1页测量清零
	ZC2	BIT	20H.7	;p2页测量清零

;--------数值转换用位21H------
	NVT	EQU	21H	;NUMERICAL VALUE TRANSITION
	PO	BIT	21H.0	;设定值(输出量)极性(POLARITY)位
	PM	BIT	21H.1	;测量值极性位
	PSC	BIT	21H.2	;步进当前值的极性
	SO	BIT	21H.3	;设定(SETTING)数据超(OVER)量程标志
				;或用于标定页显示时指示当前为何模块
	X38H	BIT	21H.4	;浮点运算用符号位
	X39H	BIT	21H.5
	X3AH	BIT	21H.6
	X3CH	BIT	21H.7

;-------通信用位22H-25H-------
	RBS	EQU	22H	;接收位(BITS)
	MO1	BIT	22H.0	;P1页测量超量程
	MO2	BIT	22H.1	;P2页测量超量程
	BEY	BIT	22H.2	;测量超量程位
	LP	BIT	22H.3	;输出模块工作在步进模式,ENTER键置位
	FO	BIT	22H.4	;输出模块工作在定值输出模式
	WM	BIT	22H.5	;等待确定的测量命令;用于更换UNIT时测量值区全显零
	M12	BIT	22H.6	;=0 P1页测量电信号  =1 P2页测量电信号

	CUB	EQU	23H	;COMMUNICATE USE BITS
	CV	BIT	23H.0	;通信有效(VALID)位
	CTO	BIT	23H.1	;通信(COMMUNICATION)时间到(TIME OUT)
	CEO	BIT	23H.2	;输出模块通信故障位
	CEM	BIT	23H.3	;测量模块通信故障位
	MN	BIT	23H.4	;测量模块新命令位(即生即用)
	ON	BIT	23H.5	;测量模块新命令位(即生即用)
	OKB	BIT	23H.6	;精度原始位
	UC	BIT	23H.7	;UNIT CHANGE

	PRB	EQU	24H	;精度位(PRECISION); PA,ECE,TV,NS
	OK	BIT	24H.0	;输出进入精度标志(输出OK)
	ECO	BIT	24H.2	;EEPROM系数错误位
	LX	BIT	24H.3	;负载过大故障位
	LN	BIT	24H.4	;负载太小故障位

	XUB	EQU	25H	;外中断(标定传递命令及数据)使用位
	ID	BIT	25H.0	;进入标定
	XV	BIT	25H.1	;接收到有效的外部命令
	XRE	BIT	25H.3	;外中断接收时钟正确标志位
	KPC	BIT	25H.4	;C键被按住
	ZC	BIT	25H.5	;零校对
	RN	BIT	25H.6	;许久未有键操作,恢复原设定值	
	SPO	BIT	25H.7	;设定值极性备份

;-------显示(DISPLAY)用(USE)位(BITS)26H-27H--------
	DUB	EQU	26H
	RF	BIT	26H.0	;屏幕刷新位,(REFURBISH)
	FLK	BIT	26H.1	;闪烁(FLICKERING)位
	DR	BIT	26H.2	;显示内容改变,显示(D..)申请(REQUISITION)
	RV	BIT	26H.3	;反黑显示标志,0,正常; 1,反黑(白);REVERSE VIDEO
	CR	BIT	26H.4	;清(CLR)显位,填充空白时置位
	AS	BIT	26H.5	;液晶显示选择显区位,AS=0,R7<64,选第1片;AS=1,R7>63,选第2片
	SZ	BIT	26H.6	;=1,步进(S..)头或尾 选定值为零(ZERO);
		;即生即用位,显示步进值用,测量值和步进当前值浮点转换十进制用
	SB	BIT	26H.7	;步进方向; SB=0,右箭KBV-->KEV,SB=1,左箭KBV<--KEV

	HD	BIT	27H.0	;=1,当前转换值为测量电阻值或频率值
	STO	BIT	27H.1	;步近当前值转换十进制超量程
	KPP	BIT	27H.3	;当前按键为P键标志位
	TCA	BIT	27H.5	;变送命令确定=1
	HS	BIT	27H.7	;步进台阶为10/100状态,位=1

	KV	BIT	28H.0	;按键操作有效标志位
	DCE	BIT	28H.1	;标定模块通信故障
	KPR	BIT	28H.3	;RIGHT键被按住
	DDT	BIT	28H.5	;标定数据需要转换
	ECM	BIT	28H.7	;=1,测量模块系数错误

	SAO	BIT	29H.0	;=1,步进超范围110/100,禁止继续步进(STEP ADVANCE OVER)
	SAS	BIT	29H.1	;=1,启动一次步进输出
	BEC	BIT	29H.3	;步进是否结束批判断使用,
				;=1,起始值(屏幕选定左边值)<终止值(屏幕右边值)
	CEC	BIT	29H.4	;=1,步进当前值<终止值(由屏幕步进方向箭头指向值)
	DZC	BIT	29H.5	;P1P2页零点校准显示数值转换公用位
	DMO	BIT	29H.6	;P1P2页测量超量程公用位
	TPD	BIT	29H.7	;显示P3(变送)页标志位

	MT	BIT	2AH.0		;=1转换测量值
	PE	BIT	2AH.1		;测量压力/电信号区别公共位
	PA0	BIT	2AH.2		;另一页的基本属性0测量,1输出
	IOP	BIT	2AH.3		;模拟变送输入输出量程AB端公共极性位
	IOW	BIT	2AH.4		;模拟变送输入输出量程方向公用位
	CEP	BIT	2AH.5		;压力模块通信故障位
	PNC0	BIT	2AH.6		;设定值或测量值符号显示公用位

	TIE	BIT	2BH.2		;内部温度故障
	TIP	BIT	2BH.3
	HTI	BIT	2BH.4		;=0,隐藏内部温度
	IPA	BIT	2BH.5		;变送输入量程A端极性
	IPB	BIT	2BH.6		;变送输入量程B端极性
	OPA	BIT	2BH.7		;变送输出量程A端极性

	SYB	EQU	2CH		;显示等使用的一些标志位
	PA1	BIT	SYB.0		;P1页基本属性位(0测量/1输出)
	PA2	BIT	SYB.1		;P2页基本属性位(0测量/1输出)
	VC	BIT	SYB.2		;输出属性位(0定值/1步进)
	PNC1	BIT	SYB.3		;P1页测量值或显示值正负符号位(0正/1负)
	PNC2	BIT	SYB.4		;P2页测量值或显示值正负符号位(0正/1负)
	HDZ	BIT	SYB.5		;=1,传感器量程百位为0

	KSB	EQU	2DH		;键盘使用某些标志位
	K4B	BIT	KSB.0		;数字4,5,6,7键被按下UNIT选择位
	K5B	BIT	KSB.1
	K6B	BIT	KSB.2
	K7B	BIT	KSB.3
	K8B	BIT	KSB.4		;=1,数字键8被按下,UNIT选择由KSB决定
	KNB	BIT	KSB.5		;多值数字键被按下
	OPB	BIT	KSB.7		;变送输出量程B端极性

	PE1	BIT	2EH.0		;页1测量压力(0)或电信号标志位
	PE2	BIT	2EH.1		;页2测量压力(0)或电信号标志位
	ITP	BIT	2EH.2		;在变送参数设定中
	ITM	BIT	2EH.3		;变送参数设定修改中
	TIW	BIT	2EH.4		;变送输入变化方向(判断)
	TOW	BIT	2EH.5		;变送输出变化方向(判断)
	MIO	BIT	2EH.6		;变送参数修改输入量程或输出量程
	PE0	BIT	2EH.7		;两页同为测量时另一页的测量信号属性0压力信号,1电信号

	TOO	BIT	2FH.2		;变送输出超量程
	DIW	BIT	2FH.3		;变送输入变化方向(显示)
	DOW	BIT	2FH.4		;变送输出变化方向(显示)
	PZC	BIT	2FH.5		;=0,测量压力校准零位=1测量电信号校准零位

;===========内存字节区======
	KC	EQU	08H	;键盘扫描确定键(KEY)码(CODE)存区,中断用
	KD	EQU	09H	;不确定(DUBIOUS)键(K..)码存区
	STS	EQU	0AH	;0.5秒(SECOND)计数器[ST,自(SELF)时钟(TIMEPIECE)]
	STM	EQU	0BH	;分钟(MINUTE)计数器

	US	EQU	0CH	;步进值UNIT
	UNTB1	EQU	0DH	;P1页UNIT
	UNTB2	EQU	0EH	;P2页UNIT
	RSDT	EQU	0FH	;恢复设定计时器
	UM	EQU	10H	;测量电信号的UNIT
	KPT	EQU	11H	;P键被按住计时器
	KRT	EQU	12H	;RIGHT键被按住计时器
	TRC	EQU	13H	;变送量程显示光标位
	CSR	EQU	14H	;定值设定时光标(CURSOR)位置寄存器
	PNM	EQU	15H	;页码器(PAGE NUMBER MEMORY)
	MHZD	EQU	16H	;测量HZ小数位数
	CIT	EQU	17H	;步进操作当前(C..)项(ITERM),
	FZO	EQU	18H	;测量电信号值零点偏移(4)
	FMC	EQU	1CH	;当前测量值(对于压力本UNIT对应)

	DSB1	EQU	030H	;P1页显存,5字节--00EH
	DSB2	EQU	035H	;P2页显存,5字节--013H

;------步进值设定用字节------
	CMO	EQU	3AH	;测量模块(M..)旧(OLD)命令(COMMAND)
	CSO	EQU	3BH	;输出(需设定SETTING)模块旧(OLD)命令(COMMAND)
	LAD	EQU	3CH	;台阶(L..); =0,0.05/100; 1,0.5/100; =2,1/100; =3,5/100
	KBV	EQU	3DH	;步进头(BEGINNING),1字节
	KEV	EQU	3EH	;步进尾(END),1字节
				;步进头尾数据格式: 80H=0,<80H,负数,>80H,正数

	FIA	EQU	40H
	FIB	EQU	44H
	FOA	EQU	48H
	FOB	EQU	4CH

	TBD	EQU	50H	;转换用二进制形式(4)
	TDD	EQU	54H	;转换数据用压缩BCD码格式(4)
	TFD	EQU	58H	;转换用浮点格式(4)
	FFS	EQU	5CH	;定值设定浮点格式(4)
	FSB	EQU	60H	;选定步进头值的浮点格式(4)
	FSE	EQU	64H	;选定步进尾值的浮点格式(4)
	FCS	EQU	68H	;步进当前值

;---------新旧命令比较--------

	FFO	EQU	6CH	;定值输出旧值
	FBO	EQU	70H	;步进头旧值
	FEO	EQU	74H	;步进尾旧值
	FZO2	EQU	78H	;测量压力值零点偏移(4)

;---------通信收发数据区----
	CMN	EQU	7CH	;测量新命令
	CSN	EQU	7DH	;输出新命令
	CDA	EQU	7EH	;发送命令(COMMAND)及数据(DATA)区40-57,24字节
	CDL	EQU	CDA+1	;通信数据长度
	CMD	EQU	CDA+2	;通信命令
	CDB	EQU	CDA+3	;通信数据区

	DTI	EQU	0B4H	;内部温度十进制数据区
	FTI	EQU	0B6H	;内部温度浮点数区
	SPB	EQU	0BFH	;栈底

	LA	EQU	01H	;本机(LOCAL)地址(ADDRESS)
	PCON	EQU	87H	;串口波特率控制寄存器

	AUXR	EQU	8EH	;辅助积存器=0,MOVX指令访问内部增强RAM
	AUXR1	EQU	0A2H	;辅助积存器1

;=======内部增强RAM定义========
	TMC	EQU	00H	;变送参数修改光标位置字节
	K7V	EQU	01H	;数字键8对应UNIT选择数据
	UNTB	EQU	02H	;UNIT显示公共使用区
	DSBA	EQU	03H	;数值显示区暂存地址
	TRA	EQU	04H	;变送输入或输出量程A端公用字节
	TRB	EQU	05H	;变送输入或输出量程B端公用字节
	PCT	EQU	06H	;模拟变送当前值在量程中的百分比(2字节)

	SNN	EQU	08H	;压力传感器序号
	SRH	EQU	09H	;传感器量程A高字节,最高位符号,低半字节为百位
	SRM	EQU	0AH	;传感器量程A中字节,高半字节十位,低半字节为个位
	SRL	EQU	0BH	;传感器量程A低字节,高半字节十分位,低半字节为UNIT
	SRHB	EQU	0CH	;传感器量程B高字节,最高位符号,低半字节为百位
	SRMB	EQU	0DH	;传感器量程B中字节,高半字节十位,低半字节为个位
	SRLB	EQU	0EH	;传感器量程B低字节,高半字节十分位,低半字节为UNIT
	GAIN	EQU	0FH	;AD增益字节
	STB	EQU	10H	;设定值保存值(5)0F-13H
	PERC	EQU	15H	;步进当前百分比2字节

	TIRA	EQU	17H	;变送测量量程A端
	TIRB	EQU	1CH	;变送测量量程B端
	TORA	EQU	21H	;变送输出量程A端
	TORB	EQU	26H	;变送输出量程B端
	DPN1	EQU	2BH	;P1页显示小数点位置
	DPN2	EQU	2CH	;P2页显示小数点位置

	DPN	EQU	2EH	;P1页P2页显示小数点位置存放地址

;------------结束定义,程序开始-----------

	ORG 0000H
	JMP START

	ORG 0003H
	JMP X0SVR	;外部中断服务程序,接收标定命令

	ORG 000BH
	JMP T0SVR

	ORG 0023H

;*************串口中断接收子程序*************
;格式 ;AALLCCDD; :; 地址; 长度; 命令; 数据
;稍改变通信格式:对于长收发,分段接受数据
	JB RI,ENTRD
	RETI
ENTRD:
	JB XV,ENDCOM0
	PUSH PSW
	PUSH ACC
	PUSH B
	PUSH 00H
	PUSH 01H
	JNB RI,ENDCOM	;NOT RECEVIE JMP
	CALL RDBIN	;START CHR
	CJNE A,#':',ENDCOM	;:
	CALL RDHEX	;ADDR>=5,错误
	CJNE A,#5,$+3
	JNC ENDCOM
	MOV R0,#CDA
	MOV @R0,A
	CALL RDHEX	;LENTH (COMMAND +DATA)
	CJNE A,#21,$+3	;接收长度>=20,错误
	JNC ENDCOM
	MOV R0,#CDL
	MOV @R0,A
	MOV R0,A	;接收长度
	MOV R1,#CMD	;接收数据存放地址
RXDLOOP:
	CALL RDHEX
	MOV @R1,A
	INC R1
	DJNZ R0,RXDLOOP
	SETB CV		;COMMAND VALID
ENDCOM:
	CLR RI
	POP 01H
	POP 00H
	POP B
	POP ACC
	POP PSW
ENDCOM0:
	RETI

;**********外中断程序*********
;外中断程序结构本是位中断接收结构,BUT可靠性差,改为数据链接收方式,同串口接收中断
;外通信有长发送,无长接受
;起始符:'O',地址,长度,数据
X0SVR:
	JB CV,X0END0
	CLR EA
	PUSH PSW
	PUSH ACC
	PUSH B
	PUSH 1
	PUSH 0
	PUSH 2
	CALL XRB1	;起始符'O'
	JB XRE,X0END
	CJNE A,#'$',X0END
	CALL XRB1	;地址01,02或03
	JB XRE,X0END
	CJNE A,#5,$+3	;地址>=4,错误
	JNC X0END
	MOV R0,#CDA
	MOV @R0,A
	CALL XRB1	;长度
	JB XRE,X0END
	CJNE A,#21,$+3	;>20,错误
	JNC X0END
	MOV R0,#CDL
	MOV @R0,A
	MOV B,A
	MOV R0,#CMD	;命令
XDLINK:			;接收数据链
	CALL XRB1
	JB XRE,X0END
	MOV @R0,A
	INC R0
	DJNZ B,XDLINK
	SETB XV
	SETB DR
X0END:
	CLR IE0		;为防死机,认为在此屏蔽中断时间内无外中断
	POP 2
	POP 0
	POP 1
	POP B
	POP ACC
	POP PSW
	SETB EA
X0END0:
	RETI

;--------通过外中断口接收一个字节-------
;加冗余语句,防止死机
XRB1:
	MOV R1,#8
	MOV R2,#40
XDLP:
	JNB XRK,XD1
	CLR XRE
	DJNZ R2,XDLP
	SETB XRE
	JMP XRBE
XD1:
	MOV C,XRD
	RLC A
	MOV R2,#40
XD2:
	JB XRK,XD3
	CLR XRE
	DJNZ R2,XD2
	SETB XRE
	JMP XRBE
XD3:
	MOV R2,#40
	DJNZ R1,XDLP
	CLR XRE
XRBE:
	RET

;***********定时扫描键盘***********
;随机中断或定时中断需保护现场,需保护的一般有: PSW,ACC,等等
T0SVR:
	PUSH PSW
	PUSH ACC
	PUSH B
	PUSH 07H
	PUSH DPH
	PUSH DPL

	MOV TL0,#0	;重置计数基数
	MOV TH0,#88H
	INC STS		;自时钟加1
	MOV A,STS
	CJNE A,#25,$+3
	JC KEYBOARD
	MOV STS,#0	;>=25*20MS,半秒到
	SETB CTO	;半秒通信1次,闪烁一次
	CPL FLK
KEYBOARD:		;扫描键盘
	MOV B,#3
	DIV AB
	MOV A,B
	JNZ STSK
	MOV C,KV	;按键有效,蜂命器发声
	CPL C
	MOV BUZ,C
	CLR KV		;清按键有效位
STSK:
	CALL SCANKEY
	JNZ BEPV
	MOV KC,#0	;键都释放,清键码字节,退出中断
	JMP UNS
BEPV:
	CJNE A,KD,UNS	;键不确定,暂存后退出
	CJNE A,KC,KET	;不处理连击
	CJNE A,#1,T0S1
	SETB KPP	;P键被按下
	JMP T0END
T0S1:
	CJNE A,#13,T0S2
	SETB KPC	;C键被按下
	JMP T0END
T0S2:
	CJNE A,#9,UNS1
	SETB KPR	;右移键被按下
	JMP T0END
KET:
	SETB PV		;当前只有一键被按下,确认键盘事件
	MOV KC,A
	JMP UNS1
UNS:
	MOV KD,A
UNS1:
	CLR KPP
	CLR KPC
	CLR KPR
	MOV KPT,#0
	MOV KRT,#0
T0END:
	POP DPL
	POP DPH
	POP 07H
	POP B
	POP ACC
	POP PSW
	RETI

;----------扫描键盘子程序-----------
;OUTPUT: ACC
;USED:   A,B,R7,P1,DPTR
SCANKEY:
	MOV P1,#0FFH
	MOV P1,#0F0H	;P1口低半段清零
	NOP
	MOV B,P1	;读回P1口状态
	MOV P1,#0FH	;P1口高半段清零
	NOP
	MOV A,P1
	ORL A,B
	CPL A
	JZ SCANEND	;无键被按下,直接退出
	MOV B,A		;另存状态数据
	MOV R7,#0
	MOV DPTR,#KEYTAB
SKLOOP:
	MOV A,R7
	MOVC A,@A+DPTR	;读取状态表数据
	CJNE A,B,CONTI
	JMP EXITFIND	;键已确定,退出查寻
CONTI:			;键值未确定,继续查询
	INC R7
	CJNE R7,#16,SKLOOP
	CLR A		;键不确定,不认可
	JMP SCANEND
EXITFIND:
	MOV A,R7	;确定键值
	INC A
SCANEND:
	RET

;-------------键输入口状态表--------------
KEYTAB:
	DB 11H,12H,14H,18H,21H,22H,24H,28H,41H,42H,44H,48H,81H,82H,84H,88H

;**************主程序开始************
START:
	MOV SP,#SPB		;栈底A0H
	CALL SETUP
MAIN:
	CALL SYSSET		;定时器中断波特率重新设置
	MOV A,TH0
	CJNE A,#88H,$+3
	JNC MAIN1
	MOV TH0,#88H
	MOV TL0,#0
MAIN1:
	CALL WTDOG


TCPROC:				;将PC命令传递给被标定模块:
	JNB XV,RDPROC
	CLR ES			;处理外部中断命令前,关掉串口及外部中断允许,
	CLR EX0			;处理完后视情况打开中断允许
	CLR XV
	CALL TC2M
	SETB EX0
	SETB ES

;将被标定模块回送数据(系数,测量值,OK符)传递给PC:
RDPROC:
	JNB ID,KBPROC
	JNB CV,KBPROC
	CLR ES
	CLR EX0
	CLR CV
	CALL T2PC
	SETB EX0
	SETB ES

;在标定中不处理键盘和通信:
KBPROC:
	JNB PV,COMPROC
	CLR PV			;键盘处理
	JB ID,DISPROC
	CALL KEYPROC

COMPROC:
	JNB CTO,DISPROC
	CLR CTO			;通信处理
	CALL TIMP		;时间处理
	JB ID,DISPROC
	CLR EX0
	CALL CAMP		;与压力模块通信
	CALL NOCJ		;输出测量新旧命令判断
	CALL CAMI		;与测量模块通信
	CALL CAMO		;与输出模块通信
	SETB EX0
;标定中仅显示标定页:
DISPROC:
	JNB RN,DSP2		;恢复原设定值
	CLR RN
	SETB KV			;声音提示
	MOV CSR,#0
	SETB DR
	CALL IRCOPY
	MOV C,SPO
	MOV PO,C
	JNB PA1,DSP1		;恢复P1或P2输出的符号
	MOV PNC1,C
DSP1:
	JNB PA2,DSP2
	MOV PNC2,C
DSP2:
	MOV C,DR
	ORL C,RF
	JNC MAIN0
	JNB RF,DISRQ
	CLR RF			;屏幕刷新
	CALL CLS
DISRQ:
	CLR DR			;响应显示请求
	CLR RV
	CALL DISPLAY
MAIN0:
	JMP MAIN

;=========喂狗========
WTDOG:
	CLR XCS
	NOP
	SETB XCS
	RET


;**************键盘事件处理************

;--------键盘处理程序-----
KEYPROC:
	MOV A,KC
	JZ KCDERR
	CJNE A,#17,$+3	;CODE<=16
	JNC KCDERR
KCDRIT:
	DEC A
	RL A
	MOV DPTR,#JMPTAB
	JMP @A+DPTR
KCDERR:
	NOP
	NOP
	RET
;-----------各键对应键码如下----------
;正好对应面板的排列:
;P=1, 1/MV=2, 2/V=3, 3/MA=4
;UP=5, 4/K=6,5/S=7, 6/OHM=8
;RIGHT=9, 7/PT100=10, 8/CU50=11, 9/HZ=12
;C=13, IN=14, OUT=15, ENTER=16
;----------散转表格-----------
JMPTAB:
	AJMP KEYP
	AJMP KEY1
	AJMP KEY2
	AJMP KEY3
	AJMP KEYUP
	AJMP KEY4
	AJMP KEY5
	AJMP KEY6
	AJMP KEYR
	AJMP KEY7
	AJMP KEY8
	AJMP KEY9
	AJMP KEYC
	AJMP KEY0
	AJMP KEYIO
	LJMP KENT


;--------- 步进值的选定(修改) ---------
;读出修改步长,计算新的步进值,读出最大值,判断是否超量程,若超则赋最小值
;使用: R1,暂存新步进值,B,DPTR,..
INSV:
	MOV A,#7	;读步长
	MOV B,US
	CALL GPSD
	ADD A,@R0	;计算
	MOV R1,A
	MOV A,#9	;最大值
	MOV B,US
	CALL GPSD
	MOV B,R1
	CJNE A,B,$+3
	JNC INSE
	MOV A,#10	;超极值,赋最小值
	MOV B,US
	CALL GPSD
	MOV B,A
INSE:
	MOV @R0,B
	SETB DR
	RET

;-----------从ROM中读取参数特性数据---------
;入口: A,特性数据位置; B,UNIT
;出口: A,B不改变
;注意: A<256/9
GPSD:
	PUSH B
	MOV B,#MOUN
	MUL AB
	POP B
	ADD A,B
	DEC A
	MOV DPTR,#PSTAB
	MOVC A,@A+DPTR
	RET

;---------测量零点校准-------
MOSP:
	SETB RF
	MOV C,PE
	MOV PZC,C
	CPL DZC
	MOV C,DZC

⌨️ 快捷键说明

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