⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdc_fw_vl21.asm

📁 开发环境是是KEIL UV3的IDE环境 使用汇编语言 电路图因为硬盘烧了 丢失了 郁闷ing
💻 ASM
📖 第 1 页 / 共 5 页
字号:
  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 + -