📄 pt2314.c
字号:
#include "myiic.h"
//代码已经经过多次修改
//能很好的支持CD3315&PT2315&TDA7315
//这里针对CD3314,其实只要改一改就好,通用的
//音量数据缓存.0,主音量,1,高音,2,低音,3,左声道,4,右声道,5,超重低音
//正点原子@SCUT
u8 voltemp[6]={60,7,7,0,0,0};//声音寄存器,第一次刷机时的默认设置
u8 INITDSP=0; //0~4 eeprom级别 五种音效
u8 Audio_Ch=MP3_Audio; //声道定义 默认MP3
//第31个字节用来保存 DSP应当调用的编号
#define DSPADDR 0 //DSP存放的地址区间首地址 0~30
//保存DSP设置到eeprom
//保存区域:FM24C16的 0~30这段地址区间,总共30个字节
//地址:30用来保存INITDSP的值
//check ok 09/05/20
void save_dsp(void)
{
u8 t;
for(t=0;t<6;t++)FM24C16_WriteOneByte(DSPADDR+6*INITDSP+t,voltemp[t]);//voltemp保存到INITDSP位置
}
//从eeprom调用DSP数据
//check ok 09/05/20
void read_dsp(void)
{
u8 t;
for(t=0;t<6;t++)voltemp[t]=FM24C16_ReadOneByte(DSPADDR+6*INITDSP+t);//调用DSP[INITDSP]到voltemp
}
//主音量调节
//volume control code 00****** range 1~64
//num:1~64
//check ok 09/05/19
void volume(u8 num)
{
num=64-num;//转换为 0~63
IIC_Start();
IIC_Send_Byte(0X88);//发送器件地址0X88,发送模式
IIC_Wait_Ack();
IIC_Send_Byte(num&0x3F);//设置音量 0~63
IIC_Wait_Ack();
IIC_Stop();
}
//balance control code:10****** range 1~32
//用来调节左右声道的音量平衡 为独立调节 可以分别静音 调节范围1--32
//wh:0 左声道,1 右声道 衰减最大为 31
//num:1~32
//check ok 09/05/19
void balance(u8 wh,u8 num)
{
num=32-num;//转换为 0~31
if(wh)num|=0xe0;//左声道 111XXXXX
else num|=0xc0; //右声道 110XXXXX
IIC_Start();
IIC_Send_Byte(0X88);//发送器件地址0X88,发送模式
IIC_Wait_Ack();
IIC_Send_Byte(num);//发送数据
IIC_Wait_Ack();
IIC_Stop();
}
//声道和增益选择
//声道:0~3
//增益:0~3 0增最大;3不变
//噪声抑制:0,开;1,关;
//check ok 09/05/19
void choosech(u8 ch,u8 gain,u8 loud)
{
u8 chtemp=0x40;
chtemp+=gain<<3;
chtemp+=loud<<2;
chtemp+=ch;
IIC_Start();
IIC_Send_Byte(0X88);//发送器件地址0X88,发送模式
IIC_Wait_Ack();
IIC_Send_Byte(chtemp);
IIC_Wait_Ack();
IIC_Stop();
}
//jud:0 低音调节 1 高音调节
//Bass 0110**** Treble 0111****
//num: 1~15
//check ok 09/05/19
void BassTreble(u8 jud,u8 num)
{
num-=1;
if(num>7)num=22-num;
IIC_Start();
IIC_Send_Byte(0X88);//发送器件地址0X88,发送模式
IIC_Wait_Ack();
if(jud)IIC_Send_Byte(0x70|num);//0 低音调节 1 高音调节
else IIC_Send_Byte(0x60|num);
IIC_Wait_Ack();
IIC_Stop();
}
//音量初始化函数
//check ok 09/05/19
//channal :0~4 4:静音
void init_pt2314(u8 channal)
{
Audio_Ch=channal;//记录当前路径
if(channal==4){volume(1);return;}//静音
volume(voltemp[0]); //设置音量
BassTreble(1,voltemp[1]);//高音设置
BassTreble(0,voltemp[2]);//低音设置
balance(0,voltemp[3]);//左通道音量最大
balance(1,voltemp[4]);//右通道音量最大
choosech(channal,3,voltemp[5]);//通道channal+1,增益0,超重开
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -