⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pos149.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:

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 + -