📄 p31n-v1.1.2.asm
字号:
inc r1
inc r1
inc r1
; 比较帐号是否相等
mov r7,#5
bijiao2:
mov a,@r0
mov b,@r1
cjne a,b,nex223
inc r0
inc r1
djnz r7,bijiao2
nex222:
djnz r6,nex333
mov r6,#0ffh
djnz r5,nex333
ljmp mmain
nex333:
ljmp save_wait
nex223:
mov r0,#rf1ram
mov r1,#rf3ram
mov r2,#8
lcall copy_s
ljmp save_d_00
;-------------------------------
; Saver Card Deal
;-------------------------------
testt: ;;
saver_card:
;mov r0,#madr_h
;mov @r0,adr_h
;inc r0
;mov @r0,adr_l ;保存出纳员地址
;
MOV R0,#RF1RAM+3
MOV A,@R0
MOV R0,#ribuf+59
MOV @R0,A ;1
MOV R0,#RF1RAM+4
MOV A,@R0
MOV R0,#ribuf+60
MOV @R0,A ;2
MOV R0,#RF1RAM+5
MOV A,@R0
MOV R0,#ribuf+61
MOV @R0,A ;3
MOV R0,#RF1RAM+6
MOV A,@R0
MOV R0,#ribuf+62
MOV @R0,A ;4
MOV R0,#RF1RAM+7
MOV A,@R0
MOV R0,#ribuf+63;5REDSWORDS
MOV @R0,A ;保存出纳员卡号
;
mov r_err,#2
lcall get_code
mov r0,#ddsp05
mov r1,#ddsp15
lcall call_pos_name
saver_loop:
mov r7,#2
saver_lp4:
mov r2,#100
saver_lp0:
lcall key_in
mov a,v0_key
cjne a,#kb_cl,saver_lp3
ljmp saver_ret
saver_lp3:
djnz r2,saver_lp0
djnz r7,saver_lp3
lcall clrbp
mov r4,#0
saver_lp5:
mov r3,#0
djnz r3,$
djnz r4,saver_lp5
lcall setbp
saver_ret:
setb f_cny
clr f_a_s
lcall key_in
lcall key_in
ljmp mmain
;-------------------------------
; Error Alrm
;-------------------------------
deal_error:
lcall error_code
mov r7,#3
dl_er0:
lcall clrbp
mov r4,#15
lcall d0lay
lcall setbp
mov r2,#8
dl_er2:
lcall disp
djnz r2,dl_er2
mov r4,#0
mov r3,#0
dl_er4:
djnz r3,dl_er4
djnz r4,dl_er4
djnz r7,dl_er0
dl_er5: ;;lcall key_in
;;lcall key_in
mov a,r_err ;在非0号机上进行存款时,在没有靠管理卡时,出现err 012后,该卡就不能
cjne a,#0ch,qiu ;再靠卡了,此处解决了此问题。
ljmp fuwei ;
qiu:
mov a,r_err
cjne a,#0,rett ;判断刚才的告警是不是016告警
mov r7,#100
lp: lcall key_in ;是的话就调用判键子程序
mov a,v_key
cjne a,#kb_en,pl
ljmp fuwei ;是按下的ENTER键就跳
pl: djnz r7,lp
rett: ljmp mmain ;不是的话就直接返回主程序
fuwei: mov r0,#dflag ;write flag
mov a,state
mov c,f_com
mov acc.7,c
MOV A,#3 ;
mov @r0,a
lcall put_date ;write name,date,time
;
;mov r0,#dadr_h ;write address
;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
;
mov r0,#d_exp0 ;将消费额单元送0FFH
mov r3,#3
llp: mov @r0,#0ffh
inc r0
djnz r3,llp
mov r0,#d_sur0
mov r3,#5
lllp: mov @r0,#0ffh
inc r0
djnz r3,lllp ;出纳员卡号
lcall w_sale ;
lcall key_in
lcall key_in
ljmp mmain
;------------------------------
; Illegal Pullout Card
;------------------------------
card_pullout:
mov r_err,#err_8
lcall error_code
mov r2,#3
crd_0: lcall clrbp
mov r4,#15
lcall d0lay
lcall setbp
;lcall card_test
mov r4,#8
jnb rf_chk,crd_5 ;Card On
crd_1: lcall disp
djnz r4,crd_1
;lcall card_test
mov r4,#0
mov r3,#0
jnb rf_chk,crd_5 ;Card On
crd_3: djnz r3,crd_3
djnz r4,crd_3
djnz r2,crd_0
crd_5: setb rf_chk
lcall key_in
lcall key_in
ljmp mmain
;------------------------------
;------------------------------
deal_func_kb:
mov a,v_key
cjne a,#kb_f1,d_f_0 ;查看机号
ljmp key_f1
d_f_0: cjne a,#kb_f2,d_f_1 ;f2 显示消费的累计
ljmp key_f2 ;屏蔽了F2功能键
d_f_1: cjne a,#k_f10,d_f_3
lcall kf10
;---------------------------------------------
lcall send_start
mov a,#ds1307w
lcall send_byte ;发送写命令
mov a,#d_xflsh
lcall send_byte ;成功写入标志地址
mov a,#0
lcall send_byte ;标志清0
clr a
mov r0,#xflsh
mov @r0,a
lcall send_stop
d_f_3: cjne a,#k_f13,d_f_4 ;f1+a+3 显示当前的时间
ljmp tmdisp
d_f_4: cjne a,#k_f14,d_f_5 ;f1+a+4 键盘自测
ljmp key_zj
d_f_5: cjne a,#k_f1p,d_f_7 ;f1+"+"
jb f_com,d_f_6
cpl f_off
ret
;-----------------------
;-----------------------
d_f_6: clr f_off
ret
d_f_7: cjne a,#k_f1m,d_ff7 ;cnj off
ljmp keyf1cl
d_ff7: cjne a,#k_f11,d_f_8
ljmp t_comm
d_f_8: cjne a,#k_f1equ,d_ff8
ljmp keyf1equ
d_ff8: cjne a,#k_f1d,d_f_9
ljmp keyf1d
d_f_9: cjne a,#k_f2p,d_ff9
ljmp keyf2en
d_ff9: cjne a,#k_f2m,d_f_10
ljmp keyf2cl
d_f_10: cjne a,#k_f16,d_f_a
ljmp set_wt
d_f_a: ret
;*******************************
; 计次消费
;*******************************
sale_counter:
mov r0,#ddsp0
mov r1,#ddsp1
mov r2,#3
lcall setnul
mov @r0,lim_cnt
mov @r1,lim_cnt
mov r0,#ddsp04
mov r1,#ddsp14
mov r2,#3
lcall setnul
mov @r0,#0
mov @r1,#0
;
sl_cnt0:
;lcall card_id
;jnb f0,sl_cnt00
ljmp sl_cnt00
ljmp sale_d_0
sl_cnt00:
lcall key_in
mov a,v_key
cjne a,#kb_en,sl_cnt1
mov a,lim_cnt
jnz sl_cnt3
lcall err_in
sjmp sale_counter
sl_cnt1:
cjne a,#kb_cl,sl_cnt0
;ljmp mmain
setb f_0 ;将CLEAR键标志位值1
ljmp sl_cnt9
sl_cnt3: mov r0,#ddsp03
mov r1,#ddsp13
dec @r0
dec @r1
mov r0,#ddsp07
mov r1,#ddsp17
inc @r0
inc @r1
mov r0,#ddsp04
mov r1,#augend0
mov r2,#4
lcall copy_s
mov r7,#6
sl_cnt5: mov regt,#10
sl_cnt6: lcall key_in
mov a,v_key
cjne a,#kb_cl,sl_cnt7
mov r0,#ddsp07
mov r1,#ddsp17
mov @r0,#0
mov @r1,#0
mov r0,#ddsp03
mov r1,#ddsp13
inc @r0
inc @r1
sjmp sl_cnt0
sl_cnt7: djnz regt,sl_cnt6
mov r0,#ddsp04
mov r1,#ddsp14
mov r2,#4
lcall setnul
mov regt,#20
sl_cnt8:
lcall disp
djnz regt,sl_cnt8
mov r0,#augend0
mov r1,#ddsp04
mov r2,#4
lcall copy_s
mov r0,#augend0
mov r1,#ddsp14
mov r2,#4
lcall copy_s
djnz r7,sl_cnt5
sl_cnt9: mov r0,#dflag
mov a,state
mov c,f_com
mov acc.7,c
mov @r0,a
;
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
;
;
mov r0,#d_exp0
mov r3,#3
;
jb f_0,xff ;判断消费额单元要送什么
slcn99: mov @r0,#0 ;此处修改是为不让一张卡同时在两台终端机上靠卡
inc r0
djnz r3,slcn99
ljmp xyg
xff: ;clr f_0 ;恢复标志位
mov @r0,#0ffh ;当按下CLEAR键后就送#0ff到消费3额单元-----
inc r0
djnz r3,xff ;将消费额单元写0
MOV R0,#DFLAG
MOV @R0,#3
xyg: dec lim_cnt
mov @r0,lim_cnt
inc r0
jb f_0,xygg ;如果是CLRARA键就不调用addsum----------
lcall addsum
ljmp xygg1
xygg: clr f_0 ;恢复标志位-----------------------------
xygg1: mov dptr,#sum51
movx a,@dptr
mov @r0,a
mov r0,#d_sur0
mov r3,#5
lllp0: mov @r0,#0ffh
inc r0
djnz r3,lllp0 ;保存出纳员卡号
;
lcall w_sale
;
lcall key_in
lcall key_in
ljmp mmain
;*******************************
;*******************************
sale_menu:
clr f_tj
mov r0,#d_exp2
mov r1,#sur_rm5
lcall bin2dec
mov c,bit_c
mov f_m_p,c
mov f_p_m,c
mov r0,#d_sur2
mov r1,#lim_rm5
lcall bin2dec
MOV R0,#ICARD_SC1 ; credit
MOV R1,#ICARD_adr ;
mov a,@r0 ;test
LCALL BNDEC2 ;
lcall clear_input
menu_loop:
;lcall card_id
;jnb f0,menu_loop0
ljmp menu_loop0
ljmp sale_d_0
menu_loop0:
lcall key_in
mov a,v_key
cjne a,#kb_dot,mu_loop0
mu_loop0: jc menu_wait
cjne a,#kb_f1,mu_loop5
ljmp sale_wait
mu_loop5:
cjne a,#kb_cl,menu_loop
;ljmp mmain
setb f_0 ;将是CLEAR浆的标志为值1
ljmp menu_ret ;如果是CLEAR键的话就跳转
;-----------------------
;-----------------------
menu_wait:
mov r0,#d_exp2
mov r1,#sur_rm5
lcall bin2dec
mov c,bit_c
mov f_m_p,c
mov f_p_m,c
jb f_m_p,menu_err
lcall menu_add
jnc mu_wait0
menu_err:
lcall in_err2
ljmp sale_menu
mu_wait0:
mov r0,#lim_rm0
mov r1,#exp_rm0
mov r2,#6
lcall r0_comp_r1
jnb f0,menu_err
lcall sur_sub_exp
jb bit_c,menu_err
lcall surplus2disp
mov r7,#6
mu_wait5:
lcall expense2disp
mov r0,#ddsp0
mov r1,#ddsp1
mov r2,#8
lcall copy_s
mov regt,#10
mu_wait6: lcall key_in
mov a,v_key
cjne a,#kb_dot,mu_wat66
mu_wat66: jc menu_wait
cjne a,#kb_cl,mu_wat67
ljmp sale_menu
mu_wat67: djnz regt,mu_wait6
mov r0,#ddsp04
mov r1,#ddsp14
mov r2,#4
lcall setnul
mov r2,#10
mov r3,#0
mu_wait68:
djnz r3,$
djnz r2,mu_wait68
djnz r7,mu_wait55
ljmp menu_ret
;; lcall card_test
;; jb rf_chk,menu_ret
mu_wait55:
mov regt,#20
mu_wait8:
lcall disp
djnz regt,mu_wait8
sjmp mu_wait5
menu_ret:
;----------------------
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 @r0,a
;-------------------0
jb f_0,xyg1
mov r0,#exp_rm5
mov r1,#d_exp2
lcall dec2bin
mov r0,#d_exp0
cjne @r0,#0,menu_r6
inc r0
cjne @r0,#0,menu_r6
inc r0
cjne @r0,#0,menu_r6
;sjmp menu_r8
sjmp xyg1
xyg1: mov r0,#dflag
mov @r0,#3
mov r0,#d_exp0 ;如果按下的CLEAR键的话,或者食谱是0的话,就将消费额单元写FF
mov @r0,#0ffh
inc r0
mov @r0,#0ffh
inc r0
mov @r0,#0ffh
menu_r6: 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 @r0,a
;MOV @R0,#3
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,xyg2 ;判断是不是CLRAR键,是的话就不调用ADDSUM
lcall addsum
sjmp xyg2g
xyg2: clr f_0 ;恢复标志位
xyg2g: mov r0,#d_sur0
mov r3,#5
lllp2: mov @r0,#0ffh
inc r0
djnz r3,lllp2 ;出纳员卡号
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -