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

📄 weide_music_ok.asm

📁 威迪家电控制电路
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	inc	check_count
	mov	a,check_count
	sub	a,100
	sz	c
	jmp	check_pc_inc
	jmp	main_ret

check_pc_inc:
	clr	check_count
	mov	a,1
	mov	buz_s_time,a
	clr	buz_count
	inc	check_pc
	
;	mov	a,check_pc
;	sub	a,5
;	sz	c
;	jmp	check_pc_end
	jmp	main_ret

check_2:
	set	pa_out.power_out
	set	pa_out.hm_out
	jmp	check_11
	
check_3:
	clr	pa_out.power_out
	clr	pa_out.hm_out
	set	pa_out.auto
	set	pa_out.heat
	sz	pc.water_l
	jmp	main_ret
	snz	pc.water_h
	jmp	main_ret
	jmp	check_pc_inc

check_4:
	set	pa_out.heat
	clr	pa_out.auto
	sz	pc.water_h
	jmp	main_ret
	snz	pc.water_l
	jmp	main_ret
	jmp	check_pc_inc
	
check_5:
	clr	pa_out.heat
	mov	a,div_res
	sub	a,TEMPER_80	;temper >80C ?
	sz	c
	jmp	main_ret
	mov	a,div_res
	sub	a,TEMPER_85
	snz	c
;	jmp	check_pc_inc
	jmp	main_ret

check_pc_end:
	clr	check_pc
	clr	check_count
	clr	out_delay_count
	clr	buz_s_time
	set	buzer.music
	clr	wk_status
	jmp	main_ret
	
	
	
;上电初始化RAM子程序**********************************************
ram_ini:
	clr	intc
	
	mov	a,BUZOFF
	mov	tmrc,a
		
	clr	pac		;set all pa pin to output
	;clr	pbc
	mov	a,03h		;water high/low check
	mov	pcc,a
	
	clr	pa
	;clr	pb
	clr	pc
	
	clr	set_status
	clr	wk_status
	clr	wk_stat_bak
	
	mov	a,TEMP_H_COUNT_MAX
	mov	temper_h_count,a
	
	clr	stand
	clr	temper_h
	clr	temper_l
	clr	div_res_h
	clr	div_res
	clr	div_temp
	clr	div_count
	clr	temp_err_count
	
	mov	a,W1S_COUNT_MAX
	mov	w1s_count,a
	
	clr	motor_count
	
	mov	a,MOTOR_TIME_MAX
	mov	motor_time,a
	
	;clr	count1
	;clr	count2
		
	clr	flag
	clr	key
	
	clr	pa_out
	clr	pa_delay
	clr	led_count
	clr	water_normal_c
	
	clr	buzer
	clr	buz_count
	
	clr	buz_s_time
	clr	buz_s_bak
	
	clr	music_count
	
	mov	a,8
	mov	beat_count,a
	
	clr	music_fre
	clr	music_repeat_count
	
	mov	a,MUSIC_CT_MAX
	mov	music_ct,a
	
	clr	t98_count
	clr	slow_l
	clr	slow_heat_count
	clr	out_delay_count
	clr	power_up_delay
	clr	check_pc
	clr	check_count
	
	mov	a,7
	mov	wdts,a
	
	ret
;*****************************************************************
;output_con
;main function: when heat output change (0->1) delay 0.5s output

output_con:
	clr	pac
	
	mov	a,pa_out
	mov	pa_delay,a
	
	mov	a,out_delay_count
	sub	a,70
	snz	c
	jmp	heat_disable

output_c1:
	mov	a,pa_delay
	mov	pa,a
	
	clr	pbc
	;mov	a,pb_out
	;mov	PB,A
	
	set	pcc.water_h
	set	pcc.water_l
	ret 

heat_disable:
	inc	out_delay_count
	clr	pa_delay.power_out
	clr	pa_delay.hm_out
	jmp	output_c1
;*****************************************************************
;neme: 温度测量子程序
;input: 无
;output: temper_h,temper_l NTC电阻计数值
;	stand 标准电阻测量的参考值	
wendu:
	clr	pac
	
	clr	pa.t_ntc
	clr	pa.t_stand
	clr	pa.t_in		;low level
	mov	a,5		;delay 10ms
	call	delay
				;first test stand res
	
	set	pac.t_ntc	;set ntc pin to input
	set	pac.t_in	;set t_in pin to input
	clr	pac.t_stand
	clr	acc
	set	pa.t_stand
	nop
	
t1_loop:
	nop
	inc	acc		;1	
	sz	acc.7		;skip if acc=0 timer over	2
	jmp	timer_over	;			3
	snz	pa.t_in		;skip if t_in=1		3
	jmp	t1_loop		;			4
	mov	stand,a		;store stand timer
	sub	a,30
	snz	c
	jmp	timer_over
;	mov	a,stand		;store stand timer
;	sub	a,160
;	sz	c
;	jmp	timer_over
	
	
	clr	pac
	
	clr	pa.t_ntc
	clr	pa.t_stand
	clr	pa.t_in		;low level
	
	mov	a,5		;delay 10ms
	call	delay
	
	clr	pac.t_ntc	;set ntc pin to output
	set	pac.t_in	;set t_in pin to input
	set	pac.t_stand	

	clr	acc
	clr	temper_h
	clr	temper_l
	
	
	set	pa.t_ntc
	nop
	
t2_loop:
	inc	acc				;1
	sz	acc				;2
	jmp	t_in_check			;3
	
	inc	temper_h	;			4
	sz	temper_h.3	;skip if timer no over	5
	jmp	timer_over	;over			6
	jmp	t2_loop		;			7
	
t_in_check:
	snz	pa.t_in		;skip if t_in=1		4
	jmp	t2_loop
	mov	temper_l,a
	mov	count1,a
	mov	a,temper_h
	mov	count2,a
	
t2_loop_bu:
	nop			;温度测量子程序时间补足,以保证每次调用该子程序时间固定。
	nop
	inc	count1
	sz	count1
	jmp	t2_loop_bu
	inc	count2
	sz	count2.3
	jmp	temp_test_end
	jmp	t2_loop_bu
temp_test_end:
	mov	a,temper_l
	sub	a,5
	snz	c
	jmp	timer_over_1
	ret	a,0

timer_over_1:
	sz	temper_h
	ret	a,0
	
timer_over:
	clr	temper_h
	clr	temper_l
	ret	a,1

;*****************************************************************
;name: 温度参数整理子程序
;input: temper_h,temper_l
;output: temper_h,temper_l
;operation: <80, <<7bit
get_wendu:
	mov	a,temper_h
	sub	a,01h
	sz	c
	jmp	temper_high
	
	;mov	a,temper_l
	;sub	a,40h
	;sz	c
	;jmp	temper_high

wk_pre_1:
	;clr	temper_h
	mov	a,7
rlc_loop:	
	clr	c	
	rlc	temper_l
	rlc	temper_h
	sdz	acc
	jmp	rlc_loop
	ret

temper_high:
	;clr	temper_h
	;mov	a,40h
	;mov	temper_l,a
	mov	a,00h
	mov	temper_h,a
	mov	a,0ffh
	mov	temper_l,a
	jmp	wk_pre_1



;*****************************************************************
;name: 双字节除法子程序
;功能:双字节二进制无符号数除以单字节二进制数
;入口条件:被除数在temper_h、temper_l中,除数在stand中。
;出口信息:低字节商在div_res中,高字节在div_res_h。
div: 
	clr	c
	clr	div_res_h
	clr	temper_hh
	clr	div_res
div_h_loop:
	mov	a,temper_h
	sub	a,stand
	snz	c			;if temper_h>=stand, then ret with OV bi
	jmp	div50
	mov	temper_h,a
	inc	div_res_h
	jmp	div_h_loop
div50:
	mov	a,8
	mov	div_count,a
div51:
	rlc	temper_l
	rlc	temper_h
	rlc	temper_hh
	mov	a,temper_h	
	sub	a,stand
	mov	div_temp,a
	rlca	temper_hh
	sub	a,1
	snz	z		;
	jmp	div52		;
	mov	a,div_temp
	mov	temper_h,a
	set	c
	jmp	div53
div52:
	clr	c
div53:
	rlc	div_res
	sdz	div_count
	jmp	div51
	rlca	temper_h
	snz	c	;c=1,skip
	jmp	div54
div55:
	inc	div_res
	ret	a,0
div54:
	sub	a,stand
	sz	c
	jmp	div55
	ret	a,0

;*****************************************************************
;name: 按键扫描子程序
;input:
;利用led显示输出管脚切换到输入模式交替扫描得到按键值
;sourse: status flag bit: auto,heat, pin define bit
;        key.no_key, heat_1,heat_ok, auto_1,auto_ok.

key_scan:
	clr	key.heat_ok
	clr	key.auto_ok
	;sz	key.heat_ok
	;jmp	auto_key_pd1
	clr	pac.auto	;set auto_led pin to output
	set	pac.heat	;set heat_led pin to input
	set	pa.auto		;to high
	nop
	nop
	nop
	sz	pa.heat		;if heat_led=1, heat_key push down.
	jmp	key_heat_push
;heat no push
auto_key_pd1:
	;sz	key.auto_ok
	;jmp	scan_key_end
	clr	pac.heat
	set	pac.auto
	set	pa.heat		;set heat_led to out high
	nop
	nop
	nop
	sz	pa.auto
	jmp	key_auto_push
no_key_push:
	
	set	key.no_key
	clr	key.heat_1
	clr	key.auto_1
scan_key_end:
	clr	pac
	mov	a,pa_delay
	mov	pa,a
	ret
key_heat_push:
	clr	pac
	mov	a,pa_delay
	mov	pa,a
	clr	key.auto_1
	clr	key.auto_ok
	SZ	key.heat_1
	jmp	heat_key_pd
	sz	key.no_key
	jmp	heat_key_pd
	jmp	scan_key_end
	
	
heat_key_pd:
	clr	key.no_key
	sz	key.heat_1
	jmp	heat_key_ok
	set	key.heat_1
	jmp	scan_key_end
	
heat_key_ok:
	set	key.heat_ok
key_ok_end:	
	clr	key.heat_1
	clr	key.auto_1
	clr	key.no_key
	jmp	scan_key_end
	

key_auto_push:
	clr	pac
	mov	a,pa_delay
	mov	pa,a
	clr	key.heat_1
	clr	key.heat_ok
	sz	key.auto_1
	jmp	auto_key_pd
	sz	key.no_key
	jmp	auto_key_pd
	jmp	scan_key_end
	
auto_key_pd:
	clr	key.no_key
	sz	key.auto_1
	jmp	auto_key_ok
	set	key.auto_1
	jmp	scan_key_end
	
auto_key_ok:
	set	key.auto_ok
	jmp	key_ok_end
		

	
;*****************************************************************
;name: 延时子程序
;input: ACC=需要延时的时间值(ms) @ 4MHz
delay:
	mov	count2,a
delay_st:
	mov	a,240
	mov	count1,a
delay_loop:
	sdz	count1
	jmp	delay_loop
	mov	a,100
	mov	count1,a
delay_loop1:
	sdz	count1
	jmp	delay_loop1
	sdz	count2
	jmp	delay_st
	ret

;*****************************************************************
;name: 蜂鸣器处理子程序
;input: buz_s_time 蜂鸣器短鸣次数寄存器
;	BUZ_S
;	buzer.buz_long 蜂鸣器长鸣一声标志
;	buzer.music 一段音乐
buz_con:
	inc	buz_count
	sz	buz_s_time
	jmp	buz_short
	sz	buzer.buz_long
	jmp	buz_long_con
	sz	buzer.music
	jmp	buz_music
	mov	a,BUZOFF
	mov	tmrc,a
	clr	buz_count
	ret
buz_short:
	mov	a,buz_count
	sub	a,BUZ_S
	sz	c
	jmp	buz_short_off_p
buz_on:	
	mov	a,BUZ_FRE
	mov	tmr,a
	mov	a,BUZON
	mov	tmrc,a
	
	ret
buz_short_off_p:
	mov	a,buz_count
	sub	a,BUZ_S*2
	sz	c
	jmp	buz_short_off
buz_off:	
	mov	a,BUZOFF
	mov	tmrc,a
	
	ret
buz_short_off:
	clr	buz_count
	dec	buz_s_time
	ret

buz_long_con:	
	mov	a,buz_count
	sub	a,BUZ_LONG_MAX
	sz	c
	jmp	buz_long_off_p
	jmp	buz_on
	
buz_long_off_p:
	mov	a,buz_count
	sub	a,BUZ_LONG_MAX+5
	snz	c
	jmp	buz_off
buz_long_off:
	clr	buz_count
	sz	buzer.buz_warning
	jmp	buz_long_warning
	clr	buzer.buz_long
	ret
buz_long_warning:
	mov	a,buz_s_bak
	mov	buz_s_time,a
	ret

buz_music:
	mov	a,buz_count
	sub	a,beat_count
	sz	c
	jmp	music_beat_end
play_music:
	mov	a,music_count
	add	a,016h
	mov	tblp,a
	tabrdl	music_fre
	mov	a,tblh
	mov	music_loop,a
	mov	a,music_fre
	sub	a,0ffh			;if music_fre =0ffh, then end.
	sz	acc
	jmp	play_m01
	mov	a,BUZOFF		;play music end
	mov	tmrc,a
	clr	music_count
	clr	buz_count
	sdz	music_ct
	ret
	clr	buzer.music
	ret
play_m01:
	mov	a,music_fre
	add	a,00h
	mov	tblp,a
	tabrdl	acc
	mov	tmr,a
	sz	acc
	jmp	play_m02
	mov	a,BUZOFF		;if =0, stop voice
	jmp	play_m03

play_m02:	
	mov	a,BUZON
play_m03:	
	mov	tmrc,a
	mov	a,MUSIC_BEAT
	mov	beat_count,a
	
beat_loop:	
	sdz	music_loop
	jmp	beat_rl	
	ret
beat_rl:
	rl	beat_count
	jmp	beat_loop	

music_beat_end:
	clr	buz_count
	inc	music_count
	ret
;Tone frequency tab
;
;3rd			4th		5th
;C	130.81	1	261.63	/1	523.25		1046.52		0
;C#	138.59		277.18		554.37		1108.72		1
;D	146.83	2	293.66		587.33		1174.64		2
;D#	155.56		311.13		622.25		1244.52		3
;E	164.81	3	329.63		659.26		1318.52		4
;F	174.61	4	349.23		698.46		1396.92		5
;F#	185.00		369.99		739.99		1479.96		6
;G	196.00	5	392.00		783.99		1568.00		7
;G#	207.65		415.30		830.61		1661.20		8
;A	220.00	6	440.00		880.00		1760.00		9
;A#	233.08		466.16		932.23		1864.64		a
;B	246.94	7	496.48		987.77		1985.92		b
;
	
;	org	300h
;	dc	137,143,150,156,161,167,172,176,181,185,189,193,0,0,0,0
;	dc	196,200,203,206,209,211,214,216,218,220,222,225,0,0,0,0
;	         1       2       3   4       5       6       7
;	dc	226,228,229,231,232,234,235,236,237,238,239,240,0,0,0,0
;	dc	241,242,243,243,244,245,245,246,247,247,248,248

	         
	org	300h
;		    1   2   3 	4   5   6   7          1  2  3  4  5  6  7
	dc	00;,137,150,161,167,176,185,193	;^  0, 1  2, 3  4  5, 6, 7
	dc	   196,203,209,211,216,220,225	;      8, 9, a  b  c  d  e
	dc	   226,229,232,234,236,238,240	;_     f 10 11 12 13 14 15
	dc	   241,243,244,245,246,247,248	;     16,17 18,19,1a,1b,1c 
	
	org	316h
	;dc	20dh,10dh,10ch,20ah,20ch	;music世上只有妈妈好
	;dc	20fh,10dh,10ch,30dh
	;dc	20ah,10ch,10dh,20ch,20ah
	;dc	108h,106h,10ch,10ah,309h
	;dc	209h,109h,10ah,20ch,10ch,10dh
	;dc	20ah,209h,308h
	;dc	20ch,10ch,10ah,109h,108h,106h,108h
	;dc	405h,0ffh
	
	dc	20ch,209h,20ch,20ch,20ch,200h;,200h	;找点空闲
	dc	20ch,208h,209h,209h,208h,200h;,200h	;带点时间
	dc	206h,208h,209h,209h,209h,200h,208h	;领着孩子
	dc	209h,209h,206h,205h,305h,100h		;回家看看
	dc	208h,208h,205h,308h,206h,200h		;妈妈准备了
	dc	208h,209h,10bh,10ah,209h,309h,200h	;一些唠叨
	dc	208h,209h,20ch,30bh,20ah,30ah		;爸爸张罗了
	dc	209h,109h,10ah,1208h,209h,309h,200h	;一桌好饭
	dc	20ch,10ch,10ah,10ah,10ch,209h,200h,100h,20ch	;生活的烦恼跟
	dc	20dh,20ch,109h,10ah,208h,308h,200h	;妈妈说说
	dc	206h,108h,108h,10ah,109h,209h,309h,200h,209h	;工作的事情向
	dc	20ah,209h,10ch,10dh,20ch,30ch,20ch		;爸爸谈谈
	dc	30ch,20ch,20ch,20ch
	dc	200h,200h
	;dc	300h,300h,300h,200h
	dc	30ch,20bh,20ch,20fh,20dh,20dh,20ch		;常回家看看
	dc	20bh,20ch,20fh,20dh,20dh,20ch,30ch		;回家看看
	dc	309h,10ch,10ah,20ch,20dh,20dh,20ch,10ch,10ah	;哪怕帮妈妈刷刷
	dc	10ch,10ah,20ah,20ch,10ah,109h,309h,209h		;筷子洗洗碗
	dc	209h,109h,10ah,209h,20ah,20ch,209h,10ch,10ah,20ch	;老人不图儿女为家
	dc	20ah,20dh,20dh,10ah,109h,209h,109h,107h,306h		;做多大贡献呀
	dc	109h,209h,109h,208h,209h,20bh,10bh,10bh,109h,209h	;一辈子不容易就图个
	dc	20ch,30ch,10fh,10dh,30ch,20ch,200h			;团团园园
	
	dc	30ch,20bh,20ch,20fh,20dh,20dh,20ch		;常回家看看
	dc	20bh,20ch,20fh,20dh,20dh,20ch,30ch		;回家看看
	dc	309h,10ch,10ah,20ch,20dh,20dh,20ch,10ch,10ah	;哪怕帮妈妈刷刷
	dc	10ch,10ah,20ah,20ch,10ah,109h,309h,209h		;筷子洗洗碗
	dc	209h,109h,10ah,209h,20ah,20ch,209h,10ch,10ah,20ch	;老人不图儿女为家
	dc	20ah,20dh,20dh,10ah,109h,209h,109h,107h,306h		;做多大贡献呀
	dc	109h,209h,109h,208h,209h,20bh,10bh,10bh,109h,209h	;一辈子不容易就图个
	;dc	20ch,30ch,10fh,10dh,30ch,20ch				;团团园园
	
	
	dc	20ch,30ch,10fh,10dh,30ch,20ch		;平平安安
	dc	30ch,30ch,300h,300h,0ffh
	
	
;	dc	30dh,20dh,20ch,30ah,30ch	;music世上只有妈妈好
;	dc	30fh,20dh,20ch,40dh
;	dc	30ah,20ch,20dh,30ch,30ah
;	dc	208h,206h,20ch,20ah,409h
;	dc	309h,209h,20ah,30ch,20ch,20dh
;	dc	30ah,309h,408h
;	dc	30ch,20ch,20ah,209h,208h,206h,208h
;	dc	505h,0ffh
	
	
;	dc	26h,15h,23h,25h
;	dc	28h,16h,15h,36h
;	dc	23h,15h,16h,25h,13h,12h
;	dc	11h,16h,15h,13h,32h
;	dc	22h,13h,25h,26h
;	dc	23h,22h,31h
;	dc	25h,13h,12h,11h,16h,11h
;	dc	45h,0ffh
	end

⌨️ 快捷键说明

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