📄 cdc_fw_vl21.asm
字号:
irtk22:
ljmp iloop2re
irtplay:
mov a,ir_num
cjne a,#00h,irpccc
mov ir_temp,#00h
ljmp ir_track
irpccc:
mov a,end_track
cjne a,ir_num,irol
ljmp play_ir_track
irol:
jc irover
play_ir_track:
mov next_track,ir_num
call read_toc_cmd
call play_entire_cd_cmd
setb ea
ljmp ir_t_ret
irover:
mov ir_num,#00h
mov ir_temp,#00h
ljmp ir_tloop2
ir_t_ret:
mov ir_temp,#00h
mov ir_code,#0ffh
mov driver_status,#0ffh
ret
ir_track_disp:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;改变显示模式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
change_disp:
mov a,DM_code
cjne a,#0h,DM_a
mov dm_code,#1h
ret
dm_a:
cjne a,#1h,DM_b
mov dm_code,#2h
ret
dm_b:
cjne a,#2h,DM_c
mov dm_code,#3h
ret
dm_c:
cjne a,#3h,DM_d
mov dm_code,#0h
ret
dm_d:
mov DM_code,#0h
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;
play_LOOP:
DM_loop:
call key_wait
call disc_wait
mov a,show_all
cjne a,#0a0h,DM01
jmp DM_loop
dm01:
mov a,dm_code
dm0a1:
cjne a,#0h,dmc1
;call toc_rn
call disp_m0 ;正计数模式
call s_c0
jmp dm0a
dmc1:
mov a,dm_code
cjne a,#1h,dmc2
call toc_rn
call disp_m1 ;倒计时
call s_c1
jmp dm0a
dmc2:
mov a,dm_code
cjne a,#2h,dmc3
call toc_rn
call disp_m2z ;单曲正计时
call s_c2
jmp dm0a
dmc3:
mov a,dm_code
cjne a,#3h,dmc4
call toc_rn
call disp_m3 ;单曲倒计时
call s_c3
jmp dm0a
dmc4:
;mov dm_code,#0h
dm0a:
sjmp DM_loop
;--------------------------------------
disp_m0:
mov e_t,current_track
mov e_m,current_m
mov e_s,current_s
mov d_m,current_m
mov d_s,current_s
call lcm_disp
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
disp_m1:
call m1_ms
mov e_t,current_track
mov e_m,d_m
mov e_s,d_s
call lcm_disp
ret
m1_ms: ;;;;;倒计时算法
mov a,end_m
cjne a,current_m,M1_subb
mov a,end_s
subb a,current_s
mov d_s,a
mov d_m,#0
sjmp m1_ret
dm1_2:
mov a,end_s
mov psw,#0h
cjne a,current_s,dm1_subb
mov d_s,#0h
sjmp m1_ret
dm1_subb:
jc s_subb_m1 ; end_s<current_s
jnc s_subb_m2 ; end_s>currnet_s
s_subb_m1:
mov a,#61
subb a,current_s
add a,end_s
mov d_s,a
dec d_m
sjmp m1_ret
s_subb_m2:
mov a,end_s
subb a,current_s
mov d_s,a
sjmp m1_ret
M1_subb:
mov a,end_m
subb a,current_m
mov d_m,a
sjmp dM1_2
m1_ret:
ret
toc_rn:
mov a,current_track
cjne a,d_track,toc_read
ret
toc_read:
mov next_track,current_track
call read_toc_cmd
mov d_track,current_track
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
disp_m2Z:
call info_mode_2
mov e_t,current_track
mov e_m,d_m
mov e_s,d_s
call lcm_disp
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
disp_m3:
call m3_ms
mov e_t,current_track
mov e_m,d_m
mov e_s,d_s
call lcm_disp
ret
m3_ms: ;;;;;倒计时算法
mov a,n_m
cjne a,current_m,dm3_2
mov a,n_s
subb a,current_s
mov d_s,a
mov d_m,#0
sjmp m3_ret
dm3_2:
mov a,n_s
mov psw,#0h
cjne a,current_s,dm3_subb
mov d_s,#0h
sjmp M3_subb
dm3_subb:
jc m3_subb_1 ; n_s<current_s
jnc m3_subb_2 ; n_s>current_s
m3_subb_1:
mov a,#61
subb a,current_s
add a,n_s
mov d_s,a
mov a,n_m
subb a,current_m
mov d_m,a
dec d_m
sjmp m3_ret
m3_subb_2:
mov a,n_s
subb a,current_s
mov d_s,a
sjmp M3_subb
M3_subb:
mov a,n_m
subb a,current_m
mov d_m,a
;sjmp dM3_2
m3_ret:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;播放显示
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;
;LCM显示
;;;;;;;;;;;;;
S_start:
clr ea
setb disp_e
mov r5,#16
mov a,#00h ;设置DDRAM地址
ORL A,#80H
CALL LCDWC
mov dptr,#M_start
mov a,#0
mov r6,#0h
call lcm_string
CLR disp_e
setb ea
ret
m_start:
DB 'Starting... '
LCM_string:
movc a,@a+dptr
CALL LCDWD
dec r5
cjne r5,#0,tc2
sjmp rrt
tc2:
inc r6
mov a,r6
sjmp LCM_string
rrt:
ret
LCM_disp:
CLR EA ;关中断
setb disp_e ;开显示控制
call disp_mh ;显示 : 号
call LCM_Track ;显示曲目
call s_clr_tt ;空格
call LCM_M ;显示分
call LCM_S ;显示妙
clr disp_e ;关显示控制
setb ea ;开中断
ret
s_clr_tt:
mov r5,#1
mov a,#0Ah ;设置DDRAM地址
ORL A,#80H
CALL LCDWC
mov dptr,#M_tt
mov a,#0
mov r6,#0h
call lcm_string
ret
M_tt:
DB ' '
disp_MH:
mov a,#0Dh ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,#':'
CALL LCDWD
ret
LCM_S:
mov dptr,#lcm_num
mov a,e_s
call hextodec
call LCM_Sb
call LCM_Sa
ret
LCM_M:
mov dptr,#lcm_num
mov a,e_m
call hextodec
call LCM_Mb
call LCM_Ma
ret
LCM_Track:
mov dptr,#lcm_num
mov a,e_t
call hextodec
call LCM_Tb
call LCM_Ta
ret
LCM_Sb:
mov a,#0Eh ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,b_bit
call tc
ret
LCM_Sa:
mov a,#0Fh ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,a_bit
call tc
ret
LCM_Mb:
mov a,#0Bh ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,b_bit
call tc
ret
LCM_Ma:
mov a,#0Ch ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,a_bit
call tc
ret
LCM_Tb:
mov a,#07h ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,b_bit
call tc
ret
LCM_Ta:
mov a,#08h ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,a_bit
call tc
ret
tc:
movc a,@a+dptr
call lcdwd
ret
lcm_num:
db '0123456789'
S_repeat_ab:
call s_rpt
mov a,track_a
call hextodec
mov a,#48h ;设置DDRAM地址
acall s_atb
mov a,#49h ;设置DDRAM地址
acall s_ata
CLR EA
setb disp_e
mov a,#4ah ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,#'-'
CALL LCDWD
clr disp_e
setb ea
mov a,track_b
call hextodec
mov a,#4bh ;设置DDRAM地址
acall s_atb
mov a,#4ch ;设置DDRAM地址
acall s_ata
ret
S_aTb:
CLR EA
setb disp_e
mov dptr,#lcm_num2
;mov a,#07h ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,b_bit
call tc
clr disp_e
setb ea
ret
S_aTa:
CLR EA
setb disp_e
mov dptr,#lcm_num2
;mov a,#08h ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,a_bit
call tc
clr disp_e
setb ea
ret
lcm_num2:
db '0123456789'
S_repeat:
call s_rpt
mov a,track_a
call hextodec
mov dptr,#lcm_num
mov a,#49h ;设置DDRAM地址
acall s_atb
mov a,#4ah ;设置DDRAM地址
acall s_ata
ret
S_play:
clr ea
;mov a,ir_code
mov a,play_mode
cjne a,#0bah,s_py1
call s_repeat_ab
setb ea
ret
s_PY1:
mov a,ir_code
cjne a,#0eah,s_py2
call s_repeat
setb ea
ret
s_py2:
call s_playing
;call s_volume ;显示音量值点阵图
setb ea
ret
S_CDrom:
clr ea
setb disp_e
mov r5,#16
mov a,#00h ;设置DDRAM地址
ORL A,#80H
CALL LCDWC
mov dptr,#M_cdrom
mov a,#0
mov r6,#0h
call lcm_string
CLR disp_e
setb ea
ret
m_cdrom:
DB ' CD-ROM PLAYER '
s_design:
clr ea
setb disp_e
mov r5,#16
mov a,#40h ;设置DDRAM地址
ORL A,#80H
CALL LCDWC
mov dptr,#M_design
mov a,#0
mov r6,#0h
call lcm_string
CLR disp_e
setb ea
ret
m_design:
DB 'Design By Wu_Wei '
s_IDE_error1:
clr ea
setb disp_e
mov r5,#16
mov a,#00h ;设置DDRAM地址
ORL A,#80H
CALL LCDWC
mov dptr,#IDE_error1
mov a,#0
mov r6,#0h
call lcm_string
CLR disp_e
setb ea
ret
IDE_error1:
DB 'IDE Connect Err.'
S_IDE_error2:
clr ea
setb disp_e
mov r5,#16
mov a,#40h ;设置DDRAM地址
ORL A,#80H
CALL LCDWC
mov dptr,#IDE_error2
mov a,#0
mov r6,#0h
call lcm_string
CLR disp_e
setb ea
ret
IDE_error2:
DB 'Please check IDE'
S_IDE_error:
call s_IDE_error1
call s_IDE_error2
ret
s_MCU_ST:
clr ea
setb disp_e
mov r5,#16
mov a,#80h ;设置DDRAM地址
ORL A,#80H
CALL LCDWC
mov dptr,#M_MCu
mov a,#0
mov r6,#0h
call lcm_string
CLR disp_e
setb ea
ret
M_MCu:
DB 'Checking IDE... '
s_playing:
clr ea
setb disp_e
mov r5,#14
mov a,#40h ;设置DDRAM地址
ORL A,#80H
CALL LCDWC
mov dptr,#M_play
mov a,#0
mov r6,#0h
call lcm_string
;call s2spec ;显示两个空格
CLR disp_e
setb ea
ret
m_play:
DB 'Playing... '
s2spec:
mov a,#4CH
ORL a,#80H
call LCDWC
mov a,#' '
call LCDWD
mov a,#4DH
ORL a,#80H
call LCDWC
mov a,#' '
call LCDWD
ret
S_RPT:
clr ea
setb disp_e
mov r5,#14
mov a,#40h ;设置DDRAM地址
ORL A,#80H
CALL LCDWC
mov dptr,#M_rpt
mov a,#0
mov r6,#0h
call lcm_string
CLR disp_e
setb ea
ret
m_rpt:
DB 'Repeat: '
; 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -