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

📄 kychbiao_36.asm

📁 红外抄表器.rar
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        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,JIHAO
        DEC A
        MOV B,#128
        MUL AB
        MOV ADDRH,B
        MOV ADDRL,A       ;计算本户数据在24C64中的首地址
        MOV COUNT,#1
        MOV R0,#DAT
        LCALL LDDAT
        MOV A,DAT
        JNZ CMP03
        LJMP FAIL2        ;户数等于0
CMP03:  SWAP A
        ANL A,#0FH
        CJNE A,#0AH,CMP04
CMP04:  JC CMP05
        LJMP FAIL2
CMP05:  MOV B,#10
        MUL AB
        MOV TMP,A
        MOV A,DAT
        ANL A,#0FH
        CJNE A,#0AH,CMP06
CMP06:  JC CMP07
        LJMP FAIL2
CMP07:  ADD A,TMP
        MOV HUSHU,A
        CJNE A,#43,KEY273
KEY273: JC KEY274         ;户数大于42,用户数据出错
        MOV HUSHU,#42
        LJMP FAIL2
KEY274: MOV A,HUHAO
        CJNE A,HUSHU,BGINQ3
        LJMP BGINQ4
BGINQ3: JC BGINQ4
        LJMP FAIL2
BGINQ4: MOV A,HUSHU
        MOV B,#3
        MUL AB
        ADD A,#01H       ;计算总字节数(包括户数)
        MOV B,#32
        DIV AB
        MOV R3,A         ;需要的整页数(每页32字节)
        MOV R4,B         ;剩余的字节数
        MOV R0,#DAT
        CJNE R3,#00H,CKINQ02
        LJMP CKINQ03
CKINQ02:MOV COUNT,#32
        LCALL LDDAT       ;此子程序中R0自动调整
        mov a,addrl
        add a,#32
        mov addrl,a
        mov a,addrh
        addc a,#00h
        mov addrh,a       ;调整读E2PROM起始地址
        DJNZ R3,CKINQ02
CKINQ03:CJNE R4,#00H,CKINQ04
        LJMP CMINQ02
CKINQ04:MOV COUNT,R4
        LCALL LDDAT
CMINQ02:MOV A,HUHAO
        DEC A
        MOV B,#3
        MUL AB
        INC A             ;一字节户数
        ADD A,#DAT
        MOV ADDRH,A       ;借用ADDRH存本户整数内存首字节地址
        MOV R0,A          ;本户整数内存首字节地址
        MOV R2,#3
CHK22:  MOV A,@R0
        INC R0
        MOV TMP,A
        ANL A,#0FH
        CJNE A,#0AH,KEY275
KEY275: JC KEY276
        LJMP FAIL2
KEY276: MOV A,TMP
        SWAP A
        ANL A,#0FH
        CJNE A,#0AH,KEY277
KEY277: JC KEY278
        LJMP FAIL2
KEY278: DJNZ R2,CHK22

COMINQ: 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 R0,ADDRH
        MOV A,@R0
        ANL A,#0FH
        MOV CODE,A
        LCALL CNW_PR      ;最高位
        MOV O_YL,#00H
        MOV O_XL,#28H
        INC R0
        MOV A,@R0
        SWAP A
        ANL A,#0FH
        MOV CODE,A
        LCALL CNW_PR      ;
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV A,@R0
        ANL A,#0FH
        MOV CODE,A
        LCALL CNW_PR      ;
        MOV O_YL,#00H
        MOV O_XL,#38H
        INC R0
        MOV A,@R0
        SWAP A
        ANL A,#0FH
        MOV CODE,A
        LCALL CNW_PR      ;
        MOV O_YL,#00H
        MOV O_XL,#40H
        MOV A,@R0
        ANL A,#0FH
        MOV CODE,A
        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

TSTATE3:CJNE A,#03H,TSTAT30
        LJMP DSTATE3
TSTAT30:LJMP TSTATE4
DSTATE3:LCALL SCANKEY     ;打印状态
        MOV A,KEYNUM
        CJNE A,#0FFH,DKEY31
        LCALL DLY10MS
        LJMP SCAN         ;无键按下

DKEY31: CJNE A,#02H,DKEY32
CKEY31: LCALL DLY10MS
        LCALL KEXAM       ;打印键
        JNZ CKEY31        ;等键放开
        JB FINISH,KEY311
        LJMP BGPRN
KEY311: LJMP SCAN

DKEY32: CJNE A,#03H,DKEY33
        JNB FINISH,KEY321
        LJMP EDSCAN
KEY321: JNB FLAG,KEY322     ;百位键
        LJMP EDSCAN         ;户号百位无效
KEY322: MOV A,JIHAO
        CJNE A,#101,KEY323
KEY323: JC KEY324
        MOV A,JIHAO
        MOV B,#100
        DIV AB
        MOV JIHAO,B       ;机号超过200,百位回0
        LJMP KEY325
KEY324: MOV A,JIHAO
        ADD A,#100
        MOV JIHAO,A
KEY325: SETB DISMOD
        LCALL DISJIHAO
        LJMP EDSCAN

DKEY33: CJNE A,#04H,DKEY34
        JNB FINISH,KEY331
        LJMP EDSCAN
KEY331: JNB FLAG,KEY332   ;十位键
        MOV A,HUHAO       ;调整户号
        ADD A,#10
        CJNE A,#43,K331
K331:   JC K332
        MOV A,HUHAO
        MOV B,#10
        DIV AB
        MOV HUHAO,B
        LJMP K333
K332:   MOV HUHAO,A
K333:   SETB DISMOD
        LCALL DISHUHAO
        LJMP EDSCAN
KEY332: MOV A,JIHAO
        MOV B,#100
        DIV AB
        MOV TMP,A          ;百位送存
        CJNE A,#02H,KEY333
KEY333: JC KEY334
        LJMP EDSCAN        ;机号百位为2,十位不能调整
KEY334: MOV A,B
        MOV B,#10
        DIV AB
        CJNE A,#09H,KEY335
KEY335: JC KEY336
        MOV A,TMP
        MOV TMP,B          ;个位数
        MOV B,#100
        MUL AB
        ADD A,TMP
        MOV JIHAO,A
        LJMP KEY338
KEY336: MOV A,JIHAO        ;十位小于9
        ADD A,#10
        MOV JIHAO,A
KEY338: SETB DISMOD
        LCALL DISJIHAO
        LJMP EDSCAN

DKEY34: CJNE A,#05H,DKEY35
        JNB FINISH,KEY341  ;个位键
        LJMP EDSCAN
KEY341: JNB FLAG,KEY342
        MOV A,HUHAO
        INC A
        CJNE A,#43,K341
K341:   JC K342           ;户号小于43号
        MOV A,HUHAO
        MOV B,#10
        DIV AB
        MOV B,#10
        MUL AB
        MOV HUHAO,A
        LJMP K343
K342:   MOV HUHAO,A
K343:   SETB DISMOD
        LCALL DISHUHAO
        LJMP EDSCAN
KEY342: MOV A,JIHAO
        MOV B,#10
        DIV AB
        MOV TMP,A
        CJNE A,#20,KEY343
KEY343: JC KEY344          ;机号小于200
        LJMP EDSCAN
KEY344: MOV A,B
        INC A
        CJNE A,#10,KEY345
KEY345: JC KEY346
        MOV A,TMP
        MOV B,#10
        MUL AB
        MOV JIHAO,A
        LJMP KEY347
KEY346: MOV B,A            ;个位
        MOV A,TMP          ;10的倍数
        MOV TMP,B          ;个位送TMP
        MOV B,#10
        MUL AB
        ADD A,TMP
        MOV JIHAO,A
KEY347: SETB DISMOD
        LCALL DISJIHAO
        LJMP EDSCAN

DKEY35: CJNE A,#06H,DKEY36
CKEY35: LCALL DLY10MS
        LCALL KEXAM       ;清除键
        JNZ CKEY35        ;等键放开
        JNB FINISH,KEY351
        LJMP SCAN
KEY351: JB FLAG,KEY353
        MOV JIHAO,#00H
        SETB DISMOD
        LCALL DISJIHAO
        LJMP SCAN
KEY353: MOV HUHAO,#00H
        SETB DISMOD
        LCALL DISHUHAO
        LJMP SCAN

DKEY36: CJNE A,#07H,DKEY37
CKEY36: LCALL DLY10MS
        LCALL KEXAM       ;返回键
        JNZ CKEY36        ;等键放开
        MOV STATE,#00H
        MOV JIHAO,#01H
        MOV HUHAO,#01H
        CLR ES
        CLR EA
        LCALL CLEAR
        LCALL DISTITL
        LJMP SCAN

DKEY37: CJNE A,#08H,KEY370
        LJMP CKEY37
KEY370: LJMP SCAN
CKEY37: LCALL DLY10MS     ;确定键
        LCALL KEXAM
        JNZ CKEY37        ;等键放开
        JNB FINISH,KEY372
        JNB SUCCESS,REPRN
        INC HUHAO         ;打印完成,机号不变,户号加1
        MOV A,HUHAO
        CJNE A,#43,KEY371
KEY371: JC REPRN
        MOV HUHAO,#01H
REPRN:  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

KEY372: JNB FLAG,K37F
        LJMP BGPRN
K37F:   MOV A,JIHAO
        JNZ K370
        SETB FINISH
        CLR DISMOD
        LCALL DISJIHAO
        LJMP FAIL3
K370:   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 CMP08
        SETB FINISH
        CLR DISMOD
        LCALL DISJIHAO
        LJMP FAIL3        ;户数等于0
CMP08:  SWAP A
        ANL A,#0FH
        CJNE A,#0AH,CMPB1
CMPB1:  JC CMPB2
        SETB FINISH
        CLR DISMOD
        LCALL DISJIHAO
        LJMP FAIL3
CMPB2:  MOV B,#10
        MUL AB
        MOV TMP,A
        MOV A,DAT
        ANL A,#0FH
        CJNE A,#0AH,CMPB3
CMPB3:  JC CMPB4
        SETB FINISH
        CLR DISMOD
        LCALL DISJIHAO
        LJMP FAIL3
CMPB4:  ADD A,TMP
        MOV HUSHU,A
        CJNE A,#43,K373
K373:   JC K374           ;户数大于42,用户数据出错
        MOV HUSHU,#42
        SETB FINISH
        CLR DISMOD
        LCALL DISJIHAO
        LJMP FAIL3
K374:   MOV A,HUHAO
        CJNE A,HUSHU,K376
        LJMP K37A
K376:   JC K37A
K379:   MOV HUHAO,#01H
K37A:   SETB FLAG
        CLR DISMOD
        LCALL DISJIHAO
        SETB DISMOD
        LCALL DISHUHAO
        LJMP SCAN

;;;;;;;;;;;打印;;;;;;;;;;;;;;;;;;;;;;;;
BGPRN:  CLR FLAG
        SETB FINISH
        CLR SUCCESS
        clr dismod
        lcall disjihao
        lcall dishuhao    ;刷新机号、户号显示(非反白)
        MOV A,JIHAO
        JNZ BGPRN1
        LJMP FAIL3
BGPRN1: 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,#13H
        LCALL CCW_PR      ;"打"
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV CODE,#14H
        LCALL CCW_PR      ;"印"
        MOV A,JIHAO
        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 CMP09
        LJMP FAIL3        ;户数等于0
CMP09:  SWAP A
        ANL A,#0FH
        CJNE A,#0AH,CMPC1
CMPC1:  JC CMPC2
        LJMP FAIL3
CMPC2:  MOV B,#10
        MUL AB
        MOV TMP,A
        MOV A,DAT
        ANL A,#0FH
        CJNE A,#0AH,CMPC3
CMPC3:  JC CMPC4
        LJMP FAIL3
CMPC4:  ADD A,TMP
        MOV HUSHU,A
        CJNE A,#43,KEY373
KEY373: JC KEY374         ;户数大于42,用户数据出错
        MOV HUSHU,#42
        LJMP FAIL3
KEY374: MOV A,HUHAO
        CJNE A,HUSHU,BGPRN3
        LJMP BGPRN4
BGPRN3: JC BGPRN4
        LJMP FAIL3
BGPRN4: MOV A,HUSHU
        MOV B,#3
        MUL AB
        ADD A,#01H       ;计算总字节数

⌨️ 快捷键说明

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