找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3144|回復(fù): 5
收起左側(cè)

請教:如何用89C2051控制MP3自動錄音放音

[復(fù)制鏈接]
ID:84465 發(fā)表于 2016-6-29 14:25 | 顯示全部樓層 |閱讀模式
手里有兩個帶錄音功能的MP3,想用它做一個對講機錄音中繼電路玩。用單片機89C2051控制帶錄音功能的MP3進行自動錄放音,這種MP3可以錄音120-240秒。
MP3有5個接點:1是+12v,2是地,3是音頻輸出,4腳是錄放音控制鍵。4腳通過7.5K接地,開始錄音.斷開后再通過12K接地,則是放剛才的錄音。5腳是話筒輸入。
我的初步設(shè)想是“當(dāng)對講機有信號時,單片機控制MP3開始錄音,同時內(nèi)部定時器開始計數(shù)定時,錄音結(jié)束后,延時1秒,單片機再控制對講機發(fā)射,同時MP3進行放音。

回復(fù)

使用道具 舉報

ID:84465 發(fā)表于 2016-6-29 14:43 | 顯示全部樓層
本人菜鳥,買了一本匯編語言的書。學(xué)單片機是算學(xué)算看,慚愧。
也反復(fù)看了本壇的單片機基礎(chǔ)教程里的定時器和中斷一課,
我搭建好了控制電路,又寫了一個小程序,把車臺對講機和MP3連接在一起,,可以實現(xiàn)以下功能:
1、手持機講話,車臺收到信號,2051的13腳電位變0,7腳變0,繼電器J1吸合,開始錄音。
2、錄音完畢,13腳電位跳變1,    2057的7腳變1,繼電器J1釋放,停止錄音。
3、稍微延時,2051的9腳變0,繼電器J2吸合,開始放音和對講機發(fā)射信號。
4、由于寫入的定時器的捕捉程序錯誤,無論錄音時間有多少秒鐘,只能控制放音幾秒鐘(對講機也發(fā)射幾秒鐘)。

這證明電路搭建成功,控制程序可以實現(xiàn)簡單控制。
也感覺這個錄音時間是個變量,可能要錄音3秒5秒,也可能錄音100秒200秒。如何在錄音完畢后執(zhí)行自動放音,放音完畢后停止發(fā)射,還是一頭霧水。
呵呵,慚愧,請壇內(nèi)高手指教。
回復(fù)

使用道具 舉報

ID:84465 發(fā)表于 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,程序向下執(zhí)行。13腳1程序跳轉(zhuǎn)至開始
      lcall delay10ms       ;調(diào)用10毫秒延時去抖
      clr p3.3              ;7腳低電平,繼電器1吸合,開始錄音
      
      lcall time1           ;調(diào)用time1
      lcall del             ;調(diào)用一個延時
       jnb p1.1,$            ;13腳0,程序原地踏步 ,對講機接收完畢13腳變1,程序向下執(zhí)行
                           
       mov a,31h             ;31h中的數(shù)送累加器
       clr tr1               ;關(guān)閉定時器1

       setb p3.3             ;7腳高電平,繼電器1斷開,停止錄音
       lcall del             ;調(diào)用1個延時
      
       clr  p3.5             ;9腳低電平,繼電器2吸合,開始放音和發(fā)射
       lcall time2           ;調(diào)用time2

       lcall del            ;調(diào)用1個延時
guaji:      
       setb p3.5            ;放音完畢,9腳高電平,繼電器3斷開,停止發(fā)射
       clr tr1               ;關(guān)閉定時器1
      
       lcall del
       ajmp main
;-------------------------------------------------------------------------------------
time1:
      MOV 30h,#20               ;軟件計數(shù)器置20
      mov 31h,#00h
        
      mov tmod, #10h                 ;定時器T1置工作于方式1
      mov th1, #3ch               ;裝入預(yù)置數(shù)高位3ch (65536-50000=15536=#3c b0h)
      mov tl1, #0b0h             ;裝入預(yù)置數(shù)低位b0h(預(yù)置設(shè)定50毫秒)
      CLR  TF1                  ;先把溢出標(biāo)志位清零
      clr ea                   ;禁止中斷
       setb tr1               ;打開定時器1
   

loop:
     jbc tf1,loop1    ;查詢T1的溢出標(biāo)志TF1。TF1=0,50毫秒定時未到,向下執(zhí)行。TF1=1,定時到,轉(zhuǎn)Loop1.
     ajmp loop        ;轉(zhuǎn)LOOP處繼續(xù)查詢

loop1:                                                                                                                         
   
     mov th1,#3ch     ;重新裝入初始值3CH
     mov tl1,#0b0h    ;重新裝入    0B0H
     djnz 30h,loop    ;判斷是否到1秒。未到1秒,轉(zhuǎn)到LOOP繼續(xù)循環(huán)。到1秒,向下執(zhí)行   
      mov 30h,#20   
         inc  31h         ;31h加1
           ;
     
    ret
;--------------------------------------------------------------------------------------




;----------------------------------------------------------------------------
time2:      
      MOV 30h,#20               ;軟件計數(shù)器置20
      mov 32h,#00h
      mov tmod, #10h                 ;定時器T1置工作于方式1
      mov th1, #3ch               ;裝入預(yù)置數(shù)高位3ch (65536-50000=15536=#3c b0h)
      mov tl1, #0b0h             ;裝入預(yù)置數(shù)低位b0h(預(yù)置設(shè)定50毫秒)
      CLR  TF1                  ;先把溢出標(biāo)志位清零
      clr ea               ;禁止中斷
      
      setb tr1                  ;打開定時器1
   

loopa:
     jbc tf1,loop1    ;查詢T1的溢出標(biāo)志TF1。TF1=0,50毫秒定時未到,向下執(zhí)行。TF1=1,定時到,轉(zhuǎn)Loopb.
     ajmp loopa        ;轉(zhuǎn)LOOPa處繼續(xù)查詢

loopb:
     mov th1,#3ch     ;重新裝入初始值3CH
     mov tl1,#0b0h    ;重新裝入    0B0H
     djnz 30h,loop    ;判斷是否到1秒。未到1秒,轉(zhuǎn)到LOOP繼續(xù)循環(huán)。到1秒,向下執(zhí)行   
      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
;----------------------------------------------------
回復(fù)

使用道具 舉報

ID:84465 發(fā)表于 2016-6-29 15:16 | 顯示全部樓層
附上個畫的簡圖
zhongji1.jpg
回復(fù)

使用道具 舉報

ID:84465 發(fā)表于 2016-6-29 15:31 | 顯示全部樓層
我寫的程序的控制思路是:
1,當(dāng)對講機收到信號后,2051的7腳變哦0繼電器J1吸合,MP3開始錄音。并啟動定時器1,以1秒為基準(zhǔn),軟件計數(shù)器31H自加一,錄音停止后,31H的數(shù)保存。(31H中的數(shù)就是錄音時間)
2,對講機停止接收信號后,錄音完畢。2051的9腳變0,繼電器J2吸合,開始放音和發(fā)射,同時,調(diào)用time2子程序計數(shù),以1秒為基準(zhǔn)計數(shù),計數(shù)結(jié)果存32H。 把31H和32H中的數(shù)對比,相同(表示放音時間到),則程序跳轉(zhuǎn)到guaji(掛機),2051的9腳變1,繼電器J2釋放,停止放音和發(fā)射,重新循環(huán)。
回復(fù)

使用道具 舉報

ID:84465 發(fā)表于 2016-6-29 15:35 | 顯示全部樓層
以上拙作,見笑了。請高手指點迷津。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表