📄 p31n-v1.1.2.asm
字号:
lcall w_sale
menu_r8: clr f_tj
lcall key_in
lcall key_in
ljmp mmain
;*******************************
; 根据键号查找对应的数据
;*******************************
menu_add:
mov a,v_key
rl a
mov b,#d_menu1
add a,b
push acc
;---------
clr lastread
mov bytecount,#2 ;the numbers of want to read
clr ea ;
lcall send_start ;send the command of start
mov a,#ds1307w
lcall send_byte ;send the command of write
pop acc
lcall send_byte ;send the address
lcall send_stop ;send the command of stop
nop
nop
lcall send_start ;send the command of start
mov a,#ds1307r
lcall send_byte ;send the command of read
lcall read_byte ;read a byte from nvram
mov r1,#augend0
mov @r1,a
setb lastread
lcall read_byte
mov r1,#augend4
mov @r1,a
lcall send_stop
setb ea
mov r1,#augend0
mov a,@r1
inc r1
mov b,#100
div ab
mov @r1,a ;augend1
inc r1
mov a,b
mov b,#10
div ab
mov @r1,a ;augend2
inc r1
mov @r1,b ;augend3
mov r0,#augend0
mov @r0,#0
;----
inc r1
mov a,@r1
mov b,#10
div ab
mov @r1,a ;augend4
inc r1
mov @r1,b ;augend5
;
mov r0,#exp_rm0
mov a,@r0
inc r0
mov a,@r0
inc r0
mov a,@r0
inc r0
mov a,@r0
inc r0
mov a,@r0
inc r0
mov a,@r0
inc r0
;
mov r0,#exp_rm5
mov r2,#6
clr c
lcall do_add
;
mov r0,#exp_rm0
mov a,@r0
inc r0
mov a,@r0
inc r0
mov a,@r0
inc r0
mov a,@r0
inc r0
mov a,@r0
inc r0
mov a,@r0
inc r0
;
ret
;*******************************
;*******************************
; Sale && Save Keybord Deal
; KeyVale: 0-9,+,-,=,a,b,cl
;===============================
kb_deal: mov a,v_key
cjne a,#0,k_no0 ;Is 0
jb f_n,k_0t9
mov r0,#ddsp07
cjne @r0,#0,k_0t9
dec r0
cjne @r0,#null,k_0t9
ret
k_no0: cjne a,#10,k_no1 ;Is 1-9
k_no1: jnc kb_keya ;>9
k_0t9: mov b,a
jnb f_equ,key_n1
clr f_equ
lcall clr_expense
key_n0: mov r1,#ddsp04
mov r0,#ddsp04
mov r2,#3
lcall setnul
mov @r1,b
mov r0,#ddsp04
mov r1,#ddsp14
mov r2,#4
lcall copy_s
setb f_n
ret
key_n1: jnb f_n,key_n0
mov r1,#ddsp04
cjne @r1,#null,key_nr
jnb f_dot,key_n2
inc r1
mov a,@r1
jb acc.7,key_nr
lcall ddsmov
mov @r1,b
mov r0,#ddsp04
mov r1,#ddsp14
mov r2,#4
lcall copy_s
ret
key_n2: inc r1
cjne @r1,#null,key_nr
lcall ddsmov
mov @r1,b
mov r0,#ddsp04
mov r1,#ddsp14
mov r2,#4
lcall copy_s
key_nr: ret
;--------------------------------
;--------------------------------
kb_keya: cjne a,#kb_a,kb_keyb
jnb f_cny,key_ab
jnb f_n,key_ab
clr f_a_s
mov r0,#ddsp04
mov @r0,#null
key_ab: ret
kb_keyb: cjne a,#kb_b,kb_keyd
jnb f_cny,key_ab
jnb f_n,key_ab
setb f_a_s
mov r0,#ddsp04
mov @r0,#18
ret
;
kb_keyd: cjne a,#kb_dot,kb_keyp
jb f_cny,kb_dot1 ;Save/Fetch Must Be Only Integer
jb f_dot,kb_dot1
mov r0,#ddsp07
mov a,@r0
orl a,#80h
mov @r0,a
setb f_n
setb f_dot
kb_dot1: ret
kb_keyp: cjne a,#kb_p,kb_keym
jb f_cny,kb_dot1
jnb f_n,p_nokey
jb f_add,kb_p_add
jb f_sub,kb_p_sub
lcall disp2expense
p_nokey: clr f_dot
clr f_n
clr f_sub
clr f_equ
setb f_add
ret
kb_p_add: lcall exp_add_aug
jc keyb_err
lcall expense2disp
sjmp p_nokey
kb_p_sub: lcall exp_sub_aug
jb bit_c,keyb_err
lcall expense2disp
sjmp p_nokey
keyb_err: lcall err_in
lcall clear_input
ret
kb_keym: cjne a,#kb_m,kb_keyequ
jb f_cny,kb_dot1
jnb f_n,m_nokey
jb f_add,kb_m_add
jb f_sub,kb_m_sub
lcall disp2expense
m_nokey: clr f_n
clr f_dot
clr f_add
clr f_equ
setb f_sub
ret
kb_m_add: lcall exp_add_aug
jc keyb_err
lcall expense2disp
sjmp m_nokey
kb_m_sub: lcall exp_sub_aug
jb bit_c,keyb_err
lcall expense2disp
sjmp m_nokey
kb_keyequ: cjne a,#kb_equ,kb_keycl ;'='
jb f_cny,kb_ret
jnb f_n,equ_nokey
jb f_add,equ_add
jb f_sub,equ_sub
lcall disp2expense
equ_nokey: clr f_n
clr f_dot
clr f_add
clr f_sub
setb f_equ
ret
equ_add: lcall exp_add_aug
jc keyb_err
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
;
MOV A,R_NME
JZ LING ;
jnb f_a_s,AAA
ljmp ke_o3 ;jnb f_m_p,ke_o3
ljmp in_err
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: ;==========================================================================
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
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_err2
;=====================================
;
;=====================================
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
ljmp keyok7
keyok3: djnz regt,keyok2
mov r0,#ddsp04
mov r1,#ddsp14
mov r2,#4
lcall setnul
;;lcall card_test
;;jb rf_chk,keyok7
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
MOV R0,#RF1RAM+3
MOV A,@R0
MOV R0,#DADR_H
MOV @R0,A ;1
MOV R0,#RF1RAM+4
MOV A,@R0
MOV R0,#DADR_H+1
MOV @R0,A ;2
MOV R0,#RF1RAM+5
MOV A,@R0
MOV R0,#DADR_H+2
MOV @R0,A ;3
MOV R0,#RF1RAM+6
MOV A,@R0
MOV R0,#DADR_H+3
MOV @R0,A ;4
MOV R0,#RF1RAM+7
MOV A,@R0
MOV R0,#DADR_H+4;5REDSWORDS
MOV @R0,A
;
jb f_0,xigg4 ;按下的如果是CLEAR键的话就将该标志位写1
lcall addsum
ljmp xigg4
;xig4: clr f_0 ;恢复标志位
;
xigg4:
mov a,state
cjne a,#02h,gip
ljmp gip2
gip0: cjne a,#02h,gip
;---------------------
gip2: mov r0,#d_sur0
mov r1,#ribuf+59
mov r3,#5
gipl: mov a,@r1
mov @r0,a
inc r1
inc r0
djnz r3,gipl ;保存出纳员卡号
;----------------------
ljmp gip1
gip:
mov r0,#d_sur0
mov r3,#5
lllp3: mov @r0,#00h
inc r0
djnz r3,lllp3 ;出纳员卡号
gip1:
lcall w_sale
keyok8: clr f_tj
lcall key_in
lcall key_in
setb f0
clr f_n
jb f_0,down ;------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -