?? 查詢.asm
字號:
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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -