📄 cdc_fw_v13_asm.asm
字号:
mov a,#0
call set_v
ret
v_dn10:
mov a,volume_1
subb a,#10
call set_v
ret
set_v:
mov volume_1,a
mov volume_2,a
mov r0,#0c1h
mov @r0,volume_1
mov r0,#0c3h
mov @r0,volume_2
ret
scmd: ;改变音量
clr ea
call mode_select_cmd
call send_data
;call skip_rest_of_packet2
setb ea
ret
send_data:
mov r1,#0B0h
mov r0,#12
set_head_data_loop:
mov a,@r1
inc r1
mov b,@r1
acall set_data
inc r1
call delay_1000us
djnz r0,set_head_data_loop
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Key control 按键功能
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY_DEL:
mov r6,#200
DEL1:
mov r7,#20
DEL2:
djnz r6,DEL2
djnz r7,DEL1
ret
key_wait_s:
mov a,ir_key
cjne a,#18h,kwsa0
call ir_eject
mov ir_key,#0ffh
ret
kwsa0:
jnb stop_key,eject_s
ret
eject_s:
call delay_10ms
jb stop_key,esret
call e_cd
esret:
ret
key_wait:
setb ea
call ir_key_wait ;查询有无红外线码输入
jnb play_key,play_cdd
jnb pause_key,pause_cdd
jnb pre_key,prevous_d
jnb next_key,next_d
jnb stop_key,Stop_cdd
mov a,ir_code
cjne a,#0ceh,kwtab
call s_clr ;清屏LCM
call s_space
call ir_track
ret
kwtab:
cjne a,#0abh,kwtret
call ir_a_b
kwtret:
ret
play_cdd: ;播放按键
call play_cd
ret
pause_cdd: ;停止按键
call pause_cd
ret
prevous_d: ;上一曲按键
call delay_10ms
caod:
call delay_10ms
jnb pre_key,bwd_cd
call prevous
ret
bwd_cd:
call delay_100000us
jb pre_key,caod
call delay_100000us
jb pre_key,caod
call delay_100000us
jb pre_key,caod
call delay_100000us
jb pre_key,caod
call backward
call fb_msf_play
ret
next_d: ;下一曲按键
call delay_10ms
jnb next_key,fwd_cd
JHY:
call next
ret
fwd_cd:
call delay_100000us
jb next_key,JHY
call delay_100000us
jb next_key,JHY
call delay_100000us
jb next_key,JHY
call delay_100000us
jb next_key,JHY
call forward
call fb_msf_play
ret
stop_cdd: ;停止
call delay_10ms
jb stop_key,stopret
call stop_cd
jb stop_key,stopret
call eject_cd
stopret:
ret
play_cd_s: ;播放指定曲
call delay_10ms
jnb play_key,Cnex2
cnex1:
ret
Cnex2:
mov r3,#00h
inc r3
mov next_track,r3
call read_toc_cmd
call play_entire_cd_cmd
r_ne2:
mov packet_6,#00h
sjmp cnex1
play_cd: ;播放
call delay_10ms
jnb play_key,PR_D
sjmp PR_D3
PR_D:
call read_subchan_cmd
mov a,audio_status
cjne a,#12h,PR_D1
call resume_cd
sjmp PR_D3
PR_D1:
cjne a,#11h,PR_D2
call delay_10ms
call delay_10ms
call delay_10ms
jnb play_key,PR_D4
sjmp PR_D3
PR_D4:
mov r1,#0aaH ;显示模式转换标志
sjmp pr_d3
PR_D2:
call play_cd_s
PR_D3:
ret
prevous: ;上一曲
;acall delay_10ms
;jnb pre_key,CPRE
;ret
CPRE:
mov a,current_track
cjne a,#01,maop
mov a,end_track
inc a
;sjmp r_pe
maop:
dec a
mov next_track,a
call read_toc_cmd
call play_entire_cd_cmd
r_pe:
mov packet_6,#00h
ret
next: ;下一曲
;acall delay_10ms
;jnb next_key,Cnex
;ret
Cnex:
mov a,current_track
cjne a,end_track,xich
mov a,#00h
xich:
inc a
mov next_track,a
call read_toc_cmd
call play_entire_cd_cmd
r_ne:
mov packet_6,#00h
ret
pause_cd: ;暂停
call delay_10ms
jnb pause_key,Cpau
ret
Cpau:
mov a,#0ffh ;set byte counter register
call set_cyl_low_register ;(set it to full on.. it doesn't matter coz
call set_cyl_high_register ;DRQ controls the feed)
call do_packet_cmd
mov packet_cmd,#4Bh
mov packet_1,#00000000b ;MSF=1
mov packet_4,#000h ;allocation length
mov packet_8,#000h ;(again, set it to full on)
call send_packet
jnb STATUS_REG_DRQ,PC1
PC1:
ret
stop_cd: ;停止
call delay_10ms
jnb stop_key,Csto
ret
csto:
mov a,#0ffh
call set_cyl_low_register
call set_cyl_high_register
call do_packet_cmd
mov packet_cmd,#4Eh
mov packet_1,#00000000b
call send_packet
mov next_track,start_track
SC3:
mov toc_times,#5
ret
forward: ;快进
call s_forward
mov pause_da,#07h ;速度初始值
call read_subchan_cmd
fo_start:
call track_inc
call s_msf_pn
jnb play_key,fo_play_ret
jnb stop_key,fo_cancel
jnb next_key,cf_speed ;改变速度
;sjmp cf_speed
csfor:
mov a,ir_key
cjne a,#0bh,ir_fora ;判断遥控有无输入
sjmp ir_froward_p ;再按下>>键,play
ir_fora:
cjne a,#12h,ir_forb
sjmp ir_froward_p ;再按下enter键,play
ir_forb:
cjne a,#0dh,ir_forc
sjmp ir_f_spd ;再按下>>键,改变速度
ir_forc:
cjne a,#11h,fo_start ;mode 退出
sjmp ir_for_ret
fo_play_ret:
call delay_10ms
jb play_key,fo_start
ir_froward_p:
call fb_msf_play
;call read_subchan_cmd
mov next_track,current_track
call read_toc_cmd
ret
fo_cancel:
call delay_10ms
jb stop_key,fo_start
jnb stop_key,$
ir_for_ret:
call read_subchan_cmd
mov ir_key,#0ffh
ret
cf_speed:
call delay_10ms
jb next_key,csfor
jnb next_key,$
ir_f_spd:
mov a,pause_da
cjne a,#1,cfsd1
mov pause_da,#07h ;速度最快为1,否则为7
mov ir_key,#0ffh
sjmp fo_start
cfsd1:
dec pause_da
dec pause_da ;改变速度值
mov ir_key,#0ffh
sjmp fo_start
track_inc:
mov a,current_m
cjne a,n_m,time_inc
mov a,current_s
cjne a,n_s,time_inc
mov a,current_track
cjne a,end_track,trackil
setb disp_e
mov LED_W,#11011111B
MOV LED_D,#00001000B ;_
call delay_1000us
call delay_1000us
clr disp_e
ret
trackil:
inc current_track
mov next_track,current_track
call read_toc_cmd
sjmp track_inc
time_inc:
mov a,current_s
cjne a,#60,c_s_ad ;当前秒是60?
mov current_s,#0h
mov a,current_m
cjne a,end_m,c_m_ad
mov current_m,end_m
c_m_ad:
inc current_m
ret
c_s_ad:
mov a,current_s
cjne a,end_s,c_s_cd2
mov a,current_m
cjne a,end_m,c_s_cd2
mov current_s,end_s
ret
c_s_cd2:
inc current_s
ret
ret
S_msf_PN:
push acc
;mov pause_da,#07h ;快进速度
mov pause_db,pause_da
mov a,dm_code
cjne a,#1,MSFPN_1
PNM0:
call disp_m0
djnz pause_db,PNM0
pop acc
ret
MSFPN_1:
cjne a,#2,MSFPN_2
PNM1:
call disp_m1
djnz pause_db,PNM1
pop acc
ret
MSFPN_2:
cjne a,#3,MSFPN_3
PNM2:
call disp_m2z
djnz pause_db,PNM2
pop acc
ret
MSFPN_3:
cjne a,#4,MSFPN_4
PNM3:
call disp_m3
djnz pause_db,PNM3
pop acc
ret
MSFPN_4:
pop acc
ret
backward: ;快退
call s_backward
mov pause_da,#07h ;速度值
call read_subchan_cmd
ba_start:
call track_dec
call s_msf_pn
jnb play_key,ba_play_ret
jnb stop_key,ba_cancel
jnb pre_key,cb_speed
csbak:
mov a,ir_key
cjne a,#0bh,ir_baka ;判断遥控有无输入
sjmp ir_bakward_p ;按下>键,play
ir_baka:
cjne a,#12h,ir_bakb
sjmp ir_bakward_p ;再按下enter键,play
ir_bakb:
cjne a,#0eh,ir_bakc
sjmp ir_b_spd ;再按下<<键,改变速度
ir_bakc:
cjne a,#11h,ba_start ;mode 退出
sjmp ir_bak_ret
sjmp ba_start
ba_play_ret:
call delay_10ms
jb play_key,ba_start
jnb play_key,$
ir_bakward_p:
call fb_msf_play
;call read_subchan_cmd
mov next_track,current_track
call read_toc_cmd
ret
ba_cancel:
call delay_10ms
jb stop_key,ba_start
jnb stop_key,$
ir_bak_ret:
call read_subchan_cmd
mov ir_key,#0ffh
ret
cb_speed:
call delay_10ms
jb pre_key,csbak
jnb pre_key,$
ir_b_spd:
mov a,pause_da
cjne a,#1,cbsd1
mov pause_da,#07h ;速度最快为1,否则为7
mov ir_key,#0ffh
sjmp ba_start
cbsd1:
dec pause_da
dec pause_da ;改变速度值
mov ir_key,#0ffh
sjmp ba_start
track_dec:
mov a,current_s
cjne a,start_s,time_dec
mov a,current_m
cjne a,start_m,time_dec
mov a,current_track
cjne a,#1,Trac_d1
setb disp_e
mov LED_W,#11111011B
MOV LED_D,#00001000B ;_
call delay_1000us
call delay_1000us
clr disp_e
ret
trac_d1:
dec current_track
mov next_track,current_track
call read_toc_cmd
sjmp time_dec
time_dec:
mov a,current_s
cjne a,#0,c_s_dec
mov a,current_m
cjne a,#0,c_m_dec
mov current_s,#0
mov current_m,#0
ret
c_s_dec:
dec current_s
ret
c_m_dec:
dec current_m
mov current_s,#59
ret
eject_cd: ;出盘
call delay_100000us
call delay_100000us
call delay_100000us
jnb stop_key,e_cd
ret
e_cd:
call mode_sense_cmd
mov a,media_type
cjne a,#71H,e_cd_out
ljmp e_cd_in
e_cd_out:
call tray_out
mov current_s,#0
mov d_s,#0
mov current_m,#0
mov d_m,#0
ljmp ee_end
e_cd_in:
call tray_in
call eje_disp
ee_end:
ret
ir_eject: ;红外线出盘指令具体
call mode_sense_cmd
mov a,media_type
cjne a,#71H,ir_e_cd_out
sjmp ir_e_cd_in
ir_e_cd_out:
call t_out
mov current_s,#0
mov d_s,#0
mov current_m,#0
mov d_m,#0
sjmp ir_ee_end
ir_e_cd_in:
call t_in
call eje_disp
ir_ee_end:
mov toc_times,#5
ret
resume_cd: ;恢复播放
call delay_10ms
jnb play_key,Cres
ret
Cres:
mov a,#0ffh ;set byte counter register
call set_cyl_low_register ;(set it to full on.. it doesn't matter coz
call set_cyl_high_register ;DRQ controls the feed)
call do_packet_cmd
mov packet_cmd,#4Bh
mov packet_1,#00000000b ;MSF=1
mov packet_4,#000h ;allocation length
mov packet_8,#001h ;(again, set it to full on)
call send_packet
jnb STATUS_REG_DRQ,d3
d3:
ret
Tray_out: ;出盘指令
call delay_10ms
jnb stop_key,t_out
ret
t_out:
call s_tray_out
SETB DISP_E
mov LED_W,#11111110B
MOV LED_D,#00111111B ;O
clr disp_e
mov a,#0ffh ;set byte counter register
call set_cyl_low_register ;(set it to full on.. it doesn't matter coz
call set_cyl_high_register ;DRQ controls the feed)
call do_packet_cmd
mov packet_cmd,#1bh
mov packet_1,#00000000b ;
mov packet_4,#002h ;
mov packet_8,#000h ;
call send_packet
jb STATUS_REG_DRQ,dout
dout:
ret
Tray_in: ;进盘指令
call delay_10ms
jnb stop_key,t_in
ret
t_in:
call s_tray_in
SETB DISP_E
mov LED_W,#11111110B
MOV LED_D,#00111001B ;c
clr disp_e
mov a,#0ffh ;set byte counter register
call set_cyl_low_register ;(set it to full on.. it doesn't matter coz
call set_cyl_high_register ;DRQ controls the feed)
call do_packet_cmd
mov packet_cmd,#1bh
mov packet_1,#00000000b ;
mov packet_4,#003h ;
mov packet_8,#000h ;
call send_packet
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -