📄 kychbiao_36.asm
字号:
CLR TI
LCALL DLY10MS
MOV A,JIHAOL
SETB TB8 ;
MOV SBUF,A
JNB TI,$
CLR TI
LCALL DLY10MS
;MOV A,#00H ;校验和高字节
;SETB TB8 ;
;MOV SBUF,A
;JNB TI,$
;CLR TI
;LCALL DLY10MS
;MOV A,#63H ;校验和低字节
;SETB TB8 ;发命令时TB8=1
;MOV SBUF,A
;JNB TI,$
;CLR TI
; LCALL DLY10MS
;////////////////////////////////;
; LCALL DLY1MS
; MOV A,SBUF
; CLR RI
; LCALL DLY1MS
; MOV A,SBUF
CLR RI
;////////////////////////////////;
; MOV COUNT2,#128
; MOV R0,#DAT
;LOOPREC:JNB RI,$
; MOV A,SBUF
; MOV @R0,A
; INC R0
; CLR RI
; DJNZ COUNT2,LOOPREC
;////////////////////////////////;
MOV COUNT2,#3 ;接收数据头缓冲区
MOV R0,#DAT
WAITA0: MOV DLCNT,#250
WAIT1: JB RI,BEGIN1
LCALL DLY1MS
DJNZ DLCNT,WAIT1
LJMP FAIL1
BEGIN1: MOV A,SBUF
CLR RI
MOV @R0,A
INC R0
DJNZ COUNT2,WAITA0
MOV R0,#DAT ;数据头
MOV A,@R0
XRL A,#62H ;判断命令字是否正确
JZ CONT0
LJMP FAIL1
CONT0: INC R0
INC R0 ;命令字
MOV A,@R0
XRL A,#62H ;判断命令字是否正确
JZ CONT1
LJMP FAIL1
CONT1: DEC R0 ;数据长度
MOV A,@R0
MOV DATNUM,A ;数据长度
MOV COUNT2,A
MOV R0,#DAT+3
WAITA1: MOV DLCNT,#250
WAIT2: JB RI,BEGIN2
LCALL DLY1MS
DJNZ DLCNT,WAIT2
LJMP FAIL1
BEGIN2: MOV A,SBUF
CLR RI
MOV @R0,A
INC R0
DJNZ COUNT2,WAITA1
;抄表结束
CB_COM: MOV R0,#DAT+3 ;指向表地址存储单元
MOV A,@R0
XRL A,JIHAOH
JZ CB_COM01
LJMP FAIL1
CB_COM01:INC R0
MOV A,@R0
XRL A,JIHAOL
JZ CB_COM02
LJMP FAIL1
CB_COM02:MOV A,DATNUM ;第3个字节为数据长度
XRL A,#04H
JZ SUC1
LJMP FAIL1
;抄表成功
SUC1: MOV A,JIHAOH
MOV R5,A
MOV A,JIHAOL
MOV R4,A
LCALL BCD4B
MOV A,R5
MOV DAT16H,A
MOV A,R4
MOV DAT16L,A
CLR C
SUBB A,#01H
JC SUC1_1
MOV R4,A
MOV A,DAT16H
MOV R5,A
LJMP SUC1_2
SUC1_1: MOV A,DAT16H
CLR C
SUBB A,#01H
MOV R5,A
MOV R4,#0FFH
SUC1_2: LCALL BINRL ;左移一位
LCALL BINRL
MOV A,R5
MOV ADDRH,A ;每户分配4字节存储空间,两位地址号,两位总用电量
MOV A,R4
MOV ADDRL,A ;计算本户在24C64中的首地址
MOV R0,#DAT+3 ;写入数据缓冲区
MOV R3,#04H
STOR1: MOV COUNT,#4
LCALL WRDAT ;此子程序内R0自动调整
CONT3: SETB SUCCESS
MOV O_YL,#00H
MOV O_XL,#00H
MOV CODE,#06H
LCALL CCW_PR ;"抄"
MOV O_YL,#00H
MOV O_XL,#10H
MOV CODE,#07H
LCALL CCW_PR ;"表"
MOV O_YL,#00H
MOV O_XL,#20H
MOV CODE,#0FH
LCALL CCW_PR ;"成"
MOV O_YL,#00H
MOV O_XL,#30H
MOV CODE,#10H
LCALL CCW_PR ;"功"
LJMP SCAN
FAIL1: MOV O_YL,#00H
MOV O_XL,#00H
MOV CODE,#06H
LCALL CCW_PR ;"抄"
MOV O_YL,#00H
MOV O_XL,#10H
MOV CODE,#07H
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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
CKEY20: LCALL DLY10MS
LCALL KEXAM
JNZ CKEY20 ;等键放开
JB FINISH,KEY201
LJMP BGINQ
KEY201: LJMP SCAN
DKEY21: CJNE A,#02H,DKEY22
CKEY21: LCALL KEXAM
JNZ CKEY21 ;等键放开
MOV STATE,#03H ;当前机号,户号均不变
CLR FLAG
CLR FINISH
CLR SUCCESS
LCALL CLEAR
CLR DISMOD
LCALL DISJH ;"显示机号"
LCALL DISHH ;"显示户号"
SETB DISMOD
LCALL DISJIHAO ;反白显示机号
CLR DISMOD
LCALL DISHUHAO ;显示户号
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: JNB FLAG,KEY222 ;百位键
LJMP EDSCAN ;户号百位无效
KEY222: MOV A,JIHAO
CJNE A,#101,KEY223
KEY223: JC KEY224
MOV A,JIHAO
MOV B,#100
DIV AB
MOV JIHAO,B ;机号超过200,百位回0
LJMP KEY225
KEY224: MOV A,JIHAO
ADD A,#100
MOV JIHAO,A
KEY225: SETB DISMOD
LCALL DISJIHAO
LJMP EDSCAN
DKEY23: CJNE A,#04H,DKEY24
JNB FINISH,KEY231
LJMP EDSCAN
KEY231: JNB FLAG,KEY232 ;十位键
MOV A,HUHAO ;调整户号
ADD A,#10
CJNE A,#43,K231
K231: JC K232
MOV A,HUHAO
MOV B,#10
DIV AB
MOV HUHAO,B
LJMP K233
K232: MOV HUHAO,A
K233: SETB DISMOD
LCALL DISHUHAO
LJMP EDSCAN
KEY232: MOV A,JIHAO
MOV B,#100
DIV AB
MOV TMP,A ;百位送存
CJNE A,#02H,KEY233
KEY233: JC KEY234
LJMP EDSCAN ;机号百位为2,十位不能调整
KEY234: MOV A,B
MOV B,#10
DIV AB
CJNE A,#09H,KEY235
KEY235: JC KEY236
MOV A,TMP
MOV TMP,B ;个位数
MOV B,#100
MUL AB
ADD A,TMP
MOV JIHAO,A
LJMP KEY238
KEY236: MOV A,JIHAO ;十位小于9
ADD A,#10
MOV JIHAO,A
KEY238: SETB DISMOD
LCALL DISJIHAO
LJMP EDSCAN
DKEY24: CJNE A,#05H,DKEY240
LJMP KEY240
DKEY240:LJMP DKEY25 ;个位键
KEY240: JNB FINISH,KEY241
LJMP EDSCAN
KEY241: JNB FLAG,KEY242
MOV A,HUHAO
MOV B,#10
DIV AB
MOV TMP,A
MOV A,B
INC A
CJNE A,#10,K241
K241: JC K242
MOV A,TMP
MOV B,#10
MUL AB
MOV HUHAO,A
LJMP K243
K242: MOV B,A
MOV A,TMP
MOV TMP,B
MOV B,#10
MUL AB
ADD A,TMP
MOV HUHAO,A
CJNE A,#43,CKK243
CKK243: JC K243
MOV B,#10
DIV AB
MOV B,#10
MUL AB
MOV HUHAO,A
K243: SETB DISMOD
LCALL DISHUHAO
LJMP EDSCAN
KEY242: MOV A,JIHAO
MOV B,#10
DIV AB
MOV TMP,A
CJNE A,#20,KEY243
KEY243: JC KEY244 ;机号小于200
LJMP EDSCAN
KEY244: MOV A,B
INC A
CJNE A,#10,KEY245
KEY245: JC KEY246
MOV A,TMP
MOV B,#10
MUL AB
MOV JIHAO,A
LJMP KEY247
KEY246: MOV B,A ;个位
MOV A,TMP ;10的倍数
MOV TMP,B ;个位送TMP
MOV B,#10
MUL AB
ADD A,TMP
MOV JIHAO,A
KEY247: SETB DISMOD
LCALL DISJIHAO
LJMP EDSCAN
DKEY25: CJNE A,#06H,DKEY26
CKEY25: LCALL DLY10MS
LCALL KEXAM ;清除键
JNZ CKEY25 ;等键放开
JNB FINISH,KEY251
LJMP SCAN
KEY251: JB FLAG,KEY253
MOV JIHAO,#00H
SETB DISMOD
LCALL DISJIHAO
LJMP SCAN
KEY253: MOV HUHAO,#00H
SETB DISMOD
LCALL DISHUHAO
LJMP SCAN
DKEY26: CJNE A,#07H,DKEY27
CKEY26: LCALL DLY10MS
LCALL KEXAM ;返回键
JNZ CKEY26 ;等键放开
MOV STATE,#00H
MOV JIHAO,#01H
MOV HUHAO,#01H
CLR ES
CLR EA
LCALL CLEAR
LCALL DISTITL
LJMP SCAN
DKEY27: CJNE A,#08H,KEY270
LJMP CKEY27
KEY270: LJMP SCAN
CKEY27: LCALL DLY10MS ;确定键
LCALL KEXAM
JNZ CKEY27 ;等键放开
JNB FINISH,KEY272
JNB SUCCESS,REINQ
INC HUHAO ;查询成功,机号不变,户号加1
MOV A,HUHAO
CJNE A,HUSHU,KEY271
LJMP REINQ
KEY271: JC REINQ
MOV HUHAO,#01H
REINQ: CLR FLAG
CLR FINISH
CLR SUCCESS
LCALL CLEAR
CLR DISMOD
LCALL DISJH
LCALL DISHH
SETB DISMOD
LCALL DISJIHAO
CLR DISMOD
LCALL DISHUHAO
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
KEY272: JNB FLAG,K27BB
LJMP BGINQ
K27BB: MOV A,JIHAO
JNZ K270
SETB FINISH
CLR DISMOD
LCALL DISJIHAO
LJMP FAIL2
K270: DEC A
MOV B,#128 ;每户分配128字节存储空间
MUL AB
MOV ADDRH,B
MOV ADDRL,A
MOV COUNT,#1
MOV R0,#DAT
LCALL LDDAT
MOV A,DAT
JNZ CMP01
SETB FINISH
CLR DISMOD
LCALL DISJIHAO
LJMP FAIL2
CMP01: SWAP A
ANL A,#0FH
CJNE A,#0AH,CMPA1
CMPA1: JC CMPA2
SETB FINISH
CLR DISMOD
LCALL DISJIHAO
LJMP FAIL2
CMPA2: MOV B,#10
MUL AB
MOV TMP,A
MOV A,DAT
ANL A,#0FH
CJNE A,#0AH,CMPA3
CMPA3: JC CMPA4
SETB FINISH
CLR DISMOD
LCALL DISJIHAO
LJMP FAIL2
CMPA4: ADD A,TMP
MOV HUSHU,A
CJNE A,#43,K273
K273: JC K274 ;户数大于42,用户数据出错
MOV HUSHU,#42
SETB FINISH
CLR DISMOD
LCALL DISJIHAO
LJMP FAIL2
K274: MOV A,HUHAO
JNZ K275
LJMP K279
K275: CJNE A,HUSHU,K276
LJMP K27A
K276: JC K27A
K279: MOV HUHAO,#01H
K27A: SETB FLAG
CLR DISMOD
LCALL DISJIHAO
SETB DISMOD
LCALL DISHUHAO
LJMP SCAN
;;;;;;;;;;;查询;;;;;;;;;;;;;;;;;;;;;;;;
BGINQ: CLR FLAG
SETB FINISH
CLR SUCCESS
clr dismod
lcall disjihao
lcall dishuhao ;刷新机号、户号显示(非反白)
MOV A,JIHAO
JNZ BGINQ1
LJMP FAIL2
BGINQ1: MOV A,HUHAO
JNZ BGINQ2
LJMP FAIL2
BGINQ2: MOV O_YL,#00H
MOV O_XL,#00H
MOV CODE,#0AH
LCALL CCW_PR ;"正"
MOV O_YL,#00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -