📄 cd3315.h~
字号:
#ifndef _cd3315_INCLUDED_
#define _cd3315_INCLUDED_
#include <mega32.h>
#include <delay.h>
//正点原子@scut 08/09/11
//代码已经经过多次修改
//能很好的支持CD3315&PT2315&TDA7315
//这里针对CD3314,其实只要改一改就好,通用的
#define CLK PORTA.4
#define DATA PORTA.5
//0 主音量; 1,低音;2,高音;3,等响
unsigned char Audio_Ch=2;//默认选择mp3
uchar dspram=0;
eeprom uchar dspepm;
eeprom signed char DSP[5][4];
signed char voltemp[4]={55,-7,7,0};//声音寄存器
bit MUTE=0;
//以下部分为CD3315所有驱动程序代码
//单片机为ATMELMEGA8;
//发送一个byte的数据到cd3315
void send_byte(uchar num)
{
uchar t;
CLK=0;//拉低时钟开始数据传输
for(t=0;t<8;t++)
{
DATA=(num&0x80)>>7;
num<<=1;
CLK=1;CLK=0;
}
DATA=1; //上拉
CLK=1;//跳过处理应答
}
void start3315(void) //启动数据传输
{
DATA=1;CLK=1;
DATA=0;CLK=0;//START:when CLK is high,DATA change form high to low
send_byte(0x88);//发送器件地址:10001000
}
void stop3315(void) //终止数据传输
{
DATA=1;CLK=1; //wait for ack
delay_us(2); //the 9th DATAa
CLK=0;DATA=0; //STOP:when CLK is high DATA change form low to high
CLK=1;DATA=1;
}
void volume(unsigned char num) //volume control code 00****** range 0~63
{ //用于调节总音量大小 调节范围0--63
start3315();
send_byte(num|0x00);//高二位00表示调节主音量
stop3315();
}
void balance(unsigned char wh,unsigned char num)//balance control code 10****** range 0~31
{ //用来调节左右声道的音量平衡 为独立调节 可以分别静音 调节范围0--31
//0 左声道 1 右声道 衰减最大为 31
if(wh)num|=0xe0;//左声道 111XXXXX
else num|=0xc0;//右声道 110XXXXX
start3315();
send_byte(num);//发送数据
stop3315();
}
//声道和增益选择
//声道:0~3
//增益:0~3 0增最大;3不变
//噪声抑制:0,开;1,关;
void choosech(uchar ch,uchar gain,uchar loud)
{
uchar chtemp=0x40;
chtemp+=gain<<3;
chtemp+=loud<<2;
chtemp+=ch;
//printf("choose is:%d\n",chtemp);
//Show_num(2,10,chtemp);
start3315();
send_byte(chtemp);
stop3315();
}
void BassTreble(uchar jud,signed char num)//BassTreble control code 011*****
{ //Bass 0110**** Treble 0111**** range -7~7;
num=-num; //数据取反
num&=0x0f; //高低音调节 调节范围-7~7
if(num<8)num=(~num)&0x07;
start3315();
if(jud)send_byte(0x70|num);//0 低音调节 1 高音调节
else send_byte(0x60|num);
stop3315();
}
//音量初始化函数
void init_cd3315(uchar channal)
{
if(MUTE)volume(63);//静音
else volume(63-voltemp[0]);//
BassTreble(0,voltemp[1]);
BassTreble(1,voltemp[2]);
balance(1,0);//右通道音量最大,不再改变
balance(0,0);//左通道音量最大,不再改变
choosech(channal,0,voltemp[3]);//通道channal+1,增益0,超重开
}
//CD3315驱动部分到此为止
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -