这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » DIYMP3开发进程

共42条 3/5 1 2 3 4 5 跳转至
高工
2012-09-23 16:39:13     打赏
21楼

频谱功能测试成功

高工
2012-09-24 14:42:06     打赏
22楼

显示歌曲的数量和当前的歌曲序号,显示播放的时间,改进了频谱显示效果

高工
2012-09-26 10:24:27     打赏
23楼

界面改变,加入了音量调节

高工
2012-09-29 17:25:06     打赏
24楼

播放界面

选择歌曲界面

高工
2012-10-02 16:47:14     打赏
25楼
1.开机没有插入SD卡的界面

2.插入SD看后的界面

3.进入选歌的界面

4.选定歌曲后开始播放界面

高工
2012-10-06 15:13:04     打赏
26楼

歌曲列表

小说模式

播放界面

高工
2012-10-07 11:32:23     打赏
27楼
SD卡部分代码:




上面是几个最基本的SD卡函数

高工
2012-10-07 11:33:30     打赏
28楼

uint8 SDWriteSector(uint32 Addr,uint8 *pBuffer)        //SD卡写扇区函数
{
    uint8 pCmd[] = {0x58,0x00,0x00,0x00,0x00,0xff};
    uint8 Count = 0;
    uint8 Temp = 0;
    uint16 i;
    Addr <<= 9;
    pCmd[1] = ((Addr & 0xff000000) >> 24);
    pCmd[2] = ((Addr & 0x00ff0000) >> 16);
    pCmd[3] = ((Addr & 0x0000ff00) >> 8); 
    do
    {
        Temp = SDWriteCommand(pCmd);
 Count++;
 if(Count >= DISPLAY_COUNT)
 {
     SDSetCS();
     return 1;
 }
    }while(Temp != 0);
    for(i = 0;i < 100;i++)
    {
        SpiReadByte();
    }
    SDClrCS();
    SpiWriteByte(0xfe);      //start
    for(i = 0;i < 512;i++)
    {
        SpiWriteByte(pBuffer[i]);
    }
    SpiWriteByte(0xff);
    SpiWriteByte(0xff);      //CRC
   
    Temp = SpiReadByte();
    if((Temp & 0x1f) != 0x05)
    {
        SDSetCS();
 return WRITE_BLOCK_ERROR;
    }
    while(SpiReadByte() != 0xff);
    SDSetCS();
    SpiReadByte();
    return 0;
}


uint8 SDReadSector(uint32 Addr,uint8 *pBuffer)   //SD卡读扇区函数
{
    uint8 pCmd[] = {0x51,0x00,0x00,0x00,0x00,0xff};
    uint8 Count = 0;
    uint8 Temp = 0;
    uint16 i;
    Addr <<= 9;
    pCmd[1] = ((Addr & 0xff000000) >> 24);
    pCmd[2] = ((Addr & 0x00ff0000) >> 16);
    pCmd[3] = ((Addr & 0x0000ff00) >> 8);
    SDClrCS();
    do
    {
        Temp = SDWriteCommand(pCmd);
 Count++;
 if(Count >= DISPLAY_COUNT)
 {
     SDSetCS();
     return 1;
 }
    }while(Temp != 0);
    while(SpiReadByte() != 0xfe);
    for(i = 0;i < 512;i++)
    {
        pBuffer[i] = SpiReadByte();
    }
    SpiReadByte();
    SpiReadByte();
    SDSetCS();
    SpiReadByte();
    return 0;
}

有了上面的函数可以与znFAT挂接


高工
2012-10-07 11:38:22     打赏
29楼

void TFTWriteData(uint8 DH,uint8 DL)
{
    TFTClrCS();
    TFTSetRS();
    DB_Prot_Data = DH;
    TFTClrWR();
    TFTSetWR();
    DB_Prot_Data = DL;
    TFTClrWR();
    TFTSetWR();
    TFTSetCS();
}

void TFTWriteCommand(uint8 DH,uint8 DL)
{
    TFTClrCS();
    TFTClrRS();
    DB_Prot_Data = DH;
    TFTClrWR();
    TFTSetWR();
    DB_Prot_Data = DL;
    TFTClrWR();
    TFTSetWR();
    TFTSetCS();
}

void TFTWriteCmdData(uint8 Cmd,uint16 Dat)
{
    uint8 m,n;
    m = Dat >> 8;
    n = Dat;
    TFTWriteCommand(0x00,Cmd);
    TFTWriteData(m,n);
}

void TFTWrite16bData(uint16 Dat)
{
    uint8 m,n;
    m = Dat >> 8;
    n = Dat;
    TFTWriteData(m,n);
}

void TFTInit()        //////////初始化
{
  
   
    TFTSetCS();
    TFTClrRST();
    TFTSetRST();
    TFTSetTouchCS();
    TFTSetTouchCLK();
    TFTSetTouchDIN();
    TFTSetTouchCLK();
  TFTWriteCmdData(0x00e5, 0x8000); 
  TFTWriteCmdData(0x0000, 0x0001); 
  TFTWriteCmdData(0x0001, 0x0100);//输出方式控制0x00,0x100,0x400,0x500,正常显示用0x00
  TFTWriteCmdData(0x0002, 0x0700);//可设置为0x400或0x700;
  TFTWriteCmdData(0x0003, 0x1010);//可设置为0x1030,0x1000,0x1010,0x1020,0x1038,0x1028,0x1018,0x1008;
                            //还可以把最前面的1去掉,如:0x18;
                            //BGR = " 0 ":遵循gb顺序来写的像素数据【即去掉那个1】
                            //BGR = " 1 ":将RGB数据换成BGR数据再写入GRAM【即不去掉那个1】
                            //横向设置0x1018最好/纵向设置0x1000最好
  TFTWriteCmdData(0x0004, 0x0000);//显示大小尺寸控制寄存器0x00为1倍大小,即240x320
  TFTWriteCmdData(0x0008, 0x0202);//可设置为0x0202,0x00, 
  TFTWriteCmdData(0x0009, 0x0000);//扫描设置 
  TFTWriteCmdData(0x000A, 0x0000);
  TFTWriteCmdData(0x000C, 0x0000); 
  TFTWriteCmdData(0x000D, 0x0000); 
  TFTWriteCmdData(0x000F, 0x0000); 
  //-----Power On sequence
  TFTWriteCmdData(0x0010, 0x0000); 
  TFTWriteCmdData(0x0011, 0x0007); 
  TFTWriteCmdData(0x0012, 0x0000); 
  TFTWriteCmdData(0x0013, 0x0000); 
  TFTWriteCmdData(0x0010, 0x17B0); 
  TFTWriteCmdData(0x0011, 0x0007); 
  TFTWriteCmdData(0x0012, 0x013A); 
  TFTWriteCmdData(0x0013, 0x1A00); 
  TFTWriteCmdData(0x0029, 0x000c);  
  //-----Gamma control
  TFTWriteCmdData(0x0030, 0x0000); 
  TFTWriteCmdData(0x0031, 0x0505); 
  TFTWriteCmdData(0x0032, 0x0004); 
  TFTWriteCmdData(0x0035, 0x0006); 
  TFTWriteCmdData(0x0036, 0x0707); 
  TFTWriteCmdData(0x0037, 0x0105); 
  TFTWriteCmdData(0x0038, 0x0002); 
  TFTWriteCmdData(0x0039, 0x0707); 
  TFTWriteCmdData(0x003C, 0x0704); 
  TFTWriteCmdData(0x003D, 0x0807); 
  //-----Set RAM area
  TFTWriteCmdData(0x0050, 0x0000);
  TFTWriteCmdData(0x0051, 0x00EF);
  TFTWriteCmdData(0x0052, 0x0000);
  TFTWriteCmdData(0x0053, 0x013F);
  TFTWriteCmdData(0x0060, 0x2700);
  TFTWriteCmdData(0x0061, 0x0001);
  TFTWriteCmdData(0x006A, 0x0000);
  TFTWriteCmdData(0x0021, 0x0000); 
  TFTWriteCmdData(0x0020, 0x0000); 
  //-----Partial Display Control
  TFTWriteCmdData(0x0080, 0x0000); 
  TFTWriteCmdData(0x0081, 0x0000);
  TFTWriteCmdData(0x0082, 0x0000);
  TFTWriteCmdData(0x0083, 0x0000);
  TFTWriteCmdData(0x0084, 0x0000); 
  TFTWriteCmdData(0x0085, 0x0000);
  //-----Panel Contro
  TFTWriteCmdData(0x0090, 0x0010); 
  TFTWriteCmdData(0x0092, 0x0000);
  TFTWriteCmdData(0x0093, 0x0003);
  TFTWriteCmdData(0x0095, 0x0110);
  TFTWriteCmdData(0x0097, 0x0000); 
  TFTWriteCmdData(0x0098, 0x0000);
  //-----Display on
  TFTWriteCmdData(0x0007, 0x0173); 
}


void TFTSetPos(uint16 x0,uint16 x1,uint16 y0,uint16 y1) ////////定坐标
{
  TFTWriteCmdData(WINDOW_XADDR_START,x0);
  TFTWriteCmdData(WINDOW_XADDR_END,x1);
  TFTWriteCmdData(WINDOW_YADDR_START,y0);
  TFTWriteCmdData(WINDOW_YADDR_END,y1);
  TFTWriteCmdData(GRAM_XADDR,x0);
  TFTWriteCmdData(GRAM_YADDR,y0);
  TFTWriteCommand(0x00,0x22);//LCD_WriteCMD(GRAMWR);
}

void ClearScreen(uint16 bColor)      //清屏
{
 unsigned int i,j;
 TFTSetPos(0,240,0,320);//320x240
 for (i=0;i<320;i++)
 {
 
    for (j=0;j<240;j++)
        TFTWrite16bData(bColor);

 }
}

void  ClearPartScreen(uint16 x1,uint16 x2,uint16 y1,uint16 y2,uint16 color)//清部分屏幕
{
   unsigned int i,j;
   TFTSetPos(x1,x2,y1,y2);
   for (i=0;i <= (y2 - y1);i++)
 {
 
    for (j=0;j <= (x2 - x1);j++)
        TFTWrite16bData(color);

 }
}

void TFTDrawPicture(uint16 x0,uint16 x1,uint16 y0,uint16 y1,uint8 const *pPicture)
{
    uint16 i,j;
    uint8 a,b;
    TFTSetPos(x0,x1,y0,y1);
    for (i = y0;i <= y1;i++)
    {
      for (j = x0;j <= x1;j++)
      {
         a = *pPicture++;
  b = *pPicture++;
         TFTWriteData(b,a);
      }
    }
}
/////////////////////////////////////////////////////////////////////////////////上面是最基本的彩屏程序了,其他的就加入字库后扩展


高工
2012-10-07 11:44:55     打赏
30楼


void  VS1003WriteByte(uint8 Dat)
{
    uint8 i;
    VS1003ClrSCLK();
    for(i = 0;i < 8;i++)
    {
        if(Dat & 0x80)
     VS1003SetMOSI();
 else
     VS1003ClrMOSI();
 VS1003SetSCLK();
 Dat <<= 1;
 VS1003ClrSCLK();
    }
}

uint8  VS1003ReadByte()
{
    uint8 i,Temp = 0;
    VS1003ClrSCLK();
    for(i = 0;i < 8;i++)
    {
        Temp <<= 1;
 VS1003SetSCLK();
 if(Read_MISO)
     Temp |= 0x01;
 VS1003ClrSCLK();
    }
    return Temp;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

void  VS1003WriteRegister(uint8 Addr,uint8 DBH,uint8 DBL)
{
    while(!Read_DREQ);
    VS1003ClrXCS();
    VS1003WriteByte(VS_WRITE);
    VS1003WriteByte(Addr);
    VS1003WriteByte(DBH);
    VS1003WriteByte(DBL);
    VS1003SetXCS();
}

uint16  VS1003ReadRegister(uint8 Addr)
{
    uint16 Temp = 0;
    while(!Read_DREQ);
    VS1003ClrXCS();
    VS1003WriteByte(VS_READ);
    VS1003WriteByte(Addr);
    Temp = VS1003ReadByte();
    Temp <<= 8;
    Temp |= VS1003ReadByte();
    VS1003SetXCS();
    return Temp;
}
/////////////////////////////////////////////////////////////////////////////////////

void  VS1003Init()
{
   
    uint16 TestDb = 0;
    uint8 TestPort = 0;
    TestPort = Read_MISO;
    VS1003PortInit();
    TestPort = Read_MISO;
    VS1003ClrXREST();
    delay100us();
    VS1003SetXCS();
    VS1003SetXDCS();
    VS1003ClrSCLK();
    VS1003SetXREST();
    while(!Read_DREQ);
    VS1003WriteRegister(VS_MODE,0x08,0x04);
    while(!Read_DREQ);
    VS1003WriteRegister(VS_CLOCKF,0x98,0x00);
    delay100us();
   
    VS1003WriteRegister(VS_AUDATA,0xbb,0x81);
    delay100us();
    VS1003WriteRegister(VS_BASS,0x00,0x55);
    delay100us();
    VS1003WriteRegister(VS_VOL,31,31);
    delay100us();
    VS1003WriteByte(0);
    VS1003WriteByte(0);
    VS1003WriteByte(0);
    VS1003WriteByte(0);
    delay100ms();
    TestDb = VS1003ReadRegister(VS_BASS);
    delay100ms();
}


共42条 3/5 1 2 3 4 5 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]