标题:
请教:如何用89C2051控制MP3自动录音放音
[打印本页]
作者:
ln7812
时间:
2016-6-29 14:25
标题:
请教:如何用89C2051控制MP3自动录音放音
手里有两个带录音功能的MP3,想用它做一个对讲机录音中继电路玩。用单片机89C2051控制带录音功能的MP3进行自动录放音,这种MP3可以录音120-240秒。
MP3有5个接点:1是+12v,2是地,3是音频输出,4脚是录放音控制键。4脚通过7.5K接地,开始录音.断开后再通过12K接地,则是放刚才的录音。5脚是话筒输入。
我的初步设想是“当对讲机有信号时,单片机控制MP3开始录音,同时内部定时器开始计数定时,录音结束后,延时1秒,单片机再控制对讲机发射,同时MP3进行放音。
作者:
ln7812
时间:
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秒。如何在录音完毕后执行自动放音,放音完毕后停止发射,还是一头雾水。
呵呵,惭愧,请坛内高手指教。
作者:
ln7812
时间:
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
;----------------------------------------------------
作者:
ln7812
时间:
2016-6-29 15:16
附上个画的简图
zhongji1.jpg
(48.43 KB, 下载次数: 87)
下载附件
2016-6-29 15:16 上传
作者:
ln7812
时间:
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释放,停止放音和发射,重新循环。
作者:
ln7812
时间:
2016-6-29 15:35
以上拙作,见笑了。请高手指点迷津。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1