📄 终端机程序.asm
字号:
lcall expense2disp
sjmp equ_nokey
equ_sub: lcall exp_sub_aug
jb bit_c,keyb_err
lcall expense2disp
sjmp equ_nokey
kb_keycl: cjne a,#kb_cl,kb_ret
lcall clr_bit
lcall clr_expense
lcall clr_augend
mov r0,#ddsp04
mov r1,#ddsp04
mov r2,#3
lcall setnul
mov @r0,#0
mov @r1,#0
mov c,f_cny
cpl c
mov f_a_s,c
kb_ret:
ret
;******************************
; Keyok deal
;******************************
key_ok: jb f_equ,ok_key
jb f_add,ke_o1
jb f_sub,ke_o2
lcall disp2expense
sjmp ok_key
ke_o1: lcall exp_add_aug
jnc ok_key
ljmp in_err
ke_o2: lcall exp_sub_aug
jnb bit_c,ok_key
ljmp in_err
ok_key: mov r0,#sur_rm0
mov r1,#augend0
mov r2,#6
lcall copy_s
LING: JNB F_A_S,LING0
JNB F_M_P,LING2
LJMP IN_ERR
LING0: LJMP K_KOK
LING2: LJMP LING1
;AAA: ljmp k_kok
;ke_o3: ;==========================================================================
; MOV DPTR,#D_NUM ;开始取终端机号
; MOVX A,@DPTR
; CJNE A,R_NME,ER ;判断 NVRAM里的机号和CPU内的机号 ;判断机号
; LJMP RE
;ER: LJMP ER_ER
;RE: jnb f_sign,bb;sub_sub ;信用额为正,卡中金额减消费额
; jnb f_m_p,comp_comp ;信用额为负,卡中金额位正,判断执行
; mov r0,#sur_rm5 ;信用额为负,卡中金额位负,作加法
; mov r1,#exp_rm5
; mov r2,#6
; clr c
; lcall do_add
;sur_comp_xyu:
; mov r0,#sur_rm0
; mov r1,#icard_sc2
; mov r2,#4
; lcall r0_comp_r1
; jb f0,ke_o5 ;消费过的卡中金额大于信用额,消费失败
; ljmp ke_o6
;bb: ljmp sub_sub
;comp_comp:;比较卡中剩余额和消费额的大小
; mov r0,#sur_rm0
; mov r1,#exp_rm0
; mov r2,#6
; lcall r0_comp_r1
; jb f0,sub_sub ;信用额为负,卡中剩余额大于消费额,
;直接将卡中额减消费额
;===============================;
;|剩余额|<消费额
; jb f_m_p,add_add
; mov r0,#exp_rm0 ;|剩余额|<消费额,剩余额为 正
; mov r1,#sw0
; mov r2,#6
;ggo:
; mov a,@r0
; mov @r1,a
; inc r1
; inc r0
; djnz r2,ggo
; setb f_m_p
; lcall exp_sub_sur
; mov r2,#6
; mov r0,#exp_rm0
; mov r1,#sur_rm0
;llo: mov a,@r0
; mov @r1,a
; inc r1
; inc r0
; djnz r2,llo
;ggo1: mov r2,#6
; mov r0,#sw0
; mov r1,#exp_rm0
;lloo: mov a,@r0
; mov @r1,a
; inc r1
; inc r0
; djnz r2,lloo
; ;==============将剩余额和消费信用额比较
; mov r0,#sur_rm0
; mov r1,#icard_sc2
; mov r2,#4
; lcall r0_comp_r1
; jb f0,fail
; ljmp ke_o6
;fail: clr f_m_p
; ljmp ke_o5
; ;======================================
;add_add:
; lcall sur_add_exp
; ljmp sur_comp_xyu
;sub_sub:;=======================================================================
; jb f_m_p,sub_sub1 ;cc
LING1:
lcall sur_sub_exp ;卡中金额减消费额
jnb bit_c,ke_o6
;代码:
SETB F_M_P ;负号标志
MOV R0,#SUR_RM0
MOV A,@R0
INC A
MOV B,A
MOV A,#10
CLR C
SUBB A,B
MOV @R0,A ;
MOV R0,#SUR_RM0+1
MOV A,@R0
INC A
MOV B,A
MOV A,#10
CLR C
SUBB A,B
MOV @R0,A ;
MOV R0,#SUR_RM0+2
MOV A,@R0
INC A
MOV B,A
MOV A,#10
CLR C
SUBB A,B
MOV @R0,A ;
MOV R0,#SUR_RM0+3
MOV A,@R0
INC A
MOV B,A
MOV A,#10
CLR C
SUBB A,B
MOV @R0,A ;
MOV R0,#SUR_RM0+4
MOV A,@R0
INC A
MOV B,A
MOV A,#10
CLR C
SUBB A,B
MOV @R0,A ;
MOV R0,#SUR_RM0+5
MOV A,@R0
MOV B,A
MOV A,#10
CLR C
SUBB A,B
MOV @R0,A ;
LJMP KE_O6
;ljmp ke_o5
;sub_sub1: ;将剩余额加消费额
; lcall sur_add_exp ;
; ljmp sur_comp_xyu
ke_o5: ;错误处理
mov r0,#augend0
mov r1,#sur_rm0
mov r2,#6
lcall copy_s
ljmp in_err
;=====================================
;
;=====================================
ke_o6: ;jb f_cny,kk_ok
;mov r0,#lim_rm0
;mov r1,#exp_rm0
;mov r2,#6
;lcall r0_comp_r1
;jnb f0,ke_o5
sjmp kk_ok
k_kok: lcall sur_add_exp
jc ke_o5
kk_ok: lcall surplus2disp
;
mov r0,#ddsp0
mov r1,#ddsp1
mov r2,#4
lcall copy_s
;jnb f_rat,keyokrat
;ljmp keyok1
keyokrat:
mov r7,#3
;mov r6,#13 ;---------新增加的自扣
;
keyok1: lcall expense2disp
mov r0,#ddsp04
mov r1,#ddsp14
mov r2,#4
lcall copy_s
mov regt,#10
keyok2: lcall key_in
mov a,v_key
cjne a,#kb_cl,keyok33
mov r0,#augend0
mov r1,#sur_rm0
mov r2,#6
lcall copy_s
lcall clear_input
mov c,f_p_m
mov f_m_p,c
;; jb f_rat,keyok5
mov c,f_cny
cpl c
mov f_a_s,c
clr f0
ret
keyok33:cjne a,#kb_en,keyok3
sjmp keyok7
keyok3: djnz regt,keyok2
mov r0,#ddsp04
mov r1,#ddsp14
mov r2,#4
lcall setnul
mov regt,#20
keyok4: lcall disp
djnz regt,keyok4
jnb f_rat,keyok44
;sjmp keyok1
djnz r7,keyok1
sjmp keyok7 ;--------------自扣
keyok44:
djnz r7,keyok1
;;sjmp keyok1
sjmp keyok7
keyok7: jb f_0,xig5 ;说明按下的CLEAR键
mov r0,#exp_rm5
mov r1,#d_exp2
lcall dec2bin
mov r0,#d_exp0
cjne @r0,#0,keyok6
inc r0
cjne @r0,#0,keyok6
inc r0
cjne @r0,#0,keyok6
;sjmp keyok8
sjmp xig5
xig5: mov r0,#d_exp0
mov @r0,#0ffh
inc r0
mov @r0,#0ffh
inc r0
mov @r0,#0ffh
MOV R0,#SUR_RM5
MOV R1,#D_SUR2
LCALL DEC2BIN
MOV C,F_M_P
MOV ACC.7,C
MOV @R1,A
MOV R0,#DFLAG
MOV @R0,#3
LJMP BAI
keyok6: mov r0,#sur_rm5
mov r1,#d_sur2
lcall dec2bin
mov c,f_m_p
mov acc.7,c
mov @r1,a
mov r0,#dflag
mov a,state
anl a,#0fh
mov c,f_com
mov acc.7,c
mov c,f_a_s ;1--Sale
anl c,f_cny ;2--deposit
mov acc.4,c ;18--Fetch Money
mov @r0,a
BAI: lcall put_date
mov r0,#dadr_h
mov @r0,adr_h
inc r0
mov @r0,adr_l
jb f_0,xigg4 ;按下的如果是CLEAR键的话就将该标志位写1
lcall addsum
ljmp xigg4
;xig4: clr f_0 ;恢复标志位
xigg4: lcall w_sale
keyok8: clr f_tj
lcall key_in
lcall key_in
setb f0
clr f_n
jb f_0,down ;------------------
ljmp own
down: clr f_0
ljmp mmain
own: ret
;******************************
; Display Pos Name
;******************************
key_f1: lcall get_pos_name
kkf10: mov r7,#80
kkf13: lcall key_in
mov a,v_key
cjne a,#k_f1a,kkf14
mov v0_key,#0ffh
ret
kkf14: cjne a,#k_f1p,kkf15
mov v0_key,#0ffh
ret
kkf15: cjne a,#k_f1m,kkf16
mov v0_key,#0ffh
ret
kkf16: cjne a,#k_f2p,kkf17
mov v0_key,#0ffh
ret
kkf17: cjne a,#k_f2m,kkf18
mov v0_key,#0ffh
ret
kkf18: cjne a,#kb_cl,kkf19
ret
kkf19: djnz r7,kkf13
ret
;*************************************
; Display Sale/Deposit/Fetch Sum
;*************************************
key_f2: lcall sum_ds
jnb bit_c,kkf20
ret
kkf20: mov r7,#100
k_f20: lcall key_in
mov a,v_key
cjne a,#kb_cl,k_f21
ret
k_f21: cjne a,#kb_f2,k_f22
sjmp kkf30
k_f22: djnz r7,k_f20
ret
;;;;;;
kkf30: mov r0,#ddsp0
mov r2,#4
mov a,#null
kkf32: mov @r0,a
inc r0
djnz r2,kkf32
mov dptr,#sum6
mov r2,#2
kkf34: movx a,@dptr
mov b,a
swap a
anl a,#0fh
jnz kkf35
mov a,#null
kkf35: mov @r0,a
inc r0
mov a,b
anl a,#0fh
jnz kkf37
mov a,#null
kkf37: mov @r0,a
inc r0
inc dptr
djnz r2,kkf34
dec r0
cjne @r0,#null,kkf39
mov @r0,#0
kkf39: mov r0,#ddsp0
mov r1,#ddsp1
mov r2,#8
lcall copy_s
mov r7,#100
k_f30: lcall key_in
mov a,v_key
cjne a,#kb_cl,k_f31
ret
k_f31: cjne a,#kb_f2,k_f32
ljmp key_f2
k_f32: djnz r7,k_f30
ret
;*************************************
;Display Sale/Deposit/Fetch Record
;"KEY+F1+="==>Enter;"+"==>Preious;"-"==>Next
; "."==>No.;CardAdress;Time;RecordAddress
;*************************************
keyf1equ: mov a,s_succ
jz kkf41
ret
kkf41: mov adr_l,end_l
mov a,end_h
mov adr_h,a
jnz kkf42
mov a,end_l
jnz kkf42
mov adr_l,#mx_sl
mov adr_h,#mx_sh
kkf42: clr c
mov a,adr_l
subb a,#1
mov adr_l,a
mov a,adr_h
subb a,#0
mov adr_h,a
mov reg2,#0
mov reg3,#1
kkf45: lcall get_sale
mov r0,#reg3
mov r1,#ddsp03
lcall bndec2
mov reg4,#0
mov r0,#d_exp2
mov r1,#exp_rm5
lcall bin2dec
mov r0,#ddsp03
mov a,@r0
orl a,#80h
mov @r0,a
lcall expense2disp
mov r0,#ddsp0
mov r1,#ddsp1
mov r2,#8
lcall copy_s
k_f40: lcall key_in
mov a,v_key
cjne a,#kb_cl,k_f43
ret
k_f43: cjne a,#kb_p,k_f45
mov a,adr_l
add a,#1
mov r3,a
clr a
addc a,adr_h
mov r2,a
cjne a,#mx_sh,kf431
mov a,r3
cjne a,#mx_sl,kf431
kf431: jc kf433
mov r3,#0
mov r2,#0
kf433: mov a,r2
cjne a,end_h,kf435
mov a,r3
cjne a,end_l,kf435
sjmp k_f40
kf435: mov adr_h,r2
mov adr_l,r3
clr c
mov a,reg3
subb a,#1
mov reg3,a
mov a,reg2
subb a,#0
mov reg2,a
ljmp kkf45
k_f45: cjne a,#kb_m,k_f47
mov r3,adr_l
mov a,adr_h
mov r2,a
jnz kf451
mov a,r3
jnz kf451
mov r2,#mx_sh
mov r3,#mx_sl
kf451: clr c
mov a,r3
subb a,#1
mov r3,a
mov a,r2
subb a,#0
mov r2,a
cjne a,end_h,kf453
mov a,r3
cjne a,end_l,kf453
ljmp k_f40
kf453: mov adr_h,r2
mov adr_l,r3
mov a,reg3
add a,#1
mov reg3,a
mov a,reg2
addc a,#0
mov reg2,a
ljmp kkf45
k_f47: cjne a,#kb_dot,k_f49
inc reg4
anl reg4,#3
mov a,reg4
cjne a,#0,kf471
mov r0,#reg3
sjmp kf477
kf471: cjne a,#1,kf473
mov r0,#dadr_l
sjmp kf477
kf473: cjne a,#2,kf475
mov r0,#d_hor
mov r1,#ddsp0
mov a,@r0
mov b,#10
div ab
mov @r1,a
inc r1
mov @r1,b
inc r1
inc r0
mov a,@r0
mov b,#10
div ab
mov @r1,a
inc r1
mov @r1,b
sjmp kf479
kf475: mov r0,#adr_l
kf477: mov r1,#ddsp03
lcall bndec2
kf479: mov a,#ddsp03
clr c
subb a,reg4
mov r0,a
mov a,@r0
orl a,#80h
mov @r0,a
mov r0,#ddsp0
mov r1,#ddsp1
mov r2,#4
lcall copy_s
k_f49: ljmp k_f40
;******************************
get_sale:
mov r2,adr_h
mov r3,adr_l
mov dptr,#d_sal
mov r1,#1
mov reclen,#s_recl
lcall g_addr
;
mov r0,#dflag
mov r3,#s_recl
getsl52:movx a,@dptr
mov @r0,a
lcall indptr
inc r0
djnz r3,getsl52
;
ret
;*************************************
;Display End_h,End_l && beg_h,Beg_l
;*************************************
keyf1d: mov r0,#beg_l
mov r1,#ddsp03
lcall bndec2
mov r0,#end_l
mov r1,#ddsp07
lcall bndec2
mov r0,#ddsp0
mov r1,#ddsp1
mov r2,#8
lcall copy_s
mov r7,#80
kfd13: lcall key_in
mov a,v_key
cjne a,#kb_cl,kfd15
ret
kfd15: djnz r7,kfd13
ret
;******************************
; Show Card's Address
;******************************
keyf16: mov r0,#ddsp0
mov @r0,#0ch
inc r0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -