📄 pos149.asm
字号:
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,#d_exp0 ;write #0ff to expens addr and surplus addr
mov r3,#6
llp: mov @r0,#0ffh
inc r0
djnz r3,llp
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_f15,d_f_3
;ljmp upt_zh ;flash 模式下没有下载数据了。
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 keyf16
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,#d_exp0
mov r3,#5
;
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,#sum5
movx a,@dptr
mov @r0,a
;
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_err
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
jb f_0,xyg2 ;判断是不是CLRAR键,是的话就不调用ADDSUM
lcall addsum
sjmp xyg2g
xyg2: clr f_0 ;恢复标志位
xyg2g: 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -