📄 实验1-缺联机.asm
字号:
MOV JIHAOH,#00H
MOV JIHAOL,#01H
CLR ES
CLR EA
LCALL CLEAR
LCALL DISTITL
LJMP SCAN
DKEY27: CJNE A,#08H,KEYLS1
;-----------------------------------------------------------查询状态-确定键---------------------------------------
LJMP KEYLS2
KEYLS1: LJMP SCAN
KEYLS2:JNB FINISH,LS01
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
LS01: LJMP BGINQ
;========================================================================================设置状态=========================
TSTATE3:CJNE A,#03H,TSTAT30
LJMP DSTATE3
TSTAT30:LJMP SCAN;TSTATE4
DSTATE3:LCALL SCANKEY ;设置状态
MOV A,KEYNUM
CJNE A,#0FFH,DKEY31
LCALL DLY10MS
LJMP SCAN ;无键按下
DKEY31: CJNE A,#02H,DKEY32
;-----------------------------------------------------------------------设置状态-设置键-----------------------
CKEY31:
JB FINISH,KEY311
LJMP BGPRN ;调设置程序
KEY311: LJMP SCAN
DKEY32: CJNE A,#03H,DKEY33
;-----------------------------------------------------------------------设置状态-百位键-----------------------
JNB FINISH,KEY321
LJMP EDSCAN
KEY321: LCALL KEYBW ;调百位键处理函数
LJMP EDSCAN ;户号百位无效
DKEY33: CJNE A,#04H,DKEY34
;-----------------------------------------------------------------------设置状态-十位键------------------------
JNB FINISH,KEY331
LJMP EDSCAN
KEY331: LCALL KEYSW ;调十位键处理函数
LJMP EDSCAN
DKEY34: CJNE A,#05H,DKEY35
;-----------------------------------------------------------------------设置状态-个位键--------------------------
JNB FINISH,KEY341 ;个位键
LJMP EDSCAN
KEY341: LCALL KEYGW ;调个位键处理函数
LJMP EDSCAN
DKEY35: CJNE A,#06H,DKEY36
;----------------------------------------------------------------------设置状态-清除键----------------------------
CKEY35:
JNB FINISH,KEY351
LJMP SCAN
KEY351: MOV JIHAOH,#00H
MOV JIHAOL,#01H
SETB DISMOD
LCALL DISJIHAO
LJMP SCAN
DKEY36: CJNE A,#07H,DKEY37
;---------------------------------------------------------------------设置状态-返回键--------------------------
CKEY36:
MOV STATE,#00H
MOV JIHAOH,#00H
MOV JIHAOL,#01H
CLR ES
CLR EA
LCALL CLEAR
LCALL DISTITL
LJMP SCAN
DKEY37: CJNE A,#08H,KEY370
;---------------------------------------------------------------------设置状态-确认键--------------------
LJMP CKEY37
KEY370: LJMP SCAN
CKEY37:
JNB FINISH,KEY372
JNB SUCCESS,REPRN
REPRN: 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,#13H
LCALL CCW_PR ;"设"
MOV O_YL,#00H
MOV O_XL,#10H
MOV CODE,#14H
LCALL CCW_PR ;"置"
LJMP SCAN
KEY372:
LJMP BGPRN
;#######################设置子程序################################
BGPRN:
SETB FINISH
CLR SUCCESS
clr DISMOD
lcall DISJIHAO
MOV A,JIHAOH
JNZ BGPRN1
MOV A,JIHAOL
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 R3,#32H
MOV R4,#03H
LCALL IRT ;调红外发射程序
COMPRN3:SETB SUCCESS
CLR DISMOD
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 ;"置"
MOV O_YL,#00H
MOV O_XL,#20H
MOV CODE,#15H
LCALL CCW_PR ;"完"
MOV O_YL,#00H
MOV O_XL,#30H
MOV CODE,#0FH
LCALL CCW_PR ;"成"
LCALL DISJH
setb DISMOD
LCALL DISJIHAO
CLR DISMOD
LJMP SCAN
FAIL3: CLR DISMOD
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 ;"置"
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
;;;;;;;;;;;查询;;;;;;;;;;;;;;;;;;;;;;;;
BGINQ: ;CLR FLAG
SETB FINISH
CLR SUCCESS
clr DISMOD
lcall DISJIHAO
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
;;;;;;;;;;;抄表;;;;;;;;;;;;;;;;;;;;;;;;
BGNCB: ;CLR FLAG
SETB FINISH
CLR SUCCESS
clr DISMOD
LCALL DISJIHAO ;刷新机号显示(非反白)
MOV A,JIHAOH
JNZ BGNCB1
MOV A,JIHAOL
JNZ BGNCB1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -