⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cd3315.h~

📁 用Mega32+VS1003做的MP3(FAT32文件系统浏览)——源代码
💻 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 + -