📄 weide_music_ok.asm
字号:
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 + -