<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于51單片機(jī)的音量控制電路與程序設(shè)計(jì)

          基于51單片機(jī)的音量控制電路與程序設(shè)計(jì)

          作者: 時(shí)間:2012-01-07 來源:網(wǎng)絡(luò) 收藏

          1 引言

          本文介紹的IC為,市面上有很多類似的產(chǎn)品,例如:F、CD62429、CSC62429等。其實(shí),掌握了一兩種IC的編程方法,稍作改動(dòng)就很容易移植到其它產(chǎn)品上。是日本三菱公司的IC,音量調(diào)節(jié)范圍是0~-83dB,控制精度每步1dB,內(nèi)部電路如圖一(詳見M62429的使用手冊(cè))。

          圖一 M62429內(nèi)部電路

          2 硬件電路

          根據(jù)圖一而設(shè)計(jì)的電路如圖二。

          圖二中已省略了單片機(jī)與功放連接的其他電路,只剩下AT89C52的晶振部分、與M62429相關(guān)的電路、控制音量必需的按鍵電路等,加上電源之后,該電路可以獨(dú)立工作。由于AT89C52真正的串口已用于其他用途,M62429的4腳(DATA)連至AT89C52的P2.2,M62429的5腳(CLOCK)連到AT89C52的P2.1。由這兩個(gè)引腳(P2.1、P2.2)作為與M62429通信,控制音量的數(shù)據(jù)便由這個(gè)發(fā)出。

          音頻信號(hào)從LH1輸入,其中L通道信號(hào)經(jīng)過C1耦合到M62429 的1腳,被控制之后從2腳輸出,再經(jīng)C2耦合到LH2輸出到后級(jí)進(jìn)行放大。R通道信號(hào)經(jīng)C4耦合到M62429的8腳,被控制后從7腳輸出。經(jīng)C3耦合至LH2輸出到后級(jí)進(jìn)行放大。在LH1處輸入合適的音源,從LH2處就可以監(jiān)聽的情況。SW1為音量增加按鈕。SW2為音量減小按鈕,SW3為復(fù)位按鈕。

          圖二 M62429與單片機(jī)的連接

          3 軟件設(shè)計(jì)

          從M62429使用手冊(cè)可知,送去M62429的控制數(shù)據(jù)DATA為11位。通常的用法如表一:

          表一:M62429 常用的11位數(shù)據(jù)(DATA )結(jié)構(gòu)

          D0

          D1

          D2

          D3

          D4

          D5

          D6

          D7

          D8

          D9

          D10

          1

          0

          7位音量控制數(shù)據(jù)

          1

          1

          表一中D2~D8是根據(jù)音量的大小變化需要改變的數(shù)據(jù),其中D2~D6的編碼如表二,

          表二 M62429音量衰減值與D2~~D6的關(guān)系

          ATTl

          D2

          D3

          D4

          D5

          D6

          OdB

          1

          0

          1

          0

          1

          -8dB

          1

          1

          0

          0

          1

          -16dB

          1

          0

          0

          0

          1

          -24dB

          1

          1

          1

          1

          0

          -32dB

          1

          0

          1

          1

          0

          -40dB

          1

          1

          0

          1

          0

          -48dB

          1

          0

          0

          1

          0

          -56dB

          1

          1

          1

          0

          0

          -64dB

          1

          0

          1

          0

          0

          -72dB

          1

          1

          0

          0

          0

          -80dB

          1

          0

          0

          0

          0

          表三 M62429音量衰減值與D7、D8的關(guān)系

          ATT2

          D7

          D8

          0dB

          1

          1

          -1dB

          0

          1

          -2dB

          1

          0

          -3dB

          0

          0

          從表二看出,D2~D6控制步長為4dB,需加上D7、D8(見表三)才能達(dá)到控制步長為1dB的要求。例如最大音量時(shí)衰減值為0dB,查表二,D2~D6數(shù)據(jù)為10101,查表三,D7,D8為11,所以D2~~D8應(yīng)為1010111,根據(jù)表一,D0~D10這11位數(shù)據(jù)為10101011111。同理,衰減值為-1dB時(shí)的11位數(shù)據(jù)為10101010111。由于AT89C51系列單片機(jī)處理數(shù)據(jù)是8位,由P2.2、P2.1組成的無法一次完成11位數(shù)據(jù)的發(fā)送工作。我們只好把這11位數(shù)據(jù)分為兩次發(fā)送,我們可以用先發(fā)送6位、后發(fā)送5位的方法(當(dāng)然也可以用其他方法)發(fā)送。例如衰減0dB的數(shù)據(jù)10101011111,先發(fā)送前6位101010,后發(fā)送5位11111。由于AT89C51系列單片機(jī)數(shù)據(jù)為8位,我們可以在這些數(shù)據(jù)后面加上“0”,補(bǔ)足8位。那么,衰減0dB的一組數(shù)據(jù)就成為了10101000和11111000。把這組數(shù)據(jù)用十六進(jìn)制數(shù)來表示的話,就是A8H,F8H。用同樣的方法,可得出各個(gè)衰減值的數(shù)據(jù)。

          我們?cè)O(shè)計(jì)程序的思路是:根據(jù)開機(jī)預(yù)設(shè)衰減值,用查表法查出衰減數(shù)據(jù),然后把數(shù)據(jù)發(fā)送出去,發(fā)送時(shí)先發(fā)第一個(gè)數(shù)據(jù)的前6位,再發(fā)送另一數(shù)據(jù)的前5位。由于M62429的控制范圍是0dB~-83dB。在這個(gè)范圍內(nèi),數(shù)字越大,音量越小。要增加音量,就要減少用于查表那個(gè)數(shù)字(程序中R4的值)??驁D如圖三。

          圖三 程序方框圖

          根據(jù)上述思路設(shè)計(jì)的程序如下:

          ORG 00H

          M429CK EQU P2.1 ;M62429時(shí)鐘COLCK

          M429DA EQU P2.2 ;M62429數(shù)據(jù)DATA

          UPVOL EQU P1.0 ;音量增加按鍵

          DOWNVOL EQU P1.1 ;音量減少按鍵

          MOV SP, #10H

          MOV R4, #20 ;開機(jī)預(yù)設(shè)衰減值

          M62429: MOV A,R4 ;預(yù)設(shè)衰減值送A

          RL A ;乘2

          MOV DPTR,#TAB ;衰減數(shù)據(jù)表首址送DPTR

          MOVC A,@A+DPTR;查出衰減數(shù)據(jù)

          MOV 9H, A ;9H、R2為一組衰減數(shù)據(jù)的兩個(gè)存放單元

          INC DPTR ;指向下一個(gè)數(shù)據(jù)

          MOV A, R4

          RL A ;乘2

          MOVC A,@A+DPTR ;查出另一個(gè)衰減數(shù)據(jù)

          MOV R2,A

          CLR M429CK

          MOV A,9H

          CALL IN6BYT ;發(fā)送前6位數(shù)據(jù)

          MOV A,R2

          CALL IN5BYT ;發(fā)送后5位數(shù)據(jù)

          UP: MOV C, UPVOL ;檢測音量增加按鍵

          JC DOWN ;無按下,轉(zhuǎn)測音量減少鍵

          CALL DELAY ;有按下,延時(shí)去抖

          MOV C, UPVOL ;再測

          JC DOWN

          JB F0,EEE ;音量已是最大轉(zhuǎn)EEE

          DEC R4 ;音量衰減值減1

          CLR C

          CJNE R4, #0, M62429;與音量最大值衰減0dB比較,未達(dá)最大,轉(zhuǎn)M62429

          SETB F0 ;己是最大,建立標(biāo)志

          JMP M62429

          EEE: INC R4 ;音量衰減值增1

          CLR F0

          JMP UP

          DOWN: MOV C, DOWNVOL ;檢測音量減小鍵

          JC UP

          CALL DELAY

          MOV C, DOWNVOL ;再測

          JC UP

          INC R4 ;音量衰減值增1

          CLR C

          CJNE R4, #83, BBB ;與音量最小值衰減83dB比較

          LJMP M62429

          BBB: JC M62429 ;R483 ,轉(zhuǎn)M62429

          MOV R4,#83 ;R4>83,需修正,保證r4里的值=83

          JMP M62429

          IN6BYT: MOV R3,#6 ;發(fā)送6位數(shù)據(jù)子程序

          本文創(chuàng)新點(diǎn):1、程序中控制數(shù)據(jù)用查表法查得,使之控制方便,容易理解。

          2、軟件硬件結(jié)合緊密。

          參考文獻(xiàn):

          [1] 張迎新. 單片機(jī)初級(jí)教程[M]. (第2版). 北京:北京航空航天大學(xué)出版社, 2006

          [2] 何立民. 單片機(jī)高級(jí)教程[M]. (第2版). 北京:北京航空航天大學(xué)出版社, 2007

          [3] M62429使用手冊(cè). 網(wǎng)址:http://www.ic-shop.cn/33/530/M62429.html

          [4] 徐麗香,鄭傳得,周世均,吳耀鑫. 基于AT89S51單片機(jī)的監(jiān)控與管理系統(tǒng)的設(shè)計(jì)[J]. 微計(jì)算機(jī)信息, 2007, 1-2: 139-140

          51單片機(jī)相關(guān)文章:51單片機(jī)教程




          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();