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

📄 1011.c

📁 这个是通过51做的SD卡读写和MP3的程序!
💻 C
字号:
/************************************************************/
/*		         VS1011 Code for   M32L					    */
/*				   By   pasyong								*/
/*				   2006-4									*/
/*				   Base ICC6.31A					        */
/************************************************************/
#include <iom32v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define MP3_DDR        DDRB
#define MP3_PORT       PORTB
#define MP3_PIN        PINB
#define MP3_CMD_CS     BIT(0)
#define MP3_DATA_CS    BIT(3)
#define MP3_DATA_REQ   BIT(2)   
#define MP3_DATA_REST  BIT(1)   
void delay_Nus(unsigned int n)
	{
	unsigned char  b;
		for (b = 1; b<n; b++)
			;
	}
//SPI initialize
// clock rate: 500000hz
void spi_init(void)
{
 DDRB=0xBF;    //SI输入,SO,SCK,SS输出
 SPCR = 0x53;  //setup SPI
 SPSR = 0x00;  //setup SPI
}
void Write_Byte_SPI(unsigned char byte)
{   
    SPDR = byte;
    while (!(SPSR & (1<<SPIF)));
}
unsigned char Read_Byte_SPI(void)
{   
    SPDR = 0xFF;
    while (!(SPSR &(1<<SPIF)));
    return SPDR;
}
void mp3_port_init()
{
spi_init();
MP3_DDR|=MP3_DATA_CS |MP3_CMD_CS|MP3_DATA_REST;
MP3_DDR&=~MP3_DATA_REQ;
MP3_PORT|=MP3_DATA_CS |MP3_CMD_CS|MP3_DATA_REST;
//MP3_PORT&=~MP3_DATA_REST;
}
void vs1011_cmd_write(uchar address,uint data)
{ 
MP3_PORT|=MP3_DATA_CS;       //MP3_DATA_CS=1;
MP3_PORT&=~MP3_CMD_CS;       //MP3_CMD_CS=0;
Write_Byte_SPI(0x02);      //VS1011的写命令
//delay_nus(20);
Write_Byte_SPI(address);   //地址
Write_Byte_SPI(data>>8);
Write_Byte_SPI(data);
//delay_nus(200);
MP3_PORT|=MP3_CMD_CS;       //MP3_CMD_CS=1;
} 

void vs1011_data_write(uchar data)
{
MP3_PORT&=~MP3_DATA_CS;         //MP3_DATA_CS=0;
Write_Byte_SPI(data);
MP3_PORT|=MP3_DATA_CS;         //MP3_DATA_CS=1;
MP3_PORT|=MP3_CMD_CS;         //MP3_CMD_CS=1; 
}

uint vs1011_read(uchar address)
{
uchar temp1=0;
uint temp=0; 
MP3_PORT|=MP3_DATA_CS;        //MP3_DATA_CS=1;
MP3_PORT&=~MP3_CMD_CS;        //MP3_CMD_CS=0;
Write_Byte_SPI(0x03);      //VS1011的读命令
//delay_nus(20);
Write_Byte_SPI(address);   //地址
temp=Read_Byte_SPI();
temp=temp<<8;
temp1=Read_Byte_SPI();
temp=temp|temp1; 
MP3_PORT|=MP3_CMD_CS;       //MP3_CMD_CS=1;
return temp;

}

void vs1011_init(void)
{

delay_Nus(50);
vs1011_cmd_write(0x00,0x0800);     //NEW MODE
vs1011_cmd_write(0x02,0X75);       //BASS
vs1011_cmd_write(0x03,0X9800);     //CLOCK F
vs1011_cmd_write(0x0b,0X3030);    //VOLUME
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -