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

📄 pos149.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:
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
	LJMP LING
	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_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

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

	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


;******************************
;      显示终端机号
;******************************
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
;******************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -