找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2626|回复: 5
收起左侧

请教:如何用89C2051控制MP3自动录音放音

[复制链接]
ID:84465 发表于 2016-6-29 14:25 | 显示全部楼层 |阅读模式
手里有两个带录音功能的MP3,想用它做一个对讲机录音中继电路玩。用单片机89C2051控制带录音功能的MP3进行自动录放音,这种MP3可以录音120-240秒。
MP3有5个接点:1是+12v,2是地,3是音频输出,4脚是录放音控制键。4脚通过7.5K接地,开始录音.断开后再通过12K接地,则是放刚才的录音。5脚是话筒输入。
我的初步设想是“当对讲机有信号时,单片机控制MP3开始录音,同时内部定时器开始计数定时,录音结束后,延时1秒,单片机再控制对讲机发射,同时MP3进行放音。

回复

使用道具 举报

ID:84465 发表于 2016-6-29 14:43 | 显示全部楼层
本人菜鸟,买了一本汇编语言的书。学单片机是算学算看,惭愧。
也反复看了本坛的单片机基础教程里的定时器和中断一课,
我搭建好了控制电路,又写了一个小程序,把车台对讲机和MP3连接在一起,,可以实现以下功能:
1、手持机讲话,车台收到信号,2051的13脚电位变0,7脚变0,继电器J1吸合,开始录音。
2、录音完毕,13脚电位跳变1,    2057的7脚变1,继电器J1释放,停止录音。
3、稍微延时,2051的9脚变0,继电器J2吸合,开始放音和对讲机发射信号。
4、由于写入的定时器的捕捉程序错误,无论录音时间有多少秒钟,只能控制放音几秒钟(对讲机也发射几秒钟)。

这证明电路搭建成功,控制程序可以实现简单控制。
也感觉这个录音时间是个变量,可能要录音3秒5秒,也可能录音100秒200秒。如何在录音完毕后执行自动放音,放音完毕后停止发射,还是一头雾水。
呵呵,惭愧,请坛内高手指教。
回复

使用道具 举报

ID:84465 发表于 2016-6-29 14:55 | 显示全部楼层
附上我编写的小程序,漏洞百出,请您不要见笑。
org   0000h
ajmp  start



org   0030h
start:

      mov p3,#0ffh          ;p3口全置1
      mov p1,#0ffh          ;p1口全置1,
      mov a, #00h

main:

      jb p1.1,main          ;对讲机无信号,13脚平时为1,有信号变0,程序向下执行。13脚1程序跳转至开始
      lcall delay10ms       ;调用10毫秒延时去抖
      clr p3.3              ;7脚低电平,继电器1吸合,开始录音
      
      lcall time1           ;调用time1
      lcall del             ;调用一个延时
       jnb p1.1,$            ;13脚0,程序原地踏步 ,对讲机接收完毕13脚变1,程序向下执行
                           
       mov a,31h             ;31h中的数送累加器
       clr tr1               ;关闭定时器1

       setb p3.3             ;7脚高电平,继电器1断开,停止录音
       lcall del             ;调用1个延时
      
       clr  p3.5             ;9脚低电平,继电器2吸合,开始放音和发射
       lcall time2           ;调用time2

       lcall del            ;调用1个延时
guaji:      
       setb p3.5            ;放音完毕,9脚高电平,继电器3断开,停止发射
       clr tr1               ;关闭定时器1
      
       lcall del
       ajmp main
;-------------------------------------------------------------------------------------
time1:
      MOV 30h,#20               ;软件计数器置20
      mov 31h,#00h
        
      mov tmod, #10h                 ;定时器T1置工作于方式1
      mov th1, #3ch               ;装入预置数高位3ch (65536-50000=15536=#3c b0h)
      mov tl1, #0b0h             ;装入预置数低位b0h(预置设定50毫秒)
      CLR  TF1                  ;先把溢出标志位清零
      clr ea                   ;禁止中断
       setb tr1               ;打开定时器1
   

loop:
     jbc tf1,loop1    ;查询T1的溢出标志TF1。TF1=0,50毫秒定时未到,向下执行。TF1=1,定时到,转Loop1.
     ajmp loop        ;转LOOP处继续查询

loop1:                                                                                                                         
   
     mov th1,#3ch     ;重新装入初始值3CH
     mov tl1,#0b0h    ;重新装入    0B0H
     djnz 30h,loop    ;判断是否到1秒。未到1秒,转到LOOP继续循环。到1秒,向下执行   
      mov 30h,#20   
         inc  31h         ;31h加1
           ;
     
    ret
;--------------------------------------------------------------------------------------




;----------------------------------------------------------------------------
time2:      
      MOV 30h,#20               ;软件计数器置20
      mov 32h,#00h
      mov tmod, #10h                 ;定时器T1置工作于方式1
      mov th1, #3ch               ;装入预置数高位3ch (65536-50000=15536=#3c b0h)
      mov tl1, #0b0h             ;装入预置数低位b0h(预置设定50毫秒)
      CLR  TF1                  ;先把溢出标志位清零
      clr ea               ;禁止中断
      
      setb tr1                  ;打开定时器1
   

loopa:
     jbc tf1,loop1    ;查询T1的溢出标志TF1。TF1=0,50毫秒定时未到,向下执行。TF1=1,定时到,转Loopb.
     ajmp loopa        ;转LOOPa处继续查询

loopb:
     mov th1,#3ch     ;重新装入初始值3CH
     mov tl1,#0b0h    ;重新装入    0B0H
     djnz 30h,loop    ;判断是否到1秒。未到1秒,转到LOOP继续循环。到1秒,向下执行   
      mov 30h,#20
         inc  32h         ;32h加1
      cjne a,32h,guaji                 ;
      
     ret
;-----------------------------------------------------------------------------------


delay10ms:        ;10毫秒延时去抖子程序
mov r7, #20
y1:mov r6, #250
y2:djnz r6,y2
djnz r7,y1
ret


del:  mov r5, #5     ;延时
del1: mov r6, #0ffh
del2: mov r7, #0ffh
del3: djnz r7, del3
      djnz r6, del2
      djnz r5, del1
ret

end
;----------------------------------------------------
回复

使用道具 举报

ID:84465 发表于 2016-6-29 15:16 | 显示全部楼层
附上个画的简图
zhongji1.jpg
回复

使用道具 举报

ID:84465 发表于 2016-6-29 15:31 | 显示全部楼层
我写的程序的控制思路是:
1,当对讲机收到信号后,2051的7脚变哦0继电器J1吸合,MP3开始录音。并启动定时器1,以1秒为基准,软件计数器31H自加一,录音停止后,31H的数保存。(31H中的数就是录音时间)
2,对讲机停止接收信号后,录音完毕。2051的9脚变0,继电器J2吸合,开始放音和发射,同时,调用time2子程序计数,以1秒为基准计数,计数结果存32H。 把31H和32H中的数对比,相同(表示放音时间到),则程序跳转到guaji(挂机),2051的9脚变1,继电器J2释放,停止放音和发射,重新循环。
回复

使用道具 举报

ID:84465 发表于 2016-6-29 15:35 | 显示全部楼层
以上拙作,见笑了。请高手指点迷津。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表