新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51單片機的音量控制電路與程序設計

        基于51單片機的音量控制電路與程序設計

        作者: 時間:2012-01-07 來源:網絡 收藏

        1 引言

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

        圖一 M62429內部電路

        2 硬件電路

        根據圖一而設計的電路如圖二。

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

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

        圖二 M62429與單片機的連接

        3 軟件設計

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

        表一:M62429 常用的11位數據(DATA )結構

        D0

        D1

        D2

        D3

        D4

        D5

        D6

        D7

        D8

        D9

        D10

        1

        0

        7位音量控制數據

        1

        1

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

        表二 M62429音量衰減值與D2~~D6的關系

        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的關系

        ATT2

        D7

        D8

        0dB

        1

        1

        -1dB

        0

        1

        -2dB

        1

        0

        -3dB

        0

        0

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

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

        圖三 程序方框圖

        根據上述思路設計的程序如下:

        ORG 00H

        M429CK EQU P2.1 ;M62429時鐘COLCK

        M429DA EQU P2.2 ;M62429數據DATA

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

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

        MOV SP, #10H

        MOV R4, #20 ;開機預設衰減值

        M62429: MOV A,R4 ;預設衰減值送A

        RL A ;乘2

        MOV DPTR,#TAB ;衰減數據表首址送DPTR

        MOVC A,@A+DPTR;查出衰減數據

        MOV 9H, A ;9H、R2為一組衰減數據的兩個存放單元

        INC DPTR ;指向下一個數據

        MOV A, R4

        RL A ;乘2

        MOVC A,@A+DPTR ;查出另一個衰減數據

        MOV R2,A

        CLR M429CK

        MOV A,9H

        CALL IN6BYT ;發送前6位數據

        MOV A,R2

        CALL IN5BYT ;發送后5位數據

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

        JC DOWN ;無按下,轉測音量減少鍵

        CALL DELAY ;有按下,延時去抖

        MOV C, UPVOL ;再測

        JC DOWN

        JB F0,EEE ;音量已是最大轉EEE

        DEC R4 ;音量衰減值減1

        CLR C

        CJNE R4, #0, M62429;與音量最大值衰減0dB比較,未達最大,轉M62429

        SETB F0 ;己是最大,建立標志

        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 ,轉M62429

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

        JMP M62429

        IN6BYT: MOV R3,#6 ;發送6位數據子程序

        本文創新點:1、程序中控制數據用查表法查得,使之控制方便,容易理解。

        2、軟件硬件結合緊密。

        參考文獻:

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

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

        [3] M62429使用手冊. 網址:http://www.ic-shop.cn/33/530/M62429.html

        [4] 徐麗香,鄭傳得,周世均,吳耀鑫. 基于AT89S51單片機的監控與管理系統的設計[J]. 微計算機信息, 2007, 1-2: 139-140

        51單片機相關文章:51單片機教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 泰来县| 黑水县| 邹平县| 凌源市| 浦城县| 平安县| 株洲县| 临洮县| 东平县| 峨眉山市| 永清县| 瑞昌市| 上林县| 葵青区| 青州市| 普格县| 伽师县| 洪洞县| 辽源市| 讷河市| 阳城县| 阿图什市| 阜新| 岗巴县| 炎陵县| 盘山县| 麟游县| 瑞金市| 游戏| 自治县| 无棣县| 军事| 利津县| 巩留县| 平江县| 马关县| 江山市| 柘城县| 达州市| 奇台县| 曲麻莱县|