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

📄 终端机程序.asm

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

	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

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:  ;==========================================================================
;	MOV DPTR,#D_NUM			;开始取终端机号
;	MOVX A,@DPTR
;	CJNE A,R_NME,ER			;判断	NVRAM里的机号和CPU内的机号			;判断机号
;	LJMP RE
;ER:	LJMP ER_ER

;RE:	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
        ;代码:
        SETB  F_M_P                     ;负号标志

        MOV   R0,#SUR_RM0
        MOV   A,@R0
        INC   A
        MOV   B,A
        MOV   A,#10
        CLR   C
        SUBB  A,B
        MOV   @R0,A                     ;

        MOV   R0,#SUR_RM0+1
        MOV   A,@R0
        INC   A
        MOV   B,A
        MOV   A,#10
        CLR   C
        SUBB  A,B
        MOV   @R0,A                     ;

        MOV   R0,#SUR_RM0+2
        MOV   A,@R0
        INC   A
        MOV   B,A
        MOV   A,#10
        CLR   C
        SUBB  A,B
        MOV   @R0,A                     ;

        MOV   R0,#SUR_RM0+3
        MOV   A,@R0
        INC   A
        MOV   B,A
        MOV   A,#10
        CLR   C
        SUBB  A,B
        MOV   @R0,A                     ;

        MOV   R0,#SUR_RM0+4
        MOV   A,@R0
        INC   A
        MOV   B,A
        MOV   A,#10
        CLR   C
        SUBB  A,B
        MOV   @R0,A                     ;

        MOV   R0,#SUR_RM0+5
        MOV   A,@R0
        MOV   B,A
        MOV   A,#10
        CLR   C
        SUBB  A,B
        MOV   @R0,A                     ;


        LJMP     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

	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


;******************************
;       Display Pos Name
;******************************
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
;******************************
keyf16: mov r0,#ddsp0
        mov @r0,#0ch

        inc r0

⌨️ 快捷键说明

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