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

📄 cap1p3.asm

📁 用AD7799做的电子汽车衡称重显示控制仪表程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		mov			r0,#1ch
		mov			r2,#2
		mov			addr_h,#00h
		mov			addr_l,#57h
		lcall		write_block			;保存该打印记录的存贮指针位置
		
		lcall		add_addr20			;地址递加20
		
		push		08h
		push		09h
		mov			08h,dph
		mov			09h,dpl
		mov			r0,#08h
		mov			r2,#2
		mov			addr_h,#06h
		mov			addr_l,#55h
		lcall		write_block			;称重记录指针下移一步(空记录处)
		
		lcall		CZJL_cn_0			;计算称重记录在数据库中的序号(1eh,1fh)
		
		pop			09h
		pop			08h
	print_bill:	
		mov			addr_h,#00h
		mov			addr_l,#22h			;读打印机的种类
		mov			r0,#1ch
		mov			r2,#1
		lcall		fm_read_block
		mov			a,1ch
		cjne		a,#0,prnt_type1
	prnt_type0:
		jmp			mode1k				;打印功能无效
	prnt_type1:
		cjne		a,#1,prnt_type2
		jmp			p_prnt_type1		;μP-A16P微型打印机功能
	prnt_type2:
		cjne		a,#2,prnt_type0
		jmp			p_prnt_type2		;KX-P1121多功能24针打印机功能
		
	p_prnt_type1:
	    jb			f_wdhz,prt_hz
;************* enlish printing setup code,canceled here **********	
		;mov			addr_h,#00h                           ****
		;mov			addr_l,#28h			;读打印语言的属性 ****
		;mov			r0,#1ch								  ****
		;mov			r2,#1                                 ****
		;lcall		fm_read_block                             ****
		;mov			a,1ch                                 ****
		;jz			prnt_mode1_e		;打印英文             ****
;*****************************************************************		
		lcall		dis_prnt			;显示"Prt   "         
		lcall		main_printer01		;打印中文             
		                                                     
		mov			r7,#12                                
		lcall		wait_prnt			;显示"Prt---"	约20s 
		jmp			mode1k
		
	prt_hz:
		lcall		prt_wdhz
		                                
;************* enlish printing setup code,canceled here **********	
	;prnt_mode1_e:                                            ****
		;lcall		main_printer01E		;打印英文             ****
		                                                     ;****
		;mov			r7,#9                                 ****
		;lcall		wait_prnt			;显示"Prt---"	约20s ****
;*****************************************************************
		mode1k:
		mov			mtd,#01h
		mov			mtd+1,#34h
		lcall		sendcmd				;去皮指示灯灭
		lcall		delay20ms
		
		mov			mtd,#01h
		mov			mtd+1,#36h
		lcall		sendcmd				;净重指示灯灭
		lcall		delay20ms
		
		jmp			keyboard_p_ret

p_prnt_type2:
;打印机类型为KX-P1121
		mov			addr_h,#00h
		mov			addr_l,#26h			;读是否设定为填充打印格式
		mov			r0,#1ch
		mov			r2,#1
		lcall		fm_read_block
		mov			a,1ch
		jnz			prnt_fill			;跳转,填充打印格式
		
;*************** chinese printing setup code,canceled here *****************
		;mov			addr_h,#00h                                     ****
		;mov			addr_l,#28h			;读打印语言的属性           ****
		;mov			r0,#1ch                                         ****
		;mov			r2,#1                                           ****
		;lcall		fm_read_block                                       ****
		;mov			a,1ch                                           ****
		;jz			prnt_mode1_f		;跳转,打印英文                  ****
;****************************************************************************
		mov			addr_h,#00h
		mov			addr_l,#23h		;读打印的联单数(1联单,2联单,3联单)
		mov			r0,#1ch
		mov			r2,#1
		lcall		fm_read_block
		mov			20h,1ch
		
		lcall		dis_prnt			;显示"Prt   "		
		lcall		main_printer02		;打印中文
		
		mov			r7,#12
		lcall		wait_prnt			;显示"Prt---"	约20s
		jmp			mode1k
;**************** enlish printing setup code,canceled here ********************	
	;prnt_mode1_f:                                                         ****
		;mov			addr_h,#00h                                        ****
		;mov			addr_l,#23h		;读打印的联单数(1联单,2联单,3联单) ****
		;mov			r0,#1ch                                            ****
		;mov			r2,#1                                              ****
		;lcall		fm_read_block                                          ****
		;mov			20h,1ch                                            ****
		                                                                  ;****
		;lcall		main_printer02E		;打印英文                          ****
		                                                                  ;****
		;mov			r7,#9                                              ****
		;lcall		wait_prnt			;显示"Prt---"	约20s              ****
		;jmp			mode1k                                             ****
;******************************************************************************		
	prnt_fill:
		lcall		main_printer03
		jmp			mode1k
;----------------------------------------------
prt_wdhz:
		mov		dptr,#print_tab0
		mov		r3,#5
		lcall	prn_send_loop			;打印机初始化
		
		mov		dptr,#print_tab02
		mov		r3,#20
		lcall	prn_send_loop			;================
;-----------------------------	
		lcall	date_data_send1			;发送日期数据
		mov		a,#' '
		lcall	printer_cr
		lcall	time_data_send			;发送时间数据
		mov		a,#13
		lcall	printer_cr
		
		mov		dptr,#print_tab04
		mov		r3,#20
		lcall	prn_send_loop			;----------------
		
		
		
		
		mov			addr_h,#06h
		mov			addr_l,#55h
		mov			r0,#1ch
		mov			r2,#2
		lcall		fm_read_block		;读第一个空白记录指针的数值(1ch,1dh)
		mov			dph,#06h
		mov			dpl,#57h
		
		mov			r0,#20h
		mov			r1,#10
		clr			a
	wdhz1_data:		
		mov			@r0,a
		inc			r0
		djnz		r1,wdhz1_data		;清总毛重(20h,21h,22h,23h),总净重(24h,25h,26h,27h)
		
		mov			1eh,a
		mov			1fh,a				;清序号(1eh,1fh)
		
	wdhz1_data0:
		clr			c
		mov			a,dpl
		subb		a,1dh
		mov			a,dph
		subb		a,1ch
		jc			look_wdhz1		;当前指针小于存贮记录指针,继续查找
		jmp			wdhz1_data3		;查找结束	
		
		
		
	look_wdhz1:
		mov			addr_h,dph
		mov			addr_l,dpl
		mov			r0,#08h				;08h,09h,0ah;0bh,0ch,0dh;0eh,0fh,10h
		mov			r2,#20				;11h,12h,13h;14h;15h;16h,17h,18h;19h,1ah,1bh
										;车号,皮重,毛重,净重,货号,客户号,时间,日期
		lcall		fm_read_block		;读"车号"数值
		mov			a,19h
		cjne		a,year,wdhz1_data1
		mov			a,1ah
		cjne		a,month,wdhz1_data1
		mov			a,1bh
		cjne		a,date,wdhz1_data1
		setb		f_record
		jmp			wdhz1_data2
		
	wdhz1_data1:
		lcall		add_addr20			;地址递加20
		jmp			wdhz1_data0
	wdhz1_data2:
		lcall		add_addr20			;地址递加20
		mov			addr_h,dph
		mov			addr_l,dpl
		
		mov			r4,#0
		mov			r5,0eh
		mov			r6,0fh
		mov			r7,10h
		mov			r0,20h
		mov			r1,21h
		mov			r2,22h
		mov			r3,23h
		lcall		L004FH_ADDC			;累加总毛重值
		mov			20h,r4
		mov			21h,r5
		mov			22h,r6
		mov			23h,r7
		
		mov			r4,#0
		mov			r5,11h
		mov			r6,12h
		mov			r7,13h
		mov			r0,24h
		mov			r1,25h
		mov			r2,26h
		mov			r3,27h
		lcall		L004FH_ADDC			;累加总净重值
		mov			24h,r4
		mov			25h,r5
		mov			26h,r6
		mov			27h,r7

		clr			a
		mov			r4,a
		mov			r5,a
		mov			r6,1eh
		mov			r7,1fh
		mov			r0,a
		mov			r1,a
		mov			r2,a
		mov			r3,#1
		lcall		L004FH_ADDC			;序号+1
		mov			1eh,r6
		mov			1fh,r7
		
		
		mov		r5,11h
		mov		r6,12h
		mov		r7,13h
		lcall	btd0					;净重数据(out:r6r5r4)
		lcall	dp_position_data		;发送带小数点的称重数据
		
		mov		a,#' '
		lcall	printer_cr				;space
				
		clr		c
		mov		a,27h
		subb	a,#7fh
		mov		a,26h
		subb	a,#96h
		mov		a,25h
		subb	a,#98h
		mov		a,24h
		subb	a,#00h					;与能打印的最大总重(9999999d=98967fh)比较
		jc		wdhz_prt_tot
		setb	f_total_over			;数据溢出
		mov		dptr,#data_err_code
		mov		r3,#6
		lcall	prn_send_loop			;发送"EEEEEE",表示数据太大溢出
		jmp		wdhz_prt_tot_x
wdhz_prt_tot:
		clr		f_total_over			;数据未溢出	
			
		mov		r5,25h
		mov		r6,26h
		mov		r7,27h
		lcall	btd0					;总重数据(out:r6r5r4)
				
		lcall	dp_position_data		;发送带小数点的称重数据
wdhz_prt_tot_x:		
		mov		a,#13
		lcall	printer_cr
		
		mov		dph,addr_h
		mov		dpl,addr_l
		jmp			wdhz1_data0
		
	wdhz1_data3:
		jb		f_record,wdhz1_data3x
		;mov		dptr,#no_record_code	;无相应记录
		;mov		r3,#10
		;lcall	prn_send_loop
		jmp		prt_wdhz_ret
	wdhz1_data3x:	
		mov		dptr,#print_tabE02
		mov		r3,#20
		lcall	prn_send_loop			;================
		

		lcall	sn_PrntData				;序号数据转化为字符送打印机
		mov		a,#13
		lcall	printer_cr
				
				
		jb		f_total_over,prt_total_over			;数据溢出		
		mov		r5,25h
		mov		r6,26h
		mov		r7,27h
		lcall	btd0					;总重数据(out:r6r5r4)
		
		lcall	dp_position_data		;发送带小数点的称重数据
		jmp		prt_wdhz_ret
prt_total_over:
		mov		dptr,#data_err_code
		mov		r3,#6
		lcall	prn_send_loop			;发送"EEEEEE",表示数据太大溢出
		jmp		wdhz_prt_tot_x		
prt_wdhz_ret:
		mov		a,#13
		lcall	printer_cr
		
		mov		dptr,#print_tab00
		mov		r3,#17
		lcall	prn_send_loop			;~~~~~~~X~~~~~~~~
		
		mov		a,#13
		lcall	printer_cr
		
		mov		r7,#5
wait_prnt_wdhz:		
		lcall	wait_prnt

prt_wdhz_ret0:
		clr		f_record
		
		ret
data_err_code:
		db	'E','E','E','E','E','E'				
;----------------------------------------------
err_11:					;显示"Err 11"表示负称量
		mov			disp_buf,  #01h
		mov			disp_buf+1,#01h
		mov			disp_buf+2,#1fh
		mov			disp_buf+3,#18h
		mov			disp_buf+4,#18h
		mov			disp_buf+5,#0eh
		lcall		disp_sub			;显示"Err 11"
		clr			p_buzz
		lcall		delay500ms
		setb		p_buzz
		
		mov			mtd,#01h
		mov			mtd+1,#34h
		lcall		sendcmd				;去皮指示灯灭
		lcall		delay20ms
		
		mov			mtd,#01h
		mov			mtd+1,#36h
		lcall		sendcmd				;净重指示灯灭
		lcall		delay20ms
		ret
;----------------------------
wait_prnt:

		lcall		dis_prnt			;显示"Prt---"	约20s
	wait_prnt0:	
		mov			dptr,#disp_tab
		mov			r2,#12
	dgsadh:			
		mov			mtd,#01h
		clr			a
		movc		a,@a+dptr
		mov			mtd+1,a
		lcall		sendcmd
		inc			dptr
		lcall		long_delay0
		lcall		long_delay0
		lcall		long_delay0
		lcall		long_delay0
		djnz		r2,dgsadh
		lcall		long_delay
		djnz		r7,wait_prnt0
		
		
		ret
;-------------------------------
disp_tab:
		db			9eh,26h,2eh		;亮,暗,暗
		db			9eh,0a6h,2eh
		db			9eh,0a6h,0aeh
		db			1eh,26h,2eh		
;-------------------------------						
prnt_mode2:
		lcall		dis_flasho	
	prnt_mode2a:
		mov			a,mrd
		jz			prnt_mode2a
		cjne		a,#6,prnt_mode2b
		mov			mrd,#0
		mov			a,disp_buf
		clr			acc.6
		mov			disp_buf,a
		jmp			prnt_mode2b50
	prnt_mode2b:
		lcall		dis_flasho0
		mov			r7,#5
		prnt_mode2b4:	
		mov			a,mrd
		jz			prnt_mode2b4		
	
		lcall		key_handle		
		jnb			f_key_num,prnt_mode2b5	
		lcall		dis_forward_o
		djnz		r7,prnt_mode2b4		;输入五位车号
		
	prnt_mode2b5:	
		mov			a,mrd
		jz			prnt_mode2b5
		cjne		a,#6,prnt_mode2b6	;"确认"	
		mov			mrd,#0
	prnt_mode2b50:	
		lcall		LedBit_p5			;Led位处理
		mov			16h,r4				;out:16h17h18h
		mov			17h,r3
		mov			18h,r2				;暂存车号
		
		mov			a,16h				;判断是车号还是货物号:00000是货物号,其他数字是车号
		jz			prnt_mode2b51
		jmp			prnt_mode3
		prnt_mode2b51:
		mov			a,17h
		jz			prnt_mode2b52
		jmp			prnt_mode3
		prnt_mode2b52:
		mov			a,18h
		jz			prnt_mode2e			;转,打印模式2:一次手动直接打印货物的称重单	
		jmp			prnt_mode3			;转打印模式3:两次贮存打印称重单
		
	prnt_mode2b6:
		cjne		a,#2,prnt_mode2b7	;"退出"
		mov			mrd,#0
		jmp			keyboard_p_ret
	prnt_mode2b7:	
		cjne		a,#4,prnt_mode2b5	;"清除"
		mov			mrd,#0
		jmp			prnt_mode2b
	prnt_mode2e:						;打印模式2:一次手动直接打印货物的称重单	
		lcall		dis_flashH
		prnt_mode2e1:
		mov			a,mrd
		jz			prnt_mode2e1
		cjne		a,#6,prnt_mode2e2
		mov			mrd,#0
		mov			a,disp_buf
		clr			acc.6
		mov			disp_buf,a
		jmp			prnt_mode2e50
		
		prnt_mode2e2:
		lcall		dis_flashH0
		mov			r7,#2	
		prnt_mode2e3:	
		mov			a,mrd
		jz			prnt_mode2e3		
	
		lcall		key_handle		
		jnb			f_key_num,prnt_mode2e5	
		lcall		dis_forward_H
		djnz		r7,prnt_mode2e3		;输入两位货号

	prnt_mode2e5:	
		mov			a,mrd
		jz			prnt_mode2e5
		cjne		a,#6,prnt_mode2e6	;"确认"	
		mov			mrd,#0
	prnt_mode2e50:
		lcall		LedBit_p2			;Led位处理
		mov			19h,r2				;暂存货号
		jmp			prnt_mode2f
	prnt_mode2e6:
		cjne		a,#2,prnt_mode2e7	;"退出"
		mov			mrd,#0
		jmp			keyboard_p_ret
	prnt_mode2e7:	
		cjne		a,#4,prnt_mode2e5	;"清除"
		mov			mrd,#0
		jmp			prnt_mode2e2
	prnt_mode2f:	
		lcall		dis_flashCLT
		prnt_mode2f1:
		mov			a,mrd
		jz			prnt_mode2f1
		cjne		a,#6,prnt_mode2f2
		mov			mrd,#0
		mov			a,disp_buf
		clr			acc.6
		mov			disp_buf,a
		jmp			prnt_mode2f50
		
		prnt_mode2f2:
		lcall		dis_flashCLT0
		mov			r7,#2	
		prnt_mode2f3:	
		mov			a,mrd
		jz			prnt_mode2f3		
	
		lcall		key_handle		
		jnb			f_key_num,prnt_mode2f5	
		lcall		dis_forward_CLT
		djnz		r7,prnt_mode2f3		;输入两位客户号

	prnt_mode2f5:	
		mov			a,mrd
		jz			prnt_mode2f5

⌨️ 快捷键说明

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