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

📄 recplay.asm

📁 录音机控制51源程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		   clr	   rec_cbit
		   mov	   play_mem,#2
		   mov	   play_m,#0
		   lcall   jxctl
play_ctl3:         ret
;
;
                   nop
		   nop
		   ljmp    start
		   nop
		   nop
;
ffw_ctl:
                             	  ;快进控制
		   jb	   p_sw,w_c0
		   setb    ffw_cbit
		   clr	   rew_cbit
		   clr	   play_cbit
		   clr	   rec_cbit
		   mov	   play_mem,#3
		   mov	   play_m,#0
		   lcall   jxctl
w_c0:		   ret
;
rec_ctl_x:         jb	   p_sw,rec_ctl_x3      ;录音
		   jb	   rec_sw,rec_ctl_x3
		   setb    rec_cbit
		   clr	   ffw_cbit
		   clr	   rew_cbit
		   clr	   play_cbit
		   mov	   play_mem,#1
		   mov	   play_m,#0
        	   lcall   jxctl
rec_ctl_x3:        ret
;
;
                   nop
		   nop
		   ljmp    start
		   nop
		   nop
;
rec_ctl:	   mov     a,play_mem        	  ;录音及暂停控制
                   cjne    a,#01h,rec_ctl2
                   jb      moto_on,rec_ctl1
                   mov     au_to,#0          ;暂停
                   setb    moto_on
                   mov     play_m,play_mem
                   sjmp    rec_ctl3
rec_ctl1:          mov     au_to,#0        ;重启
                   clr     moto_on
                   mov     play_m,#0
                   sjmp    rec_ctl3
                   ;
rec_ctl2:          jb	   p_sw,rec_ctl3      ;录音
		   jb	   rec_sw,rec_ctl3
		   setb    rec_cbit
		   clr	   ffw_cbit
		   clr	   rew_cbit
		   clr	   play_cbit
		   mov	   play_mem,#1
		   mov	   play_m,#0
        	   lcall   jxctl
rec_ctl3:          ret
                  ;
rew_ctl:                               	   ;快倒控制
		   jb	   p_sw,ew_c0
		   setb    rew_cbit
		   clr	   ffw_cbit
		   clr	   play_cbit
		   clr	   rec_cbit
		   mov	   play_mem,#4
		   mov	   play_m,#0
		   lcall   jxctl
ew_c0:		   ret
                   ;
stop_ctl:          clr	   rec_cbit            	 ;停机控制
		   clr	   play_cbit
		   clr	   ffw_cbit
		   clr	   rew_cbit
		   mov	   play_mem,#0
		   mov	   play_m,#0
		   lcall   jxctl
		   ret
;
;
                   nop
		   nop
		   ljmp    start
		   nop
		   nop
;
key_test:          clr     kl1_pad            ;键扫程序
                   setb    kl2_pad
                   jnb     kh1_pad,tstop_p
                   jnb     kh2_pad,trew_p
                   jnb     kh3_pad,tffw_p
                   setb    kl1_pad
                   clr     kl2_pad
                   jnb     kh1_pad,tplay_p
                   jnb     kh2_pad,trec_p
                   jnb     kh3_pad,tclear_p
                   sjmp    tkey_end2           ;无键按下
                   ;
tstop_p:           lcall   delay_5ms
                   jnb     kh1_pad,tstop_p1
                   sjmp    tkey_end
tstop_p1:          mov     k_num,#06h          ;停止6
                   setb    key_stop
                   sjmp    tkey_end
                   ;
trew_p:            lcall   delay_5ms
                   jnb     kh2_pad,trew_p1
                   sjmp    tkey_end
trew_p1:           mov     k_num,#05h         ;快倒5
                   clr     p0.4
                   setb    key_rew
                   sjmp    tkey_end
                   ;
tffw_p:            lcall   delay_5ms
                   jnb     kh3_pad,tffw_p1
                   sjmp    tkey_end
tffw_p1:           mov     k_num,#04h         ;快进4
                   clr     p0.3
                   setb    key_ff
                   sjmp    tkey_end
                   ;
tplay_p:           lcall   delay_5ms
                   jnb     kh1_pad,tplay_p1
                   sjmp    tkey_end
tplay_p1:          mov     k_num,#03h         ;放音3
                   clr     p0.2
                   setb    key_play
                   sjmp    tkey_end
                   ;
trec_p:            lcall   delay_5ms
                   jnb     kh2_pad,trec_p1
                   sjmp    tkey_end
trec_p1:           mov     k_num,#02h         ;录音2
                   clr     p0.1
                   setb    key_rec
                   sjmp    tkey_end
                   ;
tclear_p:          lcall   delay_5ms
                   jnb     kh3_pad,tclear_p1
                   sjmp    tkey_end
tclear_p1:         mov     k_num,#01h         ;清零1
                   setb    key_clr
                   ;
tkey_end:          mov     a,p2                   ;等待按键松开
                   anl     a,#38h      ;读3根行线
                   cjne    a,#38h,tkey_end
tkey_end2:         setb    kh1_pad
                   setb    kh2_pad
                   setb    kh3_pad
                   setb    p0.1
                   setb    p0.2
                   setb    p0.3
                   setb    p0.4
                   ret
;
;
                   nop
		   nop
		   ljmp    start
		   nop
		   nop
;
;
jxctl:		   		    ;机芯控制
        	   jnb	   rec_cbit,jxctl2
		   mov	   c,p_sw
		   orl	   c,rec_sw
		   jnc	   jx_11
		   lcall   stop
		   mov	   play_mem,#0
		   ret
jx_11:		   lcall   play
		   mov	   play_mem,#1
		   ret
jxctl2: 	   jnb	   play_cbit,jxctl3
		   jnb	   p_sw,jx_21
		   lcall   stop
		   mov	   play_mem,#0
		   ret
jx_21:		   lcall   play
		   mov	   play_mem,#2
		   ret
jxctl3: 	   jnb	   ffw_cbit,jxctl4
		   jnb	   p_sw,jx_31
		   lcall   stop
		   mov	   play_mem,#0
		   ret
jx_31:		   lcall   ff
		   mov	   play_mem,#3
		   ret
jxctl4: 	   jnb	   rew_cbit,jxctl5
		   jnb	   p_sw,jx_41
		   lcall   stop
		   mov	   play_mem,#0
		   ret
jx_41:		   lcall   rew
		   mov	   play_mem,#4
		   ret
jxctl5: 	   lcall   stop
		   mov	   play_mem,#0
		   ret
                   ;
jxc:		   		  ;cmos开关控制
		   jnb	    rec_cbit,jxc2
		   mov	    c,p_sw
		   orl	    c,rec_sw
		   jnc	    jxc_11
		   lcall    close_cmos
		   ret
jxc_11: 	   lcall    rec_cmos
		   ret
;
jxc2:		   jnb	    play_cbit,jxc3
		   jnb	    p_sw,jxc_21
		   lcall    close_cmos
		   ret
jxc_21: 	   lcall    play_cmos
		   ret
;
jxc3:		   lcall    close_cmos
		   ret
;
;
                   nop
		   nop
		   ljmp    start
		   nop
		   nop
;
rec_cmos:          clr     rec_c      ;录音时的开关设置
                   setb    play_c
                   clr     comm1
                   ret
;
play_cmos:         setb     rec_c      ;放音时的开关设置
                   clr      play_c
                   setb     comm1
                   ret
;
close_cmos:        setb    rec_c      ;关闭时的开关设置
                   setb    play_c
                   clr     comm1
                   ret
;
autostop:          mov     a,play_m
                   jnz     at4
                   mov	   a,play_mem
		   cjne    a,#01h,stpa1
		   sjmp    at3
stpa1:		   cjne    a,#02h,at2
at3:		   mov	   a,au_to	     ;放录音时
		   cjne    a,#200,at0
		   sjmp    at1
at2:		   mov	   a,au_to	     ;进倒时
		   cjne    a,#80,at0
at1:		   clr	   rec_cbit
		   clr	   play_cbit
		   clr	   ffw_cbit
		   clr	   rew_cbit
		   mov	   play_mem,#0
		   lcall   jxctl	     ;停机
                   lcall   jxc
at4:		   ret
at0:		   jnc	   at1
		   ret
;
;
                   nop
		   nop
		   ljmp    start
		   nop
		   nop
;
b_int1:            mov     wo_t,#00h         ;握手计时器=0
                   inc     woshou            ;握手计数器+1
                   reti
;
;
                   nop
		   nop
		   ljmp    start
		   nop
		   nop
;
b_int0: 	   push    acc			    ;录音机计数中断
		   push    psw
		   setb    rs0
		   mov	   au_to,#00h
;
		   jb	   fang,exi1
		   sjmp    exi6
;
exi1:		   mov	   r0,#count0		      ;计数+
		   mov	   a,@r0
		   cjne    a,#04h,b_i12
;
b_i11:		   clr	   a
		   mov	   @r0,a
		   sjmp    exi2
b_i12:		   jnc	   b_i11
		   inc	   a
		   mov	   @r0,a
		   ljmp    exi5
;
exi2:		   inc	   r0
		   mov	   a,@r0
		   cjne    a,#09h,b_i22
b_i21:		   clr	   a
		   mov	   @r0,a
		   sjmp    exi3
b_i22:		   jnc	   b_i21
		   inc	   a
		   mov	   @r0,a
		   ljmp    exi5
;
exi3:		   inc	   r0
		   mov	   a,@r0
		   cjne    a,#09h,b_i32
b_i31:		   clr	   a
		   mov	   @r0,a
		   sjmp    exi4
b_i32:		   jnc	   b_i31
		   inc	   a
		   mov	   @r0,a
		   ljmp    exi5
;
exi4:		   inc	   r0
		   mov	   a,@r0
		   cjne    a,#09h,b_i42
b_i41:		   clr	   a
		   mov	   @r0,a
		   ljmp    exi5
b_i42:		   jnc	   b_i41
		   inc	   a
		   mov	   @r0,a
		   ljmp    exi5
;
exi6:		   mov	   r0,#count0			  ;计数-
		   mov	   a,@r0
		   jnz	   d_i12
		   mov	   a,#04h
		   mov	   @r0,a
		   sjmp    exi7
d_i12:		   dec	   a
		   mov	   @r0,a
		   ljmp    exi5
;
exi7:		   inc	   r0
		   mov	   a,@r0
		   jnz	   d_i22
		   mov	   a,#09h
		   mov	   @r0,a
		   sjmp    exi8
d_i22:		   dec	   a
		   mov	   @r0,a
		   ljmp    exi5
;
exi8:		   inc	   r0
		   mov	   a,@r0
		   jnz	   d_i32
		   mov	   a,#09h
		   mov	   @r0,a
		   sjmp    exi9
d_i32:		   dec	   a
		   mov	   @r0,a
		   ljmp    exi5
;
exi9:		   inc	   r0
		   mov	   a,@r0
		   jnz	   d_i42
		   mov	   a,#09h
		   mov	   @r0,a
		   ljmp    exi5
d_i42:		   dec	   a
		   mov	   @r0,a
		   ljmp    exi5
;
exi5:		   pop	   psw
		   pop	   acc
		   reti
;
;
                   nop
		   nop
		   ljmp    start
		   nop
		   nop
;
wait_400ms:        mov     tim,#40    ;等待400ms
                   lcall   wait
                   ret
                   ;
wait_300ms:        mov     tim,#30    ;等待300ms
                   lcall   wait
                   ret
                   ;
wait_190ms:        mov     tim,#19    ;等待190ms
                   lcall   wait
                   ret
                   ;
wait_130ms:        mov     tim,#13    ;等待130ms
                   lcall   wait
                   ret
                   ;
wait_100ms:        mov     tim,#10    ;等待100ms
                   lcall   wait
                   ret
;
wait_120ms:        mov     tim,#12    ;等待120ms
                   lcall   wait
                   ret
;
wait_110ms:        mov     tim,#11    ;等待110ms
                   lcall   wait
                   ret
;
wait_450ms:        mov     tim,#45    ;等待450ms
                   lcall   wait
                   ret
;
wait_35ms:         mov     tim,#3     ;等待35ms
                   lcall   wait
                   lcall   delay_5ms
                   ret
;
delay_5ms:         mov     r6,#10
dey0:              mov     r5,#230
dey1:              djnz    r5,dey1
                   djnz    r6,dey0
                   ret
;
wait_30ms:         mov     tim,#3     ;等待30ms
                   lcall   wait
                   ret
;
wait:              mov     a,tim
                   mov     au_to,#0
                   cjne    a,#00h,wait
                   ret
;
;
                   nop
		   nop
		   ljmp    start
		   nop
		   nop
;
open_dct:          clr     moto_on
                   clr     cdct           ;启动电磁铁
                   lcall   wait_30ms
                   setb    cdct           ;关闭电磁铁
                   ret
;
reset:             mov     r7,#6          ;机芯复位
                   clr     moto_on        ;马达启动
                   lcall   wait_400ms
reset0:            jnb     mode_sw,reset1
reset0a:           setb    moto_on        ;关闭马达, 复位完成
                   clr	   play_cbit
		   clr	   rec_cbit
		   clr	   ffw_cbit
		   clr	   rew_cbit
		   mov	   play_mem,#0
                   mov     play_m,#0       ;退出暂停状态
                   mov     ff_old,#0
		   ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -