搜索
bottom↓
回复: 21

谁能帮我搞个PT2313音量控制程序

[复制链接]

出0入0汤圆

发表于 2012-4-26 17:35:38 | 显示全部楼层 |阅读模式

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-4-26 19:30:16 | 显示全部楼层
什么功能

出0入0汤圆

发表于 2012-4-26 19:49:37 | 显示全部楼层
I2C控制的,对着芯片资料应该能搞成,先自己写一下,遇到困难再问问大家。给你个兼容的芯片的资料。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-4-26 20:06:52 | 显示全部楼层
本帖最后由 liweiqiang668 于 2012-4-26 20:23 编辑

樓主的電路做得太復習了,我以做過一個用89C2051控制PT2314的,接法如圖,是以前學匯編寫的,現在改學C了,回頭再用匯編覺得很難了.程序寫得很不規範,但能用.不知對你有沒有用.
功能是:4個LED作功能指示,音量/低音/高音/輸入通道切換/帶EEPROM存儲,數碼管顯示調節數值,在非音量顯示狀態下5秒自動返回音量指示狀態,本想加入紅外搖控的,但當時在主程序中作解碼,由於延時導至數碼管會閃一下,就沒繼續弄了.本來就用來玩一下,所以也沒有花太多時間弄.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入8汤圆

发表于 2012-4-26 21:36:04 | 显示全部楼层
I2C控制的话,可以看下我的帖子,有PT2257

出0入0汤圆

发表于 2012-4-26 22:06:08 | 显示全部楼层
我在本坛发过2051/4051控制2311的帖子
楼主可以搜索一下
做个参考

出0入0汤圆

 楼主| 发表于 2012-4-27 16:56:38 | 显示全部楼层
dongls 发表于 2012-4-26 19:49
I2C控制的,对着芯片资料应该能搞成,先自己写一下,遇到困难再问问大家。给你个兼容的芯片的资料。 ...

谢谢啦!

出0入0汤圆

 楼主| 发表于 2012-4-27 17:39:31 | 显示全部楼层
liweiqiang668 发表于 2012-4-26 20:06
樓主的電路做得太復習了,我以做過一個用89C2051控制PT2314的,接法如圖,是以前學匯編寫的,現在改學C了,回頭 ...

还是有点用的!我主要是想参考一下,不过还是很感谢

出0入0汤圆

发表于 2012-6-7 21:10:16 | 显示全部楼层
这几天在做2313的程序,支持一下。

出0入0汤圆

发表于 2012-6-8 17:30:50 | 显示全部楼层
数字电位器 ic

出0入0汤圆

发表于 2012-6-8 17:58:41 | 显示全部楼层

#define PT2313_ADDR       0x88       //I2C写地址

unsigned char contr[7];// = {63, 0, 31, 31, 15, 15, 3};

#pragma warn-
eeprom char mcontr[7];
#pragma warn+

extern unsigned char tda7131savecou = 0;
//unsigned char keycou = 0;
//extern unsigned int tcount = 0, keyval = 0x0f, keysta = 1, keytem = 0x0f, keycn = 22, ctrbit = 0;
static bit muteflag = 0;

#define keypin (PINC & 0x0f)
#define fcow 5
#define fvcow (fcow + 36)
#define bcow 70
#define bvcow (bcow + 36)

//#define MovLef 0x02fd
//#define MovRig 0xc23d
//#define ValAdd 0x906f
//#define ValDec 0xa857

void Radio_dsiplay(void);
/*///////////////////////////////////////////////////
四个通道衰减处理
通道0-3单独通道处理
通道4 前两通道处理
通道5 后两通道处理
通道6 四个通道同时处理
0静音  31音最大
*////////////////////////////////////////////////////
unsigned char spkatt(unsigned char track, unsigned char atten)
{
   unsigned char flag = 0, tem;
   tem = track;
   if(track >= 0 || track <= 7)  //合法数据
   {
      track += 4;
      track <<= 5;
   }
   else
   {
      return;   
   }
   
   if(atten >= 0 && atten <= 31)
   {
      atten = 31 - atten;
   }
   else      
      return;
   
   iicstart();
   flag = write(PT2313_ADDR);
   if(tem < 4)
   {
      flag = write(track | atten);
   }
   else
   {
      if(tem == 4)
      {
         flag = write(0x80 | atten);
         flag = write(0xa0 | atten);
      }
      if(tem == 5)
      {
         flag = write(0xc0 | atten);
         flag = write(0xe0 | atten);
      }
//      if(tem == 6)
//      {
//         flag = write(0x80 | atten);
//         flag = write(0xa0 | atten);
//         flag = write(0xc0 | atten);
//         flag = write(0xe0 | atten);
//      }
   }
   iicstop();
   return(flag);
}

/*///////////////////////////////////////////////
0-2 3个输入通道
0-3 四级响度 响度为0时关闭响度
*////////////////////////////////////////////////
unsigned char audsw(unsigned char stern) //, unsigned char loud
{
   unsigned char tem = 0x44, flag  = 0;
   if(stern > 2)
      return;
      
//   if(loud > 4)
//   {
//      return;
//   }
//   else
//   {
//      loud = 3 - loud;
//      loud <<= 3;
//   }
   
   iicstart();
   flag = write(PT2313_ADDR);
//   if(loud == 4)
//   {
//      flag = write(0x44);
//   }
//   else
//   {
//      tem |= loud;
      tem |= stern;
      flag = write(tem);
//   }   
   iicstop();
   tda7131savecou = 30;                  //调音设置过后30秒保存
   return(flag);
}
//////////////////////////////////////////////////
//type 为0 时设bass
//       1     Treble
//0-15 共16级设置
//////////////////////////////////////////////////
unsigned char bastre(unsigned char type, unsigned char lay)
{
   unsigned char flag = 0;
   if(type > 1)return;
   if(lay >15)return;
      
   if(lay > 7)
   {
      lay &= 0x07;
      lay = 7 - lay;
      lay |= 0x08;
   }

   iicstart();
   flag = write(PT2313_ADDR);
   if(type)
   {
      flag = write(lay | 0x70);
      sprintf(lcd_buffer, "BA:%2d", contr[5]);
      display_ascii(34,7,1);
   }
   else
   {
      flag = write(lay | 0x60);
      sprintf(lcd_buffer, "TR:%2d", contr[4]);
      display_ascii(0,7,1);
   }
   iicstop();
   tda7131savecou = 30;                  //调音设置过后30秒保存
   return(flag);
}

//////////////////////////////////////
//音量设置0最小,63最大
//
//////////////////////////////////////
unsigned char volume(unsigned char vol)
{
   unsigned char flag = 0;
   iicstart();
   flag = write(PT2313_ADDR);
   if(vol > 64)
      return;
   if(vol == 64)
   {
      sprintf(lcd_buffer, "VOLUME:MUT");
      vol = 63;
      flag = write(vol);
   }
   else
   {
      vol = 63 - vol;
      sprintf(lcd_buffer, "VOLUME: %2d", 63 - vol);
      flag = write(vol);
   }
   
   display_ascii(68,7,1);
   iicstop();
   tda7131savecou = 30;                  //调音设置过后30秒保存
   return(flag);
}

void setload()
{
   volume(contr[0]);
   audsw(contr[1]); //,contr[6]
   spkatt(4,contr[2]);
   spkatt(5,contr[3]);
   bastre(0,contr[4]);
   bastre(1,contr[5]);
}

/*void Tda7131Display(void)
{
   sprintf(lcd_buffer, "VOLUME   ");
   display_ascii(fcow,2,1);
   sprintf(lcd_buffer, " %d", contr[0]);
   display_ascii(fvcow,2,1);
   sprintf(lcd_buffer, "AUD_SW %d", contr[1]);
   display_ascii(bcow,2,1);
   
   sprintf(lcd_buffer, "BAK_SP %d", contr[2]);
   display_ascii(fcow,3,1);
   sprintf(lcd_buffer, "FON_SP %d", contr[3]);
   display_ascii(bcow,3,1);
   
   sprintf(lcd_buffer, "TREBLE %d", contr[4]);
   display_ascii(fcow,4,1);
   sprintf(lcd_buffer, "BASS   %d", contr[5]);
   display_ascii(bcow,4,1);
   
   sprintf(lcd_buffer, "LOUNDN %d", contr[6]);
   display_ascii(fcow,5,1);
   setload();
} */

void Tda7131Load(void)
{
   unsigned char i;
   for(i = 0; i < 7; i++) contr[i] = mcontr[i];   //{63, 0, 31, 31, 15, 15, 3};
   if(contr[0] > 63)contr[0] = 30;        //音量
   if(contr[1] > 2)contr[1] = 0;          //音源
   switch(contr[1])
   {
      case 0: sprintf(lcd_buffer, "     MHz");  break;
      case 1: sprintf(lcd_buffer, " CD Play");  break;
      case 2: sprintf(lcd_buffer, " PC au  ");  break;
   }
   display_ascii16x32(0,2,1);
   if(contr[2] > 31)contr[2] = 31;        //后两声道音量
   if(contr[3] > 31)contr[3] = 31;        //前两声道音量
   if(contr[4] > 15)contr[4] = 15;        //高音值
   if(contr[5] > 15)contr[5] = 15;        //低音值
   if(contr[6] > 4)contr[6] = 4;          //响度
}
void Tda7131Save(void)
{
   unsigned char i;
   if(tda7131savecou == 1)
   {
      for(i = 0; i < 7; i++)
      {
         mcontr[i] = contr[i];
      }
   }
}

void Tda7131_Ctr(unsigned int keyval)
{
   switch(keyval)
   {
      case VolAdd:   //vol +
      {
         if(contr[0] < 63)
         {contr[0] ++; volume(contr[0]);}
         break;
      }
      case VolDec:   //vol -
      {
         if(contr[0] > 0)
         {contr[0] --;volume(contr[0]);}
         break;
      }
      case Mute:   //mute
      {
         if(muteflag)
         {
            muteflag = 0;
            volume(contr[0]);
         }
         else
         {
            muteflag = 1;
            volume(64);
         }
         break;
      }
      //-------------高音处理-----------------
      case PRT:   //tre +
      {
         if(contr[4] < 15)contr[4] ++; else contr[4] = 0;
         bastre(0,contr[4]);   
         break;
      }
      //-----------------低音处理-----------------
      case Clock: //bass
      {
         if(contr[5] < 15)contr[5] ++; else contr[5] = 0;
         bastre(1,contr[5]);
         break;
      }
      //------------------音源处理---------------
      case Mode: //ausw  Mode   EQ
      {
         if(contr[1] < 2)
         {
            contr[1] ++;
         }
         else
            contr[1] = 0;
         switch(contr[1])
         {
            case 0:
            {
               sprintf(lcd_buffer, "     MHz");
               display_ascii16x32(0,2,1);
               Radio_dsiplay();
               break;
            }
            case 1:
            {
               sprintf(lcd_buffer, " CD Play ");
               break;
            }
            case 2:
            {
               sprintf(lcd_buffer, " PC au  ");
               break;
            }
         }
         display_ascii16x32(0,2,1);
         audsw(contr[1]); //,contr[6]
         break;
      }
      //---------------------前两声道处理------------
//      case 0x5aa5: //fontsp +
//      {
//         if(contr[3] < 31)
//         {
//            contr[3] ++;
//            sprintf(lcd_buffer, " %d", contr[3]);
//            display_ascii(bvcow,3,1);
//            spkatt(5,contr[3]);
//         }
//         break;
//      }
//      case 0x42ba: //fontsp -
//      {
//         if(contr[3] > 0)
//         {
//            contr[3] --;
//            sprintf(lcd_buffer, " %d", contr[3]);
//            display_ascii(bvcow,3,1);
//            spkatt(5,contr[3]);
//         }
//         break;
//      }
      //-----------------后两声道处理----------
//      case 0x4bd4: //backsp +
//      {
//         if(contr[2] < 31)
//         {
//            contr[2] ++;
//            sprintf(lcd_buffer, " %2d", contr[2]);
//            display_ascii(fvcow,3,1);
//            spkatt(4,contr[2]);
//         }
//         break;
//      }
//      case 0x52ba: //backsp -
//      {
//         if(contr[2] > 0)
//         {
//            contr[2] --;
//            sprintf(lcd_buffer, " %2d", contr[2]);
//            display_ascii(fvcow,3,1);
//            spkatt(4,contr[2]);
//         }
//         break;
//      }
//      break;
      tda7131savecou = 30;
   }
}  

出0入0汤圆

发表于 2012-6-8 18:00:22 | 显示全部楼层
已经用了几年了,现在还在用。注释掉的是由flash空间不够精减的。

出0入0汤圆

发表于 2012-6-8 18:02:15 | 显示全部楼层
并且有自动记忆。 设置完30后记下当前设置。 30秒之内断电,再上电是启用上次设定值。

出0入0汤圆

发表于 2013-7-14 17:18:42 | 显示全部楼层
来学习了

出0入0汤圆

发表于 2016-6-15 18:26:10 | 显示全部楼层
单片机真牛,什么都用单片机了。

出0入0汤圆

发表于 2016-6-15 19:21:26 | 显示全部楼层
zwcled 发表于 2016-6-15 18:26
单片机真牛,什么都用单片机了。

抓紧学习下单片机吧~~~~~~~~~~~~~~

出0入0汤圆

发表于 2016-6-15 19:23:12 | 显示全部楼层
发点我做试验的图给楼主参考下:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-6-15 23:32:09 来自手机 | 显示全部楼层
不就个I2C接口控制嘛

出0入0汤圆

发表于 2016-6-16 08:57:26 | 显示全部楼层
lxa0 发表于 2016-6-15 19:21
抓紧学习下单片机吧~~~~~~~~~~~~~~

学了一点点了,会用点C,用过合泰的,PIC的,AVR的,51的,STM8的,以后看能不能用点STM32的。

出0入0汤圆

发表于 2016-6-16 20:09:24 | 显示全部楼层
zwcled 发表于 2016-6-16 08:57
学了一点点了,会用点C,用过合泰的,PIC的,AVR的,51的,STM8的,以后看能不能用点STM32的。 ...

祝贺你 ~~~~~~~~~~~~~~~~~~~~

出0入0汤圆

发表于 2016-9-12 17:43:36 | 显示全部楼层
lxa0 发表于 2016-6-15 19:23
发点我做试验的图给楼主参考下:

你好,请问原理图是用什么画的?多谢

出0入0汤圆

发表于 2016-9-14 12:48:13 | 显示全部楼层
52HLX 发表于 2016-9-12 17:43
你好,请问原理图是用什么画的?多谢

photoshop画的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 20:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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