查询.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 + -
显示快捷键?