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

📄 cap1p3.asm

📁 用AD7799做的电子汽车衡称重显示控制仪表程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		
		mov			18h,#13		;回车
		mov			08h,#02h	;起始字
		
		setb		f_start_send
get_sbuf_data_ret:		
		ret
;-------------------------------------------------------
key_handle:				;确定0~9数字键		
		mov			r5,#10
		mov			r4,#0ffh
		mov			dptr,#keynum_tab
look_loop:		
		clr			a
		movc		a,@a+dptr
		cjne		a,mrd,look_continue
		mov			mrd,#0
		inc			r4
		setb		f_key_num
		;setb		p_buzz
		jmp			key_handle_ret
look_continue:		
		inc			dptr
		inc			r4
		djnz		r5,look_loop
		clr			f_key_num
		;mov			mrd,#0	
key_handle_ret:
		ret	
;-----------------------------------------------------		
rd_key_value:
		lcall		scankey
		cjne		a,#00h,have_key_value
		clr			keyon
		jmp			rd_key_value_ret
have_key_value:
		setb		keyon	
		mov			mrd,a
		lcall		p_buzzer	
rd_key_value_ret:
		ret
;--------------------------------
p_buzzer:
		mov			a,f_function0
		jnb			acc.5,p_buzzer0
		clr			p_buzz
		lcall		long_delay0
	p_buzzer0:	
		setb		p_buzz
p_buzzer_ret:		
		ret		
;-----------------------------------------------------
keyboard_p:			;20ms rd keyvalue once
		jnb			keyon,keyboard_p_ret
		clr			keyon
		mov			a,mrd
		cjne		a,#1,s2		;key_value=1(去皮),or jump s2
		mov			mrd,#0
		lcall		p_s1		;key_value=1(去皮)处理程序
		
s2:		cjne		a,#2,s3		;key_value=2(退出),or jump s3
		mov			mrd,#0
		lcall		p_s2		;key_value=2(退出)处理程序	
		
s3:		cjne		a,#3,s4		;key_value=3(汇总),or jump s4
		mov			mrd,#0
		lcall		p_s3		;key_value=3(汇总)处理程序	
		
s4:		cjne		a,#4,s5		;key_value=4(清除),or jump s5
		mov			mrd,#0
		lcall		p_s4		;key_value=4(清除)处理程序
		
s5:		cjne		a,#5,s6		;key_value=5(客户),or jump s6
		mov			mrd,#0
		lcall		p_s5		;key_value=5(客户)处理程序	
		
s6:		cjne		a,#6,s9		;key_value=6(确定/打印),or jump s9
		mov			mrd,#0
		jmp			p_s6		;key_value=6(确定/打印)处理程序	
		
s9:		cjne		a,#9,s10	;key_value=9(车号),or jump s10
		mov			mrd,#0
		jmp			p_s9		;key_value=9(车号)处理程序
		
s10:	cjne		a,#10,s11	;key_value=10(调显),or jump s11
		mov			mrd,#0
		jmp			p_s10		;key_value=10(调显)处理程序	
		
s11:	cjne		a,#11,s13	;key_value=11(序号),or jump s13
		mov			mrd,#0
		lcall		p_s11		;key_value=11(序号)处理程序
		
s13:	cjne		a,#13,s14	;key_value=13(货号),or jump s14
		mov			mrd,#0
		lcall		p_s13		;key_value=13(货号)处理程序	
		
s14:	cjne		a,#14,s21	;key_value=14(自检),or jump s21
		mov			mrd,#0
		lcall		p_s14		;key_value=14(自检)处理程序	
		
s21:	cjne		a,#21,s22	;key_value=21(清零)处理程序	
		mov			mrd,#0
		lcall		p_s21		;key_value=21(清零),or jump s22
		
s22:	cjne		a,#22,s30	;key_value=22(日期/时间),or jump s30
		mov			mrd,#0
		jmp			p_s22		;key_value=22(日期/时间)处理程序
		
keyboard_p_ret:
		
		ret		
		
s30:	cjne		a,#30,YZPZ	;key_value=30(存贮),转>>>预置皮重功能
		mov			mrd,#0
		jmp			prnt_mode1	;key_value=30(存贮)处理程序,进入打印模式1	
	
		
YZPZ:							;预置皮重功能:<数字>+"去皮"键
		mov			a,m_tare_count
		jnb			acc.0,YZPZa0		;在"皮重"状态下,禁止再次去皮操作 
		jmp			keyboard_p_ret
	YZPZa0:	
		mov			a,mrd
		jz			keyboard_p_ret
		lcall		hide_data
		mov			r7,#5
	YZPZa:
		mov			a,mrd		
		jz			YZPZa	
		lcall		key_handle	
		jnb			f_key_num,YZPZ0
		lcall		dis_forward_P
		djnz		r7,YZPZa			;输入五位皮重
	YZPZ0:
		mov			a,mrd
		jz			YZPZ0
		cjne		a,#1,YZPZ1			;"去皮"键
		mov			mrd,#0
		lcall		LedBit_p5			;Led位处理
		mov			m_tare_0,r4			;毛重大于5e才允许去皮
		mov			m_tare_1,r3
		mov			m_tare_2,r2			;当前所输入的数字转为皮重值
		
		inc			m_tare_count		;"去皮"键的按键次数加1
		
		mov			mtd,#01h
		mov			mtd+1,#0b4h			
		lcall		sendcmd				;去皮状态指示灯亮
		lcall		delay20ms
		
		mov			mtd,#01h
		mov			mtd+1,#35h
		lcall		sendcmd				;毛重指示灯灭
		lcall		delay20ms
		
		mov			mtd,#01h
		mov			mtd+1,#0b6h			
		lcall		sendcmd				;净重状态指示灯亮
		lcall		delay20ms
		
		jmp			keyboard_p_ret
		
	YZPZ1:
		mov			a,mrd
		jz			YZPZ1
		cjne		a,#2,YZPZ2			;"退出"键
		mov			mrd,#0
		jmp			keyboard_p_ret
	YZPZ2:
		cjne		a,#4,YZPZ0			;"清除"键
		mov			mrd,#0
		lcall		dis_flashp0			;闪烁显示"P    0"
		mov			r7,#5
		jmp			YZPZa
	

;------------------------------	
;按下"存贮"键后	
prnt_mode1:			;打印模式:
										;毛重已保存在m_gross_0,m_gross_1,m_gross_2
		mov			disp_buf,  #1fh
		mov			disp_buf+1,#1fh
		mov			disp_buf+2,#0eh
		mov			disp_buf+3,#1ah
		mov			disp_buf+4,#0ah
		mov			disp_buf+5,#05h
		lcall		disp_sub			;显示"SAVE"								
										
			prnt_mode1aa:
		mov			a,mrd
		jz			prnt_mode1aa
		cjne		a,#9,prnt_mode1aa1	;"车号"键
		mov			mrd,#0
		jmp			prnt_mode2
	prnt_mode1aa1:
		cjne		a,#2,prnt_mode1a2	;"退出"键
		mov			mrd,#0
		jmp			keyboard_p_ret	
	prnt_mode1a2:
		lcall		key_handle
		mov			mrd,#0	
		jnb			f_key_num,prnt_mode1aa
		mov			r7,#5
		lcall		hide_data
		mov			mrd,r4
		jmp			prnt_mode1k
													
								
	prnt_mode1ab:	;打印模式一:一次手动预置皮重打印称重单
		mov			r7,#5
		lcall		hide_data
		lcall		dis_flashp0
	prnt_mode1a:	;输入皮重
		mov			a,mrd
		jz			prnt_mode1a	
		lcall		key_handle	
		jnb			f_key_num,prnt_mode1c
	prnt_mode1k:
		mov			mrd,#0
		lcall		dis_forward_P
		djnz		r7,prnt_mode1a		;输入五位皮重
		
	prnt_mode1b:
		mov			a,mrd
		jz			prnt_mode1b
		cjne		a,#1,prnt_mode1c	;"去皮"	
		mov			mrd,#0
		lcall		LedBit_p5			;Led位处理
		mov			10h,r4				;out:10h11h12h
		mov			11h,r3
		mov			12h,r2				;暂存皮重
		
		inc			m_tare_count		;"去皮"键按键次数加1
		mov			m_tare_0,r4
		mov			m_tare_1,r3
		mov			m_tare_2,r2			;皮重
		
		mov			mtd,#01h
		mov			mtd+1,#0b4h
		lcall		sendcmd				;去皮指示灯亮
		
		lcall		delay20ms
				
		jmp			prnt_mode1b0
	prnt_mode1c:
		mov			a,mrd
		jz			prnt_mode1c
		cjne		a,#2,prnt_mode1d	;"退出"
		mov			mrd,#0
		jmp			keyboard_p_ret
	prnt_mode1d:	
		cjne		a,#4,prnt_mode1b	;"清除"
		mov			mrd,#0
		lcall		dis_flashp0			;闪烁显示数字"0",等待输入
		jmp			prnt_mode1ab
					
	prnt_mode1b8:		;显示"Err 11"表示负称量,不能贮存
		lcall			hide_data
		lcall			err_11
		lcall			delay500ms
		lcall			delay500ms
		jmp			keyboard_p_ret		;退出	
	prnt_mode1b0:	
		lcall		prnt_mode1_weight	;计算出净重(13h14h15h)并显示,净重指示灯亮
		jc			prnt_mode1b8		;显示"Err 11"表示负称量,不能贮存
		lcall		dis_weight_led0		;显示净重
		
		mov			mtd,#01h
		mov			mtd+1,#0b6h
		lcall		sendcmd				;净重指示灯亮
		lcall		delay20ms
		
		mov			mtd,#01h
		mov			mtd+1,#35h
		lcall		sendcmd				;毛重指示灯灭
		lcall		delay20ms
				
		prnt_mode1b1:
		mov			a,mrd
		jz			prnt_mode1b1
		cjne		a,#9,prnt_mode1b2	;"车号"键 
		mov			mrd,#0
		jmp			prnt_mode1b3
		prnt_mode1b2:
		cjne		a,#2,prnt_mode1b1	;"退出"	
		prnt_mode1_exit:	
		mov			mrd,#0
		inc			m_tare_count		;"去皮"键按键次数加1
		clr			a
		mov			m_tare_0,a
		mov			m_tare_1,a
		mov			m_tare_2,a			;皮重
		
		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		;退出
		
		
		prnt_mode1b3:
		lcall		dis_flasho
		prnt_mode1b3a:
		mov			a,mrd
		jz			prnt_mode1b3a
		cjne		a,#6,prnt_mode1b3b
		mov			mrd,#0
		mov			a,disp_buf
		clr			acc.6
		mov			disp_buf,a
		jmp			prnt_mode1ba
		prnt_mode1b3b:
		lcall		dis_flasho0
		mov			r7,#5
		prnt_mode1b4:	
		mov			a,mrd
		jz			prnt_mode1b4		
	
		lcall		key_handle		
		jnb			f_key_num,prnt_mode1b5	
		lcall		dis_forward_o
		djnz		r7,prnt_mode1b4		;输入五位车号
		
	prnt_mode1b5:	
		mov			a,mrd
		jz			prnt_mode1b5
		cjne		a,#6,prnt_mode1b6	;"确认"	
		mov			mrd,#0
	prnt_mode1ba:
		lcall		LedBit_p5			;Led位处理
		mov			16h,r4				;out:16h17h18h
		mov			17h,r3
		mov			18h,r2				;暂存车号
		
		jmp			prnt_mode1e
	prnt_mode1b6:
		cjne		a,#2,prnt_mode1b7	;"退出"
		mov			mrd,#0
		jmp			prnt_mode1_exit
	prnt_mode1b7:	
		cjne		a,#4,prnt_mode1b5	;"清除"
		mov			mrd,#0
		jmp			prnt_mode1b3b
	prnt_mode1e:		
		lcall		dis_flashH
		prnt_mode1e1:
		mov			a,mrd
		jz			prnt_mode1e1
		cjne		a,#6,prnt_mode1e2
		mov			mrd,#0
		mov			a,disp_buf
		clr			acc.6
		mov			disp_buf,a
		jmp			prnt_mode1e50
		prnt_mode1e2:
		lcall		dis_flashH0
		mov			r7,#2	
		prnt_mode1e4:	
		mov			a,mrd
		jz			prnt_mode1e4		
	
		lcall		key_handle		
		jnb			f_key_num,prnt_mode1e5	
		lcall		dis_forward_H
		djnz		r7,prnt_mode1e4		;输入两位货号
		
	prnt_mode1e5:	
		mov			a,mrd
		jz			prnt_mode1e5
		cjne		a,#6,prnt_mode1e6	;"确认"	
		mov			mrd,#0
	prnt_mode1e50:
		lcall		LedBit_p2			;Led位处理
		mov			19h,r2				;暂存货号
		jmp			prnt_mode1f
	prnt_mode1e6:
		cjne		a,#2,prnt_mode1e7	;"退出"
		mov			mrd,#0
		jmp			prnt_mode1_exit
	prnt_mode1e7:	
		cjne		a,#4,prnt_mode1e5	;"清除"
		mov			mrd,#0
		jmp			prnt_mode1e2
	prnt_mode1f:	
		lcall		dis_flashCLT
		prnt_mode1f1:
		mov			a,mrd
		jz			prnt_mode1f1
		cjne		a,#6,prnt_mode1f2
		mov			mrd,#0
		mov			a,disp_buf
		clr			acc.6
		mov			disp_buf,a
		jmp			prnt_mode1f50
		prnt_mode1f2:
		lcall		dis_flashCLT0
		mov			r7,#2	
		prnt_mode1f3:	
		mov			a,mrd
		jz			prnt_mode1f3		
	
		lcall		key_handle		
		jnb			f_key_num,prnt_mode1f5	
		lcall		dis_forward_CLT
		djnz		r7,prnt_mode1f3		;输入两位客户号
		
	prnt_mode1f5:	
		mov			a,mrd
		jz			prnt_mode1f5
		cjne		a,#6,prnt_mode1f6	;"确认"	
		mov			mrd,#0
	prnt_mode1f50:
		lcall		LedBit_p2			;Led位处理
		mov			1ah,r2				;暂存客户号
					;显示"Prnt  "等待打印
		jmp			prnt_mode1g
	prnt_mode1f6:
		cjne		a,#2,prnt_mode1f7	;"退出"
		mov			mrd,#0
		jmp			prnt_mode1_exit
	prnt_mode1f7:	
		cjne		a,#4,prnt_mode1f5	;"清除"
		mov			mrd,#0
		jmp			prnt_mode1f2

	prnt_mode1g:
		lcall		readtime			;读取时间日期
		
		lcall		check_CZJLZZ		;判断称重记录单的存贮指针位置(use:08h,09h...)
		
		jc			prnt_mode1h			;称重记录已满,跳转
										;称重记录未满

		;将打印数据写打印缓冲区
		mov			08h,16h
		mov			09h,17h
		mov			0ah,18h				;车号
		
		mov			0bh,10h
		mov			0ch,11h
		mov			0dh,12h				;皮重
		
		mov			0eh,m_gross_0
		mov			0fh,m_gross_1
		mov			10h,m_gross_2		;毛重
		
		mov			11h,13h				
		mov			12h,14h
		mov			13h,15h				;净重
		
		mov			14h,19h				;货号
		mov			15h,1ah				;客户号
		
		mov			16h,hour
		mov			17h,minute
		mov			18h,second			;时分秒
		
		mov			19h,year
		mov			1ah,month
		mov			1bh,date			;年月日

		jmp			prnt_mode1i			;称重记录未满
		
	prnt_mode1h:
		mov			23h,16h
		mov			24h,17h
		mov			25h,18h				;保护车号
		mov			26h,10h
		mov			27h,11h
		mov			28h,12h				;保护皮重
		mov			29h,13h
		mov			32h,14h
		mov			53h,15h				;保护净重
		mov			59h,19h				;保护货号
		mov			77h,1ah				;保护客户号
				
		lcall		SavePush_CZJL		;将最早的一组记录挤出
		
		mov			08h,23h
		mov			09h,24h
		mov			0ah,25h				;将车号写入打印缓冲区
		mov			0bh,26h
		mov			0ch,27h
		mov			0dh,28h				;将皮重写入打印缓冲区
		mov			0eh,m_gross_0
		mov			0fh,m_gross_1
		mov			10h,m_gross_2		;将毛重写入打印缓冲区

		mov			11h,29h
		mov			12h,32h
		mov			13h,53h				;将净重写入打印缓冲区

		mov			14h,59h				;将货号写入打印缓冲区
		mov			15h,77h				;将客户号写入打印缓冲区
		
		mov			16h,hour
		mov			17h,minute
		mov			18h,second			;时分秒
		mov			19h,year
		mov			1ah,month
		mov			1bh,date			;年月日	
	prnt_mode1i:						;写存贮器
	
		
		mov			r0,#08h
		mov			r2,#20
		mov			addr_h,dph
		mov			addr_l,dpl
		lcall		write_block			;写存贮器
		
		mov			1ch,dph
		mov			1dh,dpl

⌨️ 快捷键说明

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