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

📄 p31n-v1.1.2.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        inc r1
        inc r1
        inc r1
 ;   比较帐号是否相等
        mov r7,#5
bijiao2:
        mov a,@r0
        mov b,@r1
        cjne a,b,nex223
        inc r0
        inc r1
        djnz r7,bijiao2

nex222:
        djnz r6,nex333
        mov r6,#0ffh
        djnz r5,nex333
        ljmp mmain
nex333:
        ljmp save_wait
nex223:
        mov r0,#rf1ram
        mov r1,#rf3ram
        mov r2,#8
        lcall copy_s
        ljmp save_d_00

;-------------------------------
;       Saver Card Deal
;-------------------------------
testt:  ;;
saver_card:
	;mov r0,#madr_h
	;mov @r0,adr_h
	;inc r0
	;mov @r0,adr_l          ;保存出纳员地址
	;
 MOV R0,#RF1RAM+3
        MOV A,@R0
        MOV R0,#ribuf+59
        MOV @R0,A       ;1

        MOV R0,#RF1RAM+4
        MOV A,@R0
        MOV R0,#ribuf+60
        MOV @R0,A       ;2

        MOV R0,#RF1RAM+5
        MOV A,@R0
        MOV R0,#ribuf+61
        MOV @R0,A       ;3

        MOV R0,#RF1RAM+6
        MOV A,@R0
        MOV R0,#ribuf+62
        MOV @R0,A       ;4

        MOV R0,#RF1RAM+7
        MOV A,@R0
        MOV R0,#ribuf+63;5REDSWORDS
        MOV @R0,A                  ;保存出纳员卡号
        ;
	mov r_err,#2
	lcall get_code

	mov r0,#ddsp05
	mov r1,#ddsp15

	lcall call_pos_name

saver_loop:
	mov r7,#2

saver_lp4:
        mov r2,#100

saver_lp0:
        lcall  key_in
        mov    a,v0_key
        cjne   a,#kb_cl,saver_lp3
        ljmp   saver_ret

saver_lp3:
        djnz r2,saver_lp0
        djnz r7,saver_lp3

        lcall  clrbp
	mov r4,#0

saver_lp5:
	mov r3,#0
        djnz r3,$
        djnz r4,saver_lp5
        lcall  setbp

saver_ret:
	setb f_cny
	clr f_a_s

	lcall key_in
	lcall key_in

	ljmp mmain


;-------------------------------
;      Error  Alrm
;-------------------------------
deal_error:
	lcall error_code
    mov   r7,#3

dl_er0:
    lcall clrbp

	mov r4,#15
	lcall d0lay

	lcall setbp

    mov r2,#8

dl_er2:
    lcall disp

	djnz r2,dl_er2

	mov r4,#0
	mov r3,#0


dl_er4:
    djnz r3,dl_er4

	djnz r4,dl_er4

    djnz r7,dl_er0


dl_er5: ;;lcall key_in
	;;lcall key_in
	mov a,r_err	;在非0号机上进行存款时,在没有靠管理卡时,出现err 012后,该卡就不能
	cjne a,#0ch,qiu	;再靠卡了,此处解决了此问题。
	ljmp fuwei	;

qiu:
        mov a,r_err
	cjne a,#0,rett	;判断刚才的告警是不是016告警

	mov r7,#100
lp:	lcall key_in		;是的话就调用判键子程序
	mov a,v_key
	cjne a,#kb_en,pl
	ljmp fuwei		;是按下的ENTER键就跳

pl:	djnz r7,lp
rett:	ljmp mmain		;不是的话就直接返回主程序


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,#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
        ;
	mov r0,#d_exp0		;将消费额单元送0FFH
	mov r3,#3
llp:	mov @r0,#0ffh
	inc r0
	djnz r3,llp

        mov r0,#d_sur0
        mov r3,#5
lllp:   mov @r0,#0ffh
        inc r0
        djnz r3,lllp            ;出纳员卡号

	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_f10,d_f_3
        lcall kf10

 ;---------------------------------------------
        lcall send_start

 	mov a,#ds1307w
 	lcall send_byte			;发送写命令

        mov a,#d_xflsh
 	lcall send_byte                 ;成功写入标志地址
        mov a,#0
        lcall send_byte                 ;标志清0
        clr a
        mov r0,#xflsh
        mov @r0,a

        lcall send_stop


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 set_wt

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,#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
        ;
	;
	mov r0,#d_exp0
	mov r3,#3
	;
	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,#sum51
	movx a,@dptr

	mov @r0,a

        mov r0,#d_sur0
        mov r3,#5
lllp0:  mov @r0,#0ffh
        inc r0
        djnz r3,lllp0            ;保存出纳员卡号
	;

	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_err2

	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
        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,xyg2		;判断是不是CLRAR键,是的话就不调用ADDSUM
	lcall addsum

	sjmp xyg2g

xyg2: 	clr f_0			;恢复标志位

xyg2g:  mov r0,#d_sur0
        mov r3,#5
lllp2:   mov @r0,#0ffh
        inc r0
        djnz r3,lllp2            ;出纳员卡号

⌨️ 快捷键说明

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