📄 cdc_fw_v13_asm.asm
字号:
jb STATUS_REG_DRQ,din
din:
call act_cmd
ret
fb_msf_play: ;按 M S F数据播放指令
mov start_m,current_m
mov start_s,current_s
mov start_f,#0h
call play_entire_cd_cmd
mov packet_6,#00h
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;红外码查询-功能执行
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ir_num_key_wait:
clr ea
mov a,ir_key
cjne a,#0ffh,irk_num
setb ea
ret
irk_num:
mov a,ir_key
cjne a,#0ah,irkrtt
sjmp irty45
irkrtt:
jnc irktret ;>oah,非数字键退出
irty45:
mov ir_code,#0CEh ;是数字键做个0CEh标记
irktret:
mov ir_temp,ir_key
mov ir_key,#0ffh
setb ea
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;具体功能执行
ir_key_wait:
clr ea
mov a,ir_key
cjne a,#0ffh,irktw1
setb ea
ret
irktw1:
mov dptr,#irKm
mov b,#2
mov a,ir_key
MUL ab
jmp @A+dptr
irkm: ;这里定义了共24个按键功能
ajmp irk00
ajmp irk01
ajmp irk02
ajmp irk03
ajmp irk04
ajmp irk05
ajmp irk06
ajmp irk07
ajmp irk08
ajmp irk09
ajmp irk10
ajmp irk11
ajmp irk12
ajmp irk13
ajmp irk14
ajmp irk15
ajmp irk16
ajmp irk17
ajmp irk18
ajmp irk19
ajmp irk20
ajmp irk21
ajmp irk22
ajmp irk23
ajmp irk24
ajmp irk25
ajmp irk26
irk00:
ljmp irk_ret
irk01:
mov ir_code,#0CEh
mov ir_temp,ir_key
ljmp irk_ret_abp
irk02:
mov ir_code,#0CEh
mov ir_temp,ir_key
ljmp irk_ret_abp
irk03:
mov ir_code,#0CEh
mov ir_temp,ir_key
ljmp irk_ret_abp
irk04:
mov ir_code,#0CEh
mov ir_temp,ir_key
ljmp irk_ret_abp
irk05:
mov ir_code,#0CEh
mov ir_temp,ir_key
ljmp irk_ret_abp
irk06:
mov ir_code,#0CEh
mov ir_temp,ir_key
ljmp irk_ret_abp
irk07:
mov ir_code,#0CEh
mov ir_temp,ir_key
ljmp irk_ret_abp
irk08:
mov ir_code,#0CEh
mov ir_temp,ir_key
ljmp irk_ret_abp
irk09:
mov ir_code,#0CEh
mov ir_temp,ir_key
ljmp irk_ret_abp
irk10:
mov ir_code,#0CEh
mov ir_temp,ir_key
ljmp irk_ret_abp
irk11: ;paly/stop
;mov a,driver_status
;cjne a,#021h,irk11_0
;mov driver_status,#031h
;ljmp irk_ret
;irk11_0:
mov a,audio_status
cjne a,#11h,irk11_1 ;如果正在播放--》stop
call csto
ljmp irk_ret
irk11_1:
cjne a,#12h,irk11_2 ;如果暂停--》play
call cres
ljmp irk_ret
irk11_2:
cjne a,#13h,irk11_3 ;如果停止--》play
mov next_track,#01h
call read_toc_cmd
call play_entire_cd_cmd
ljmp irk_ret
irk11_3:
;cjne a,#14h,irk11_4
mov next_track,#01h
call read_toc_cmd
call play_entire_cd_cmd
ljmp irk_ret
;irk11_4:
;ljmp irk_ret
irk12:
mov a,audio_status
cjne a,#11h,irk12_1 ;如果正在播放--》pause
call cpau
ljmp irk_ret
irk12_1:
cjne a,#12h,ikr12_2 ;如果暂停--》play
call cres
ljmp irk_ret
ikr12_2:
ljmp irk_ret
irk13: ;>>
call forward
ljmp irk_ret_abp
irk14: ;<<
call backward
ljmp irk_ret_abp
irk15:
mov a,audio_status
cjne a,#11h,irk15_1
call cnex
irk15_1:
ljmp irk_ret_abp
irk16:
mov a,audio_status
cjne a,#11h,irk16_1
call cpre
irk16_1:
ljmp irk_ret_abp
irk17:
clr ex1
mov r0,#090h
irk17_2:
Mov DPTR,#NUM16
mov a,dm_code
cjne a,#4,irk17_3
mov a,#0
irk17_3:
MOVC A,@A+DPTR
SETB DISP_E
mov LED_W,#11110111B
MOV LED_D,#00111001B ;c
call delay_1000us
mov LED_W,#11101111B
Mov LED_D,a ;笔划
call delay_1000us
clr disp_e
djnz r0,irk17_2
setb ex1
mov r1,#0aah
ljmp irk_ret_abp
irk18: ;Enter
ljmp irk_ret
irk18_0:
mov ir_temp,ir_key
ljmp irk_ret
irk19:
mov ir_temp,ir_key
ljmp irk_ret
irk20:
ljmp irk_ret
irk21:
;mov a,driver_status
;cjne a,#021h,irk21_0
mov driver_status,#0ffh
ljmp irk_ret
irk21_0:
mov ir_temp,ir_key
ljmp irk_ret
irk22:
;mov a,ir_code
mov a,play_mode
cjne a,#0bah,irk22_0
mov play_mode,#0ffh
ljmp irk_ret_abp
irk22_0:
mov ir_code,#0abh
ljmp irk_ret_abp
irk23: ;Repeat
mov a,ir_code
cjne a,#0eah,irk23_0 ; ea--循环判断值,ircode=eah 表示循环中
mov ir_code,#0ffh ;当第二次按下repeat 退出重复,ir_code=#0ffh
ljmp irk_ret_abp
irk23_0:
mov ir_code,#0eah
mov track_a,current_track
ljmp irk_ret_abp
irk24:
call ir_eject
ljmp irk_ret
irk25:
clr ea
call mode_sense_10
mov 44h,#11h
call v_change
;mov volume_1,#020h
;mov volume_2,#020h
call set_v
;call delay_100000us
call scmd
setb ea
call delay_100000us
ljmp irk_ret_abp
irk26:
clr ea
call mode_sense_10
mov 44h,#99h
call v_change
;call delay_100000us
call scmd
setb ea
call delay_100000us
ljmp irk_ret_abp
irvolumejudge: ;判断是否在改变音量
mov a,44h
cjne a,#11h,ivj1
ret
ivj1:
cjne a,#99h,ivj2
ret
ivj2:
call mode_sense_cmd_0e
ret
irk_ret: ;完全返回
mov ir_temp,ir_key
mov ir_key,#0ffh
mov ir_code,#0ffh
setb ea
ret
irk_ret_abp: ;不改变ir_code 返回
mov ir_temp,ir_key
mov ir_key,#0ffh
setb ea
ret
ir_a_b:
mov driver_status,#56h
mov track_a,#00h
mov track_b,#00h
mov ir_temp,#00h
mov ir_key,#00h
mov ir_num,#00h
track_a_loop:
setb ea
call ir_num_key_wait
acall ab_num_in
mov track_a,ir_num
acall disp_track_a
mov a,ir_temp
cjne a,#12h,abira1 ;ir enter
mov a,ir_num ;判断输入的track是否在范围内
cjne a,#00h,tnoca2
mov ir_num,#00h
mov driver_status,#055h
mov ir_temp,#0ffh
sjmp track_a_loop
tnoca2:
mov a,end_track
cjne a,ir_num,tnoca3
tnoca3:
jc tnoca4 ;超出
mov track_a,ir_num
mov ir_temp,#0ffh
mov ir_num,#00h
ajmp track_b_loop ;跳到b track输入
tnoca4:
mov ir_num,#00h
mov driver_status,#055h
mov ir_temp,#0ffh
setb disp_e
mov LED_W,#11100111B
MOV LED_D,#00000001B ;--
call delay_100000us
call delay_100000us
call delay_100000us
clr disp_e
sjmp track_a_loop
abira1:
cjne a,#15h,abira2 ;clr
mov track_a,#00h
mov ir_num,#00h
mov driver_status,#055h
mov ir_temp,#0ffh
sjmp track_a_loop
abira2:
cjne a,#11h,abira3 ;ir mode
mov ir_code,#0ffh
ret
abira3:
jb stop_key,track_a_loop
call delay_100000us
jb stop_key,track_a_loop
jnb stop_key,$
mov ir_code,#0ffh
ret
track_b_loop:
setb ea
call ir_num_key_wait
acall ab_num_in
mov track_b,ir_num
acall disp_track_b
mov a,ir_temp
cjne a,#12h,baira1 ;ir enter
mov a,ir_num ;判断输入的track是否在范围内
cjne a,#00h,tnocb2
mov ir_num,#00h
mov driver_status,#055h
mov ir_temp,#0ffh
sjmp track_b_loop
tnocb2:
mov a,end_track
cjne a,ir_num,tnocb3
tnocb3:
jc tnocb4 ;超出
mov track_b,ir_num
call a_b_start
mov ir_code,#0BAh ;标记0bah
mov ir_key,#0ffh
ret
tnocb4:
mov ir_num,#00h
mov driver_status,#055h
mov ir_temp,#0ffh
setb disp_e
mov LED_W,#00111111B
MOV LED_D,#00000001B ;--
call delay_100000us
call delay_100000us
call delay_100000us
clr disp_e
sjmp track_b_loop
baira1:
cjne a,#15h,baira2 ;clr
mov track_a,#00h
mov ir_num,#00h
mov driver_status,#055h
mov ir_temp,#0ffh
sjmp track_b_loop
baira2:
cjne a,#11h,baira3 ;ir mode
mov ir_code,#0ffh
ret
baira3:
jb stop_key,track_b_loop
call delay_100000us
jb stop_key,track_b_loop
jnb stop_key,$
mov ir_code,#0ffh
ret
ab_num_in:
mov a,ir_code
cjne a,#0ceh,ab_num_ret
mov a,ir_temp
cjne a,#0ah,irab0
mov ir_temp,#0h
irab0:
mov a,driver_status
cjne a,#55h,ab_num_56
mov ir_num,ir_temp
mov driver_status,#56h
sjmp ab_num_ret
ab_num_56:
mov b,#10
mov a,ir_num
mul ab
add a,ir_temp
mov ir_num,a
mov driver_status,#55h
ab_num_ret:
mov ir_code,#0ffh
ret
disp_track_a:
call s_ab_fmt
call s_a
setb disp_e
mov LED_W,#11111111B
MOV LED_D,#00000000B ;
call delay_1000us
mov LED_W,#11111110B
MOV LED_D,#01110111B ;A
call delay_1000us
clr disp_e
acall disp_ab
ret
disp_track_b:
call s_ab_fmt
call s_b
setb disp_e
mov LED_W,#11111110B
MOV LED_D,#01111100B ;b
call delay_1000us
clr disp_e
acall disp_ab
ret
disp_ab:
Mov DPTR,#NUM
mov a,track_a
call HEXtodec
call disp_m
mov a,track_b
call HEXtodec
call disp_s
setb disp_e
mov LED_W,#11011111B
MOV LED_D,#01000000B ;-
call delay_1000us
mov LED_W,#11111111B
MOV LED_D,#00000000B ;
call delay_1000us
call delay_1000us
call delay_1000us
call delay_1000us
clr disp_e
ret
a_b_start:
mov a,track_a
cjne a,track_b,abdiff
;;a=b
cjne a,end_track,abdiffe
;a=end_track
mov abb_m,end_m
mov abb_s,end_s
mov aba_t,track_a
mov next_track,track_a
sjmp play_aba
abdiffe:
mov next_track,track_a
inc next_track
call read_toc_cmd
mov abb_m,start_m
mov abb_s,start_s
mov next_track,track_a
mov aba_t,track_a
sjmp play_aba
abdiff: ;a<>b
jc bmorea
mov a,track_a ;a>b
cjne a,end_track,abddera
mov abb_m,end_m
mov abb_s,end_s
mov aba_t,track_b
sjmp play_aba
abddera:
mov next_track,track_a
inc next_track
call read_toc_cmd
mov abb_m,start_m
mov abb_s,start_s
mov aba_t,track_b
sjmp play_aba
bmorea: ;a<b
mov a,track_b
cjne a,end_track,abdderb
mov abb_m,end_m
mov abb_s,end_s
mov aba_t,track_a
sjmp play_aba
abdderb:
mov next_track,track_b
inc next_track
call read_toc_cmd
mov abb_m,start_m
mov abb_s,start_s
mov aba_t,track_a
sjmp play_aba
play_aba:
mov next_track,aba_t
call read_toc_cmd
call play_entire_cd_cmd
call read_subchan_cmd
;ret
b_msfdec: ;最终-1,解决显示问题
mov a,abb_s
cjne a,#00h,bmsfd1
mov abb_s,#59
dec abb_m
bmsfd1:
dec abb_s
call disp_x
mov ir_code,#0bah
mov play_mode,#0bah
ret
ir_track:
mov driver_status,#55h
ir_loop_t:
mov a,ir_temp
cjne a,#0ah,irttv
mov ir_temp,#0h
irttv:
mov ir_num,ir_temp
ir_tloop1:
mov ir_code,#0ffh
call ir_track_disp ;;;;;;;;;;;;
call s_ir_track
mov driver_status,#56h
call ir_num_key_wait ;红外数字键有效
ljmp ir_t_key
iloopre:
mov a,ir_code
cjne a,#0ceh,ir_tloop1
mov a,ir_temp ;;;;;;;;;;;;;;;
cjne a,#0ah,irttv2
mov ir_temp,#0h
irttv2:
mov b,#10
mov a,ir_num
mul ab
add a,ir_temp
mov ir_num,a
ir_tloop2:
mov ir_code,#0ffh
call ir_track_disp ;;;;;;;;;;;;
call s_ir_track
mov driver_status,#55h
call ir_num_key_wait
ljmp ir_t_key
iloop2re:
mov a,ir_code
cjne a,#0ceh,ir_tloop2
mov ir_code,#0ffh
sjmp ir_loop_t
ir_t_key: ;功能键等待
mov a,ir_temp
cjne a,#12h,irtka0 ;ir enter
sjmp irtplay
irtka0:
cjne a,#0bh,irtka1 ;ir play
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -