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

📄 p31n-v1.1.2.asm

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

        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


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

 ;=====================================
 ;
 ;=====================================

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

        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,xigg4		;按下的如果是CLEAR键的话就将该标志位写1

	lcall addsum
	ljmp xigg4

;xig4:	clr f_0			;恢复标志位

        ;

xigg4:
        mov a,state
        cjne a,#02h,gip
        ljmp gip2

gip0:   cjne a,#02h,gip

        ;---------------------
gip2:   mov r0,#d_sur0
        mov r1,#ribuf+59
        mov r3,#5
gipl:   mov a,@r1
        mov @r0,a
        inc r1
        inc r0
        djnz r3,gipl    ;保存出纳员卡号
        ;----------------------
        ljmp gip1
gip:
        mov r0,#d_sur0
        mov r3,#5
lllp3:  mov @r0,#00h
        inc r0
        djnz r3,lllp3            ;出纳员卡号
gip1:
        lcall w_sale

keyok8:  clr f_tj

	lcall key_in
	lcall key_in

	setb f0
        clr  f_n

        jb f_0,down		;------------------

⌨️ 快捷键说明

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