找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 212|回复: 1
打印 上一主题 下一主题
收起左侧

关于PT2314音调程序的求教,希望找个老师傅指导一下

[复制链接]
跳转到指定楼层
楼主
想做个PT2314音调板,单片机用的STC32G,
从网上找了个例子程序,但是怎样弄都不出声,耳机里只有很微弱的声音
好像是串扰过来的,PT2314根本没正常工作,实在头大,希望坛子里的大
神帮忙指导一下,
我是想用四个按键控制PT2314音量,高音低音等功能

上面是PT2314的初始化程序,这块是网上复制来的
编译没发现什么问题



这块是我想要开机先选择第一通道,也就是RIN1和LIN1,分别是PT2314的第16脚和第11脚,
然后音量和高低音信息可以通过按键调整,每次设置完后送到STC32G单片机的闪存区保存,
掉电后再开机先从STC32G单片机闪存区读出来上次保存的相关信息并送到LCD19264显示

PT-2314程序.zip (136.14 KB, 下载次数: 0)


我也理解大家都很忙,希望哪位大神可以抽空指导一下,谢谢!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:229502 发表于 2026-2-15 23:21 | 只看该作者
发一个好久前网上找的主程序,版主可参考


/*****************************************************
SCH是网上找的,也可参照手册的:
我用的是PT2314E低电压(4~10V) 我仔细看了一下操作方法跟PT2314一样,也有喝多其他兼容的IC
PT2314/CSC2314四声道输入音质处理器IC应用电路原理图及使用指导说明
功能概述和特性
PT2314四组立体声输入,两声道输出。输入带响度的数字控制立体声音质处理
器,IIC控制,6V-10V,兼容PT2314/CSC2313/TC7314/CD3314,采用SOP-28/DIP-
28封装。它适用于车载收音机和高保_真音质系统。本产品提供可选择的输入增益和外部
响度功能,并且由微处理器串行I2C总线介面控制。主要功能如下:
① 使用CMOS技术
② 输入多路复用:
4个立体声输入
对不同的音源具有最佳适应的可选择的输入增益
③ 带响度功能,高音,低音控制
④ 音量控制(每级1.25dB)
⑤ 高音和低音控制
⑥ 二个喇叭衰减器:
二个独立的扬声器均衡和音量控制装置
独立的静音功能
⑦ 通过串性I2C总线可实现所有功能的程序化。
代码:


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不应答//////////
void noack()
{
P0CONL  = 0xB8;// 输出// Configure SDIO as push-pull
        set_sdio ;
__NOP();__NOP(); // tf:IN + tLOW
        set_sclk;;      
  __NOP();__NOP();// tf:IN + tHIGH  
}
////////////*发送应答位*/////////////////////
void mack( )
{
P0CONL  = 0xB8;// 输出// Configure SDIO as open-drain
        clr_sdio;
  __NOP();__NOP();  // tf:IN + tLOW
        set_sclk;;      
  __NOP();__NOP();// tf:IN + tHIGH
}
//////////I2C等待器件应答///////////////
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读一个字节//////////////
unsigned char rd(void)
{
        unchar out=0;
        unchar i; //有8位数据
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写一个字节/////////////
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 写入一个字节*****************************
***************************************************************************/

void PT2314SetReg(unchar dat)         //register value  //写入一个字节   
        {   
          start();
                wd(PT2314_ADD);
                wd(dat);
                iic_stop();        
        }
/****************************************************************************
************************PT2314 写入多个字节***************************
****************************************************************************/   
         
void PT2314SetNRegs(unchar *pRegVal,unchar n)//*pRegVal=pointer to register value,n=data length   
        {                                        //写入多个字节
            unchar   i;   
            start();   
                        wd(PT2314_ADD);  
            for(i = 0; i < n; i++)   
                    {   
                                wd(pRegVal);  
                    }   
            iic_stop();  
        }         
/****************************************************************************
************************通道转换选择(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:       增加音量 音调     
**************************************************************/   
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:  减小音量 音调      
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;
        }

}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表