查询.asm

来自「红外抄表器.rar」· 汇编 代码 · 共 279 行

ASM
279
字号

TSTATE2:CJNE A,#02H,TSTAT20
;========================================================================================查询状态================================
        LJMP DSTATE2
TSTAT20:LJMP TSTATE3
DSTATE2:LCALL SCANKEY     ;查询状态
        MOV A,KEYNUM
        CJNE A,#0FFH,DKEY20
        LCALL DLY10MS
        LJMP SCAN         ;无键按下
DKEY20: CJNE A,#01H,DKEY21
;----------------------------------------------------------------查询状态-查询键(01H)--------------------------
CKEY20: 
        JB FINISH,KEY201
        LJMP BGINQ
KEY201: LJMP SCAN

DKEY21: CJNE A,#02H,DKEY22
;----------------------------------------------------------------查询状态-设置键--------------------------------
CKEY21: MOV STATE,#03H          ;设置为设置状态
        MOV JIHAOH,#00H
        MOV JIHAOL,#01H
        CLR FINISH
        CLR SUCCESS
        LCALL CLEAR
        CLR DISMOD
        LCALL DISJH       ;显示"机号"
        SETB DISMOD
        LCALL DISJIHAO    ;反白显示机号
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#13H
        LCALL CCW_PR      ;"设"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#14H
        LCALL CCW_PR      ;"置"
        LJMP SCAN
		
DKEY22: CJNE A,#03H,DKEY23
;-----------------------------------------------------------------查询状态-百位键------------------------------
        JNB FINISH,KEY221
        LJMP EDSCAN
KEY221: LCALL KEYBW ;调百位键处理函数
        LJMP EDSCAN

DKEY23: CJNE A,#04H,DKEY24
;-----------------------------------------------------------------查询状态-十位键-------------------------------
        JNB FINISH,KEY231
        LJMP EDSCAN
KEY231: LCALL KEYSW     ;调十位键处理函数
        LJMP EDSCAN

DKEY24: CJNE A,#05H,DKEY25 
;----------------------------------------------------------------查询状态-个位键---------------------------------
        JNB FINISH,KEY240
        LJMP EDSCAN
KEY240: LCALL KEYGW     ;调个位键处理函数
        LJMP EDSCAN

DKEY25: CJNE A,#06H,DKEY26
;---------------------------------------------------------------查询状态-消除键-----------------------------------
CKEY25: 
        JNB FINISH,KEY251
        LJMP SCAN
KEY251: MOV JIHAOH,#00H
        MOV JIHAOL,#01H
        SETB DISMOD
        LCALL DISJIHAO
        LJMP SCAN

DKEY26: CJNE A,#07H,DKEY27
;--------------------------------------------------------------查询状态-返回键-------------------------------------
CKEY26: MOV STATE,#00H
        MOV JIHAOH,#00H
        MOV JIHAOL,#01H
        CLR ES
        CLR EA
        LCALL CLEAR
        LCALL DISTITL
        LJMP SCAN

DKEY27: CJNE A,#08H,SCAN
;-----------------------------------------------------------查询状态-确定键---------------------------------------------
        JNB FINISH,BGINQ
        JNB SUCCESS,REINQ
REINQ: 
        CLR FINISH
        CLR SUCCESS
        LCALL CLEAR
        CLR DISMOD
        LCALL DISJH
        SETB DISMOD
        LCALL DISJIHAO
        CLR DISMOD
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#1BH
        LCALL CCW_PR      ;"查"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#1CH
        LCALL CCW_PR      ;"询"
        LJMP SCAN

		
;;;;;;;;;;;查询;;;;;;;;;;;;;;;;;;;;;;;;
BGINQ:  ;CLR FLAG
        SETB FINISH
        CLR SUCCESS
        clr DISMOD
        lcall DISJHAO
        ;lcall dishuhao    ;刷新机号、户号显示(非反白)
        MOV A,JIHAOH
        JNZ BGINQ1
        MOV A,JIHAOL
        JNZ BGINQ1   
        LJMP FAIL2
BGINQ1: 
		 MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#0AH
        LCALL CCW_PR      ;"正"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#0BH
        LCALL CCW_PR      ;"在"
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV CODE,#1BH
        LCALL CCW_PR      ;"查"
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV CODE,#1CH
        LCALL CCW_PR      ;"询"
		
		
		
		 MOV A,JIHAOH
        MOV R5,A
        MOV A,JIHAOL
        MOV R4,A
        LCALL BCD4B        ;两压缩BCD码转16进制,转换后高位存R5中,低位存R4中
        MOV A,R5
        MOV DAT16H,A
        MOV A,R4
        MOV DAT16L,A
        CLR C
        SUBB A,#01H
        JC SUC1_11
        MOV R4,A
        MOV A,DAT16H
        MOV R5,A
        LJMP SUC1_22
SUC1_11: MOV A,DAT16H
        CLR C
        SUBB A,#01H
        MOV R5,A
        MOV R4,#0FFH
SUC1_22: LCALL BINRL   ;左移一位
        LCALL BINRL
        MOV A,R5
        MOV ADDRH,A     ;每户分配4字节存储空间,两位地址号,两位总用电量
        MOV A,R4
        MOV ADDRL,A     ;计算本户在24C64中的首地址

		
		
		
		 MOV COUNT,#04H	;取出数据字节数
        MOV R0,#DAT		;地址
        LCALL LDDAT
		
		
		
        MOV A,DAT
		 XRL A,JIHAOH
		 JZ HX00;
		 LJMP FAIL2
HX00:	 MOV A,DAT+1
		 XRL A,JIHAOL
		 JZ HX01
		 LJMP FAIL2
HX01:   
		 SETB SUCCESS      ;查询结束
        CLR DISMOD
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#19H
        LCALL CCW_PR      ;"用"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#1AH
        LCALL CCW_PR      ;"量"
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV A,DAT+2
        SWAP A
        ANL A,#0FH     	;保留高4位
        MOV KINBUF,A      ;暂存
        MOV A,DAT+2
        ANL A,#0FH        ;保留低4位
        MOV KINBUF+1,A    ;暂存
        MOV A,DAT+3
        SWAP A 
        ANL A,#0FH			;保留高4位
        MOV KINBUF+2,A	;暂存
        MOV A,DAT+3
        ANL A,#0FH			;保留低4位
        MOV KINBUF+3,A	;暂存
        ;LCALL CALNUM
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV CODE,KINBUF
        LCALL CNW_PR
        MOV O_YL,#00H
        MOV O_XL,#28H
        MOV CODE,KINBUF+1
        LCALL CNW_PR
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV CODE,KINBUF+2
        LCALL CNW_PR      ;显示电量
        MOV O_YL,#00H
        MOV O_XL,#38H
        MOV CODE,KINBUF+3
        LCALL CNW_PR
        LJMP SCAN
		
FAIL2:  CLR DISMOD
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#1BH
        LCALL CCW_PR      ;"查"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#1CH
        LCALL CCW_PR      ;"询"
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV CODE,#11H
        LCALL CCW_PR      ;"失"
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV CODE,#12H
        LCALL CCW_PR      ;"败"
        LJMP SCAN


		
		
LDDAT:  LCALL AT1         ;START
	MOV A,#0A0H
	LCALL ATW2        ;虚写操作器件寻址00H(第一片AT24C64)
	JB PSW.5,LDDAT
	MOV A,ADDRH
        LCALL ATW2        ;
	JB PSW.5,LDDAT
	MOV A,ADDRL
        LCALL ATW2        ;虚写存储单元地址
	JB PSW.5,LDDAT
        ;以上为先初始化一个读数据地址
        LCALL AT1         ;START
	MOV A,#0A1H
	LCALL ATW2        ;读操作器件寻址00H(第一片AT24C64)
	JB PSW.5,LDDAT
        MOV R7,COUNT
        CJNE R7,#01,LD01
        LJMP LDDAT1
LD01:   DEC R7
LDDAT0: LCALL ATR2        ;现行地址读(0000H)
        MOV @R0,A
        INC R0
        DJNZ R7,LDDAT0
LDDAT1: LCALL ATR3  		;读最后一字节,读完后给AT24C64发停止信号
        MOV @R0,A
        inc r0
        LCALL ATW3			;停止信号
        RET

⌨️ 快捷键说明

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