熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2026-2-12 21:39
正文摘要:想做個(gè)PT2314音調(diào)板,單片機(jī)用的STC32G, 從網(wǎng)上找了個(gè)例子程序,但是怎樣弄都不出聲,耳機(jī)里只有很微弱的聲音 好像是串?dāng)_過來的,PT2314根本沒正常工作,實(shí)在頭大,希望壇子里的大 神幫忙指導(dǎo)一下, 我是想用四 ... |
huangjingjie 發(fā)表于 2026-2-15 23:21 感謝您的回復(fù),謝謝! |
|
發(fā)一個(gè)好久前網(wǎng)上找的主程序,版主可參考 /***************************************************** SCH是網(wǎng)上找的,也可參照手冊的: 我用的是PT2314E低電壓(4~10V) 我仔細(xì)看了一下操作方法跟PT2314一樣,也有喝多其他兼容的IC PT2314/CSC2314四聲道輸入音質(zhì)處理器IC應(yīng)用電路原理圖及使用指導(dǎo)說明 功能概述和特性 PT2314四組立體聲輸入,兩聲道輸出。輸入帶響度的數(shù)字控制立體聲音質(zhì)處理 器,IIC控制,6V-10V,兼容PT2314/CSC2313/TC7314/CD3314,采用SOP-28/DIP- 28封裝。它適用于車載收音機(jī)和高保_真音質(zhì)系統(tǒng)。本產(chǎn)品提供可選擇的輸入增益和外部 響度功能,并且由微處理器串行I2C總線介面控制。主要功能如下: ① 使用CMOS技術(shù) ② 輸入多路復(fù)用: 4個(gè)立體聲輸入 對不同的音源具有最佳適應(yīng)的可選擇的輸入增益 ③ 帶響度功能,高音,低音控制 ④ 音量控制(每級1.25dB) ⑤ 高音和低音控制 ⑥ 二個(gè)喇叭衰減器: 二個(gè)獨(dú)立的揚(yáng)聲器均衡和音量控制裝置 獨(dú)立的靜音功能 ⑦ 通過串性I2C總線可實(shí)現(xiàn)所有功能的程序化。 代碼: START condition: SCLK: -----------|______ SDIO:-----|_____________ 1 | 2 | 3 STOP condition: SCLK: ____|-------------- SDIO:____________|------- 1 | 2 | 3 DATA: SCLK:_______________|---|________|----|_______ SDIO:___________|------------|____________|---- |<==========>| RESET: SENB:__|--------------------------------------------- SDIO:_________________________________________|------ RST: ___________|------------------------------------ SCLK:__|--------------------------------------------- | 1 | 2 | 3 START condition: SCLK: -----------|______ SDIO:-----|_____________ 1 | 2 | 3 falling edge of SDIO while SCLK is high) does not occur within 300 ns before the rising edge of RST. **************************************/ void start() { P0CONL = 0xB8; // 輸出 // Configure SDIO as push-pull set_sdio; set_sclk; __NOP();__NOP();// tSU:STA clr_sdio; __NOP();__NOP();// tHD:STA clr_sclk; } void iic_stop() { P0CONL = 0xB8; // 輸出 // Configure SDIO as push-pull clr_sclk; __NOP();__NOP();// tf:IN + tLOW clr_sdio; __NOP();__NOP(); set_sclk; __NOP();__NOP(); // tf:IN + tSU:STO set_sdio; } //////////////////I2C不應(yīng)答////////// void noack() { P0CONL = 0xB8;// 輸出// Configure SDIO as push-pull set_sdio ; __NOP();__NOP(); // tf:IN + tLOW set_sclk;; __NOP();__NOP();// tf:IN + tHIGH } ////////////*發(fā)送應(yīng)答位*///////////////////// void mack( ) { P0CONL = 0xB8;// 輸出// Configure SDIO as open-drain clr_sdio; __NOP();__NOP(); // tf:IN + tLOW set_sclk;; __NOP();__NOP();// tf:IN + tHIGH } //////////I2C等待器件應(yīng)答/////////////// void ack() { unchar i=200; P0CONL = 0x88; // 輸入 clr_sclk ; __NOP();__NOP();// tf:IN + tLOW set_sclk ; __NOP();__NOP();// tf:IN + tHIGH while (--i) //等待ASK { __NOP();__NOP(); //set_sdio ; //釋放總線 if (!test_sdio) break; //跳出 //clr_sclk ; //?????????????????????????????? } clr_sclk ; __NOP();__NOP();// tf:IN } /////////I2C讀一個(gè)字節(jié)////////////// unsigned char rd(void) { unchar out=0; unchar i; //有8位數(shù)據(jù) P0CONL = 0x88; // 輸入 for(i=0;i<8;i++) { set_sclk; __NOP();__NOP(); if(test_sdio)set_bit(out,bit0); else clr_bit(out,bit0); if(i<7) out<<=1;//下一位 clr_sclk ; __NOP();__NOP();// tf:IN __NOP();__NOP(); // tLOW } return out; } ///////I2C寫一個(gè)字節(jié)///////////// void wd(unsigned char dd) // { unchar i=8; P0CONL = 0xB8;// 輸出 while(i--) { if(dd&0x80)set_sdio ; else clr_sdio; __NOP();__NOP(); // tLOW set_sclk; __NOP();__NOP(); // tf:IN + tHIGH; clr_sclk ; __NOP();__NOP();// tf:IN dd<<=1; __NOP(); } ack(); } #include "i2c.h" #define PT2314_ADD 0x88 //PT2314的地址碼 #define A_NORMAL 0X01 #define A_BASS 0X02 #define A_TREBLE 0X03 #define A_SPL 0X04 #define A_SPR 0X05 #define A_CH 0X06 #define PT2314_UP 0X01 #define PT2314_DOWN 0X00 unchar PT2314_INIT_DATA[] = { 0x41, // switch 選擇第二通道 0x10, // volume -10DB 0xC0, // speaker-l 0DB 0xE0, // speaker-r 0DB 0x60, // bass -14DB 0x70 // treble -14DB }; //0x41為選擇第二通道 __code const unchar TONE_TAB[] = { 0x00, //-14dB 0x01, //-12dB 0x02, //-10dB 0x03, //-08dB 0x04, //-06dB 0x05, //-04dB 0x06, //-02dB 0x07, //+00dB 0x0E, //+02dB 0x0D, //+04dB 0x0C, //+06dB 0x0B, //+08dB 0x0A, //+10dB 0x09, //+12dB 0x08 //+14dB } ; unchar bass=0 ; unchar treble=0 ; unchar mode_set=0 ; /*************************************************************************** ************************* PT2314 寫入一個(gè)字節(jié)***************************** ***************************************************************************/ void PT2314SetReg(unchar dat) //register value //寫入一個(gè)字節(jié) { start(); wd(PT2314_ADD); wd(dat); iic_stop(); } /**************************************************************************** ************************PT2314 寫入多個(gè)字節(jié)*************************** ****************************************************************************/ void PT2314SetNRegs(unchar *pRegVal,unchar n)//*pRegVal=pointer to register value,n=data length { //寫入多個(gè)字節(jié) unchar i; start(); wd(PT2314_ADD); for(i = 0; i < n; i++) { wd(pRegVal); } iic_stop(); } /**************************************************************************** ************************通道轉(zhuǎn)換選擇(0~3)************************** ****************************************************************************/ void SwitchAudioOuputChannel(unchar ch_UpDown) { if((ch_UpDown==1)&&(PT2314_INIT_DATA [0]<0x43)) //ch up { PT2314_INIT_DATA [0]++; } else if((ch_UpDown==0)&&(PT2314_INIT_DATA [0]>0x40)) //ch down { PT2314_INIT_DATA [0]--; } else { return; } // dis_fre=PT2314_INIT_DATA [0]; PT2314_INIT_DATA [1] = 0x18; //音量輸出 -30dB PT2314SetNRegs(PT2314_INIT_DATA, 6); } /************************************************************** function name : RdVolChange 聲音控制 parameter: if UpDown is true,turn up vol,else turn down function: adjust the vol **************************************************************/ void RdVolChange(unsigned char Vol_UpDown) { if((Vol_UpDown== 1)&&(PT2314_INIT_DATA [1]>0x00)) //vol up { PT2314_INIT_DATA [1]--; } else if((Vol_UpDown==0)&&(PT2314_INIT_DATA [1]<0x3F)) //vol down { PT2314_INIT_DATA [1]++; } else { return; } // dis_fre=PT2314_INIT_DATA [1]; PT2314SetReg(PT2314_INIT_DATA[1]); } /************************************************************** function name : bassChange 低音控制 parameter: if UpDown is true,turn up vol,else turn down function: adjust the vol **************************************************************/ void bassChange(unsigned char bass_UpDown) { //ToneBass if((bass_UpDown==1)&&(bass<0x0e)) { bass++; } else if((bass_UpDown==0)&&(bass!=0)) { bass--; } else { return; } //dis_fre=TONE_TAB[bass]; PT2314_INIT_DATA[4]=(TONE_TAB[bass]|0x60); PT2314SetReg(PT2314_INIT_DATA[4]); } /************************************************************** function name : trebleChange 高音控制 parameter: if UpDown is true,turn up vol,else turn down function: adjust the vol **************************************************************/ void trebleChange(unsigned char treble_UpDown) { //Tonetreble if((treble_UpDown==1)&&(treble<0x0e)) { treble++; } else if((treble_UpDown==0)&&(treble!=0)) { treble--; } else { return; } //dis_fre=TONE_TAB[treble]; PT2314_INIT_DATA[5]=(TONE_TAB[treble]|0x70); PT2314SetReg(PT2314_INIT_DATA[5]); } /************************************************************** function name : speak_lChange 左聲道衰減控制 parameter: function: **************************************************************/ void speak_lChange(unsigned char speak_lUpDown) { //Tonetreble if((speak_lUpDown== 1)&&(PT2314_INIT_DATA [2]>0xC0)) //vol up { PT2314_INIT_DATA [2]--; } else if((speak_lUpDown==0)&&(PT2314_INIT_DATA [2]<0xDF)) //vol down { PT2314_INIT_DATA [2]++; } else { return; } // dis_fre=PT2314_INIT_DATA [2]; PT2314SetReg(PT2314_INIT_DATA [2]); } /************************************************************** function name : speak_rChange 右聲道衰減控制 parameter: function: **************************************************************/ void speak_rChange(unsigned char speak_rUpDown) { //Tonetreble if((speak_rUpDown== 1)&&(PT2314_INIT_DATA [3]>0xE0)) //vol up { PT2314_INIT_DATA [3]--; } else if((speak_rUpDown==0)&&(PT2314_INIT_DATA [3]<0xFF)) //vol down { PT2314_INIT_DATA [3]++; } else { return; } // dis_fre= PT2314_INIT_DATA [3]; PT2314SetReg(PT2314_INIT_DATA [3]); } /************************************************************** function name : PT2314Mute parameter: if MuteOpen is ture,then mute PT2314,else turn to mormal function: open ro close PT2314's mute function **************************************************************/ void PT2314Mute(unchar MuteOpen) { if(MuteOpen) { PT2314SetReg(0xFF); //mute speaker R PT2314SetReg(0xdF); //mute speaker L } else { PT2314SetReg(0xe0); //open speaker R PT2314SetReg(0xc0); //open speaker L } } // /************************************************************** function name : Audio_functions_UP parameter: function: 增加音量 音調(diào) **************************************************************/ void Audio_functions_UP(unchar sel_mark) { switch( sel_mark ) { case 0: sel_mark=A_NORMAL; case A_NORMAL: RdVolChange(PT2314_UP); break; case A_BASS: bassChange(PT2314_UP); break; case A_TREBLE: trebleChange(PT2314_UP); break; case A_SPL: speak_lChange(PT2314_UP); break; case A_SPR: speak_rChange(PT2314_UP); break; case A_CH: SwitchAudioOuputChannel(PT2314_UP); break; default: break; } } /************************************************************** function name : Audio_functions_DOWN parameter: 減小音量 音調(diào) function: **************************************************************/ void Audio_functions_DOWN(unchar sel_mark) { switch( sel_mark ) { case 0: sel_mark=A_NORMAL; case A_NORMAL: RdVolChange(PT2314_DOWN); break; case A_BASS: bassChange(PT2314_DOWN); break; case A_TREBLE: trebleChange(PT2314_DOWN); break; case A_SPL: speak_lChange(PT2314_DOWN); break; case A_SPR: speak_rChange(PT2314_DOWN); break; case A_CH: SwitchAudioOuputChannel(PT2314_DOWN); break; default: break; } } |
Powered by 單片機(jī)教程網(wǎng)