📄 rc500-1.asm
字号:
CJNE A,#01H,KK_03
SJMP KK_01
KK_03:
MOV NUM2,#10
KK_04:
MOV JSQ_LOCAL_LOOP,#10
CLR FLAG2
JNB FSD,KK_05
LCALL DISYE
SJMP KK_06
KK_05:
LCALL CDISBUF
KK_06:
JNB FLAG2,$
CPL FSD
DJNZ NUM2,KK_04
SJMP KK_RET
KK_ZERO:
SETB FZERO
SETB CERR
KK_RET:
LCALL WXFJE
CLR FSD
KK_RET1:
RET
;-----------------------------------------------
;显示系统信息,包括本次充值输入,本次消费输入,累计消费金额,累计充值金额
DISINF:
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
MOV YE1,LASTCZ1
MOV YE2,LASTCZ2
MOV YE3,LASTCZ3
LCALL DISYE
MOV JSQ_LOCAL_LOOP,#100
CLR FLAG2
JNB FLAG2,$
MOV WDT,#3FH
MOV JSQ_LOCAL_LOOP,#200
CLR FLAG2
JNB FLAG2,$
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
MOV YE1,LASTXF1 ;
MOV YE2,LASTXF2
MOV YE3,LASTXF3
LCALL DISYE
MOV JSQ_LOCAL_LOOP,#100
CLR FLAG2
JNB FLAG2,$
MOV WDT,#3FH
MOV JSQ_LOCAL_LOOP,#200
CLR FLAG2
JNB FLAG2,$
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
MOV YE1,ALLCZ1
MOV YE2,ALLCZ2
MOV YE3,ALLCZ3
LCALL DISYE
MOV JSQ_LOCAL_LOOP,#100
CLR FLAG2
JNB FLAG2,$
MOV WDT,#3FH
MOV JSQ_LOCAL_LOOP,#200
CLR FLAG2
JNB FLAG2,$
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
MOV YE1,ALLXF1 ;消费金额累计
MOV YE2,ALLXF2
MOV YE3,ALLXF3
LCALL DISYE
MOV JSQ_LOCAL_LOOP,#100
CLR FLAG2
JNB FLAG2,$
MOV WDT,#3FH
MOV JSQ_LOCAL_LOOP,#200
CLR FLAG2
JNB FLAG2,$
; JB FENTER,DISINF_00
; LJMP DISINF_RET
DISINF_00:
;------------------------------------
;此处转入设置部分
;1、消费方式设置
MOV R0,#RF_SBUF ;
;判断卡
LCALL PCD_READ
JNB CERR,DISINF_01
LJMP DISINF_RET
DISINF_01:
LCALL CDISBUF
;---------------------------
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
DISINF_02:
MOV WDT,#3FH
MOV DIS_BUF+0,#0BH ;显示现在的消费方式,并接受按键设置
MOV DIS_BUF+1,#0CH
MOV DIS_BUF+2,#01H ;显示S-1
ANL S1XF,#03H
MOV DIS_BUF+5,S1XF
MOV JSQ_LOCAL_LOOP,#200
CLR FLAG2
DISINF_03:
MOV R0,#RF_SBUF
MOV @R0,#1
LCALL PCD_READ ;确认卡是否还在缓冲区
JB CERR,DISINF_04 ;寻卡出错,说明卡不在天线中
JBC FLAG2,DISINF_06 ;时间到,转下一步操代作
SJMP DISINF_03
DISINF_04:
LCALL CHECKCARD
JBC FFC,DISINF_05
JBC FLAG2,DISINF_06
SJMP DISINF_04
DISINF_05:
INC S1XF
SJMP DISINF_02
;2、消费输出设置
DISINF_06:
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
DISINF_07:
MOV WDT,#3FH
MOV DIS_BUF+2,#02H ;显示S-2
ANL S2XS,#03H
MOV DIS_BUF+5,S2XS
MOV JSQ_LOCAL_LOOP,#200
CLR FLAG2
DISINF_08:
MOV R0,#RF_SBUF
MOV @R0,#1
LCALL PCD_READ ;确认卡是否还在缓冲区
JB CERR,DISINF_09 ;寻卡出错,说明卡不在天线中
JBC FLAG2,DISINF_11 ;时间到,转下一步操代作
SJMP DISINF_08
DISINF_09:
LCALL CHECKCARD
JBC FFC,DISINF_10
JBC FLAG2,DISINF_11
SJMP DISINF_09
DISINF_10:
INC S2XS
SJMP DISINF_07
DISINF_11:
;-------------------------------
;3、显示脉冲的相位
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
DISINF_12:
MOV WDT,#3FH
MOV DIS_BUF+2,#03H ;显示S-3
ANL S3MC,#01H
MOV DIS_BUF+5,S3MC
MOV JSQ_LOCAL_LOOP,#200
CLR FLAG2
DISINF_13:
MOV R0,#RF_SBUF
MOV @R0,#1
LCALL PCD_READ ;确认卡是否还在缓冲区
JB CERR,DISINF_14 ;寻卡出错,说明卡不在天线中
JBC FLAG2,DISINF_16 ;时间到,转下一步操代作
SJMP DISINF_13
DISINF_14:
LCALL CHECKCARD
JBC FFC,DISINF_15
JBC FLAG2,DISINF_16
SJMP DISINF_14
DISINF_15:
INC S3MC
SJMP DISINF_12
;---------------------------
;4、充值开关检测方法
DISINF_16:
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
DISINF_17:
MOV WDT,#3FH
MOV DIS_BUF+2,#04H ;显示S-4
ANL S4KG,#01H
MOV DIS_BUF+5,S4KG
MOV JSQ_LOCAL_LOOP,#200
CLR FLAG2
DISINF_18:
MOV R0,#RF_SBUF
MOV @R0,#1
LCALL PCD_READ ;确认卡是否还在缓冲区
JB CERR,DISINF_19 ;寻卡出错,说明卡不在天线中
JBC FLAG2,DISINF_21 ;时间到,转下一步操代作
SJMP DISINF_18
DISINF_19:
LCALL CHECKCARD
JBC FFC,DISINF_20
JBC FLAG2,DISINF_21
SJMP DISINF_19
DISINF_20:
INC S4KG
SJMP DISINF_17
;-------------------------------------
;5消费脉冲输出方式设置
DISINF_21:
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
DISINF_22:
MOV WDT,#3FH
MOV DIS_BUF+2,#05H ;显示S-5
MOV A,S5XM
CLR C
SUBB A,#05H
JC $+4
MOV S5XM,A
MOV DIS_BUF+5,S5XM
MOV JSQ_LOCAL_LOOP,#200
CLR FLAG2
DISINF_23:
MOV R0,#RF_SBUF
MOV @R0,#1
LCALL PCD_READ ;确认卡是否还在缓冲区
JB CERR,DISINF_24 ;寻卡出错,说明卡不在天线中
JBC FLAG2,DISINF_26 ;时间到,转下一步操代作
SJMP DISINF_23
DISINF_24:
LCALL CHECKCARD
JBC FFC,DISINF_25
JBC FLAG2,DISINF_26
SJMP DISINF_24
DISINF_25:
INC S5XM
SJMP DISINF_22
;------------------------------------------
;6、脉冲充值输入设置
DISINF_26:
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
DISINF_27:
MOV WDT,#3FH
MOV DIS_BUF+2,#06H ;显示S-6
MOV A,S6CM
CLR C
SUBB A,#05H
JC $+4
MOV S6CM,A
MOV DIS_BUF+5,S6CM
MOV JSQ_LOCAL_LOOP,#200
CLR FLAG2
DISINF_28:
MOV R0,#RF_SBUF
MOV @R0,#1
LCALL PCD_READ ;确认卡是否还在缓冲区
JB CERR,DISINF_29 ;寻卡出错,说明卡不在天线中
JBC FLAG2,DISINF_31 ;时间到,转下一步操代作
SJMP DISINF_28
DISINF_29:
LCALL CHECKCARD
JBC FFC,DISINF_30
JBC FLAG2,DISINF_31
SJMP DISINF_29
DISINF_30:
INC S6CM
SJMP DISINF_27
DISINF_31:
LCALL WFLAG
LCALL RFLAG
MOV A,S3MC
MOV C,ACC.0
MOV SFSC,C
DISINF_RET:
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
LCALL CDISBUF ;清零显示缓冲区
MOV DIS_BUF+5,#0
LCALL PCD_HALT
RET
;----------------------------------------
;显示小区密码,大区密码,各显示3S
DISMM:
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
LCALL CDISBUF
MOV R0,#PASS_BUF
MOV R1,#DIS_BUF+2
MOV R2,#4
LCALL MEM_COPYA
MOV JSQ_LOCAL_LOOP,#100
JNB FLAG2,$
CLR FLAG2
MOV WDT,#3FH
MOV JSQ_LOCAL_LOOP,#200
JNB FLAG2,$
CLR FLAG2
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
LCALL CDISBUF
MOV R0,#PASS_BUF+4
MOV R1,#DIS_BUF+2
MOV R2,#4
LCALL MEM_COPYA
MOV JSQ_LOCAL_LOOP,#100
JNB FLAG2,$
CLR FLAG2
MOV WDT,#3FH
MOV JSQ_LOCAL_LOOP,#200
JNB FLAG2,$
CLR FLAG2
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
LCALL CDISBUF ;清零显示缓冲区
MOV DIS_BUF+5,#0
RET
;--------------------------------------------------
;对进入系统的卡进行校验看是否为查询卡,如果为查询卡则返回确的信息
;返回值FFC=0失败,FFC=1成功
CHECKCARD:
LCALL FINDCARD
JNB FFC,CHECKCARD_RET ;若没有卡退出
CLR FFC ;清标志 位
MOV R0,#RF_SBUF
MOV @R0,#1
LCALL PCD_READ
JB CERR,CHECKCARD_RET ;出错退出
MOV R0,#RF_SBUF
MOV A,@R0
SWAP A
INC R0
ORL A,@R0
CJNE A,#11H,CHECKCARD_01
LCALL PASSWORD
JNB FPASS,CHECKCARD_RET
SETB FFC ;通过验证
SJMP CHECKCARD_RET
CHECKCARD_01:
CJNE A,#21H,CHECKCARD_RET
SETB FFC ;通过验证
CHECKCARD_RET:
RET
;--------------------------------------------------
;更改卡第一扁区的密码
CARDKEY:
SETB CERR
JNB RC500_OK,CARDKEY ;
MOV R0,#RF_SBUF
MOV @R0,#26H
LCALL PCD_REQUEST ;寻卡
JNB CERR,CARDKEY_01
MOV R0,#RF_SBUF
MOV @R0,#26H
LCALL PCD_REQUEST ;寻卡
JB CERR,CARDKEY_RET
CARDKEY_01:
LCALL PCD_ANTICOLLISION ;防冲撞
JB CERR,CARDKEY_RET
MOV R0,#RF_SBUF
MOV R1,#RFCSN
MOV R2,#4
LCALL MEM_COPYA ;保存CSN
LCALL PCD_SELECT ;锁定卡
JB CERR,CARDKEY_RET
MOV R0,#KEY_BUF
MOV R7,#6
CARDKEY_02:
MOV @R0,#0FFH
INC R0
DJNZ R7,CARDKEY_02
MOV R0,#KEY_BUF
LCALL CHANGE_KEY ;转换密钥
LCALL PCD_KEY ;传送密钥
JB CERR,CARDKEY_RET
CARDKEY_03:
MOV R0,#RF_SBUF
MOV @R0,#60H ;取验证方式 A
INC R0
MOV @R0,#1 ;验证第一个扇区密钥
MOV R0,#CARD_NO
MOV R1,#RF_SBUF+2
MOV R2,#4
LCALL MEM_COPYA
CARDKEY_04:
LCALL PCD_AUTHENTICATION
JB CERR,CARDKEY_RET ;如果验证通不过则转到开始验证下一个扇区
MOV R1,#RF_SBUF
MOV @R1,#3
INC R1
MOV R0,#BLOCK+2
MOV R7,#6
CARDKEY_05:
MOV A,@R0
ANL A,#0FH
SWAP A
MOV B,A
INC R0
MOV A,@R0
ANL A,#0FH
ORL A,B
MOV @R1,A
INC R0
INC R1
DJNZ R7,CARDKEY_05
MOV @R1,#0FFH
INC R1
MOV @R1,#07H
INC R1
MOV @R1,#80H
INC R1
MOV @R1,#69H
LCALL PCD_WRITE
JB CERR,CARDKEY_RET
LCALL PCD_HALT
SETB FCARDKEY
CARDKEY_RET:
RET
;-----------------------------------------------------------
;恢复第一扇区密码
KEYCARD:
SETB CERR
JNB RC500_OK,KEYCARD ;500出错,死循环
MOV R0,#RF_SBUF
MOV @R0,#26H
LCALL PCD_REQUEST ;寻卡
JNB CERR,KEYCARD_01
MOV R0,#RF_SBUF
MOV @R0,#26H
LCALL PCD_REQUEST ;寻卡
JB CERR,KEYCARD_RET
KEYCARD_01:
LCALL PCD_ANTICOLLISION ;防冲撞
JB CERR,KEYCARD_RET
MOV R0,#RF_SBUF
MOV R1,#RFCSN
MOV R2,#4
LCALL MEM_COPYA ;保存CSN
LCALL PCD_SELECT ;锁定卡
JB CERR,KEYCARD_RET
MOV R0,#KEY_BUF
MOV R1,#BLOCK+2
MOV R7,#6
KEYCARD_02:
MOV A,@R1
ANL A,#0FH
SWAP A
MOV B,A
INC R1
MOV A,@R1
ANL A,#0FH
ORL A,B
MOV @R0,A
INC R0
INC R1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -