📄 cdc_fw_v13_asm.asm
字号:
sjmp irtplay
irtka1:
cjne a,#15h,irtka2 ;ir clr
setb disp_e
mov LED_W,#11100111B
MOV LED_D,#00001000B ;--
call delay_100000us
call delay_100000us
clr disp_e
mov ir_num,#00h
mov ir_temp,#00h
ljmp ir_tloop2
irtka2:
cjne a,#11h,irtka3 ;ir exit
ljmp ir_t_ret
irtka3:
jb play_key,irtsp ;play
call delay_10ms
jb play_key,irtsp
jnb play_key,$
ljmp irtplay
irtsp:
jb stop_key,irtk1 ;stop
call delay_10ms
jb stop_key,irtk1
jnb stop_key,$
ljmp ir_t_ret
irtk1:
mov a,driver_status
cjne a,#56h,irtk22
ljmp iloopre
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
clr ea
setb disp_e
mov LED_W,#11111011B
MOV LED_D,#10000000B ;.
call delay_100000us
clr disp_e
call read_toc_cmd
setb disp_e
mov LED_W,#11110011B
MOV LED_D,#10000000B ;..
;call delay_100000us
clr disp_e
call play_entire_cd_cmd
setb disp_e
mov LED_W,#11100011B
MOV LED_D,#10000000B ;...
call delay_100000us
mov LED_W,#11000011B
MOV LED_D,#10000000B ;....
call delay_100000us
clr disp_e
setb ea
ljmp ir_t_ret
irover:
setb disp_e
mov LED_W,#11100111B
MOV LED_D,#01000000B ;--
call delay_100000us
call delay_100000us
call delay_100000us
clr disp_e
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:
setb ea
Mov DPTR,#NUM16
mov a,ir_num
call hextodec
SETB DISP_E
mov LED_W,#11101111B ;选择位
mov a,a_bit
MOVC A,@A+DPTR
Mov LED_D,a ;笔划
call delay_1000us
Mov LED_w,#0FFH
Mov LED_D,#0H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;十位
;;;;;;;;;;;;;;;;;;;
mov LED_W,#11110111B ;选择块
mov a,b_bit
MOVC A,@A+DPTR
Mov LED_D,a ;笔划
call delay_1000us
Mov LED_w,#0FFH
Mov LED_D,#0H
mov LED_W,#11011011B
MOV LED_D,#01000000B ; -
call delay_1000us
Mov LED_w,#0FFH
Mov LED_D,#0H
clr disp_e
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;改变显示模式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
change_disp:
setb ea
mov r1,#0h
mov a,DM_code
cjne a,#0,DM_a
ljmp dm_0a
dm_a:
cjne a,#1,DM_b
ljmp dm_1a
dm_b:
cjne a,#2,DM_c
ljmp dm_2za
dm_c:
cjne a,#3,DM_d
ljmp dm_3a
dm_d:
mov DM_code,#0
sjmp change_disp
;;;;;;;;;;;;;;;;;;;;;;;;;;;
DM_0:
;call delay_10ms
jb play_key,DMRET0 ;
sjmp dm_0a
DMRET0:
ljmp change_disp
DM_0a:
setb DISP_E
mov LED_W,#11110111B
MOV LED_D,#00111001B ;c
call delay_1000us
mov LED_W,#11101111B
MOV LED_D,#10111111B ;0.
call delay_1000us
CLR DISP_E
jnb play_key,DM_0a
inc DM_code
DM0_loop: ;正计数模式
call key_wait
call disc_wait
mov a,show_all
cjne a,#0a0h,dm01
jmp DM0_loop
dm01:
call disp_m0
call s_c0
cjne r1,#0aah,dm0a ;r1=0aah 表示显示模式要改变
sjmp change_disp
dm0a:
sjmp DM0_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 disp_info
call lcm_disp
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DM_1:
;call delay_10ms
jb play_key,dm1bc
sjmp dm_1a
dm1bc:
ljmp change_disp
DM_1a:
setb DISP_E
mov LED_W,#11110111B
MOV LED_D,#00111001B ;c
call delay_1000us
mov LED_W,#11101111B
MOV LED_D,#10000110B ;1.
call delay_1000us
CLR DISP_E
jnb play_key,DM_1a
;call read_toc_cmd
;call read_subchan_cmd
;mov d_track,current_track
mov dm_code,#2
DM1_loop: ;;;倒计时模式
call key_wait
call disc_wait
mov a,show_all
cjne a,#0a0h,dm11
jmp DM1_loop
dm11:
;call read_subchan_cmd
;mov a,audio_status
call toc_rn
call disp_m1
call s_c1
cjne r1,#0aah,dm1a
ljmp change_disp
dm1a:
sjmp DM1_loop
dm1b:
ret
disp_m1:
call m1_ms
mov e_t,current_track
mov e_m,d_m
mov e_s,d_s
call disp_info
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DM_2z:
;call delay_10ms
jb play_key,dm2zz
sjmp dm_2za
dm2zz:
ljmp change_disp
DM_2za:
setb DISP_E
mov LED_W,#11110111B
MOV LED_D,#00111001B ;c
call delay_1000us
mov LED_W,#11101111B
MOV LED_D,#11011011B ;2.
call delay_1000us
CLR DISP_E
jnb play_key,DM_2za
;call read_toc_cmd
;call read_subchan_cmd
mov d_track,current_track
mov dm_code,#3
DM2_loop: ;;;单曲正计时模式
call key_wait
call disc_wait
mov a,show_all
cjne a,#0a0h,dm21
jmp DM2_loop
dm21:
;call read_subchan_cmd
;mov a,audio_status
call toc_rn
call disp_m2z
call s_c2
cjne r1,#0aah,dm2a
ljmp change_disp
dm2a:
sjmp DM2_loop
dm2b:
ret
disp_m2Z:
call info_mode_2
call disp_info_2
call lcm_disp
ret
debug0:
setb DISP_E
mov LED_W,#11110111B
MOV LED_D,#10111110B ;c
call delay_1000us
clr disp_e
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DM_3:
;call delay_10ms
jb play_key,dm3bc
sjmp dm_3a
dm3bc:
ljmp change_disp
DM_3a:
setb DISP_E
mov LED_W,#11110111B
MOV LED_D,#00111001B ;c
call delay_1000us
mov LED_W,#11101111B
MOV LED_D,#11001111B ;3.
call delay_1000us
CLR DISP_E
jnb play_key,DM_3a
;call read_toc_cmd
;call read_subchan_cmd
mov d_track,current_track
mov dm_code,#4
DM3_loop: ;;;单曲倒计时模式
call key_wait
call disc_wait
mov a,show_all
cjne a,#0a0h,dm31
jmp DM3_loop
dm31:
call toc_rn
call disp_m3
call s_c3
cjne r1,#0aah,dm3a
ljmp change_disp
dm3a:
sjmp DM3_loop
dm3b:
ret
disp_m3:
call m3_ms
mov e_t,current_track
mov e_m,d_m
mov e_s,d_s
call disp_info
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
disp_info_2:
mov e_t,current_track
mov e_s,d_s
mov e_m,d_m
call disp_info
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
acall LCM_Sb
acall LCM_Sa
ret
LCM_M:
mov dptr,#lcm_num
mov a,e_m
call hextodec
acall LCM_Mb
acall LCM_Ma
ret
LCM_Track:
mov dptr,#lcm_num
mov a,e_t
call hextodec
acall LCM_Tb
acall LCM_Ta
ret
LCM_Sb:
mov a,#0Eh ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,b_bit
acall tc
ret
LCM_Sa:
mov a,#0Fh ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,a_bit
acall tc
ret
LCM_Mb:
mov a,#0Bh ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,b_bit
acall tc
ret
LCM_Ma:
mov a,#0Ch ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,a_bit
acall tc
ret
LCM_Tb:
mov a,#07h ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,b_bit
acall tc
ret
LCM_Ta:
mov a,#08h ;设置DDRAM地址
ORL A,#80H ;LCM上的物理地址
CALL LCDWC ;写地址
mov a,a_bit
acall 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_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -