分享一下BMP文件的格式和怎么去读取它和显示
void DisplayBMP(uint16 x,uint16 y,uint8 *pBMP)
{
uint32 SizeBmp = 0;
// ClearScreen(Magenta);
FAT32_Open_File(&OpenFileInfo,pBMP,0);
FAT32_Read_File(&OpenFileInfo,0,54,gTableBmp);
if((gTableBmp[0] == 'B') && (gTableBmp[1] == 'M'))
{
gBmpOffSet = gTableBmp[13];
gBmpOffSet <<= 8;
gBmpOffSet |= gTableBmp[12];
gBmpOffSet <<= 8;
gBmpOffSet |= gTableBmp[11];
gBmpOffSet <<= 8;
gBmpOffSet |= gTableBmp[10];
gBmpW = gTableBmp[21];
gBmpW <<= 8;
gBmpW |= gTableBmp[20];
gBmpW <<= 8;
gBmpW |= gTableBmp[19];
gBmpW <<= 8;
gBmpW |= gTableBmp[18];
gBmpH = gTableBmp[25];
gBmpH <<= 8;
gBmpH |= gTableBmp[24];
gBmpH <<= 8;
gBmpH |= gTableBmp[23];
gBmpH <<= 8;
gBmpH |= gTableBmp[22];
gBmpBit = gTableBmp[28];
SizeBmp = gBmpH * gBmpW * gBmpBit;
ClearPartScreen(x,x + gBmpW - 1,y,y + gBmpH - 1,Magenta);
//TFTSetPos(x,x + gBmpW - 1,y,y + gBmpH - 1);
gbmpx = x;
gbmpy = y;
FAT32_Read_FileX(&OpenFileInfo,gBmpOffSet,SizeBmp,DrawBmp);
}
else
{
TFTDisplayHzString(100,163,"不是BMP文件...",Red,Magenta);
}
}
彩屏一般不带字库的,在刚开始的时候我也无法去在上面大量显示汉字,取模太多装不下。导致开始的歌曲选择也只能靠图片来选择歌曲,也无法显示出每首歌对于的歌曲名和歌手名。在之后我在网上找到了些资料,是关于制作彩屏字库的,然后开始搞这个字库的问题。在网上找到了一个字库的.bin文件,我将它放在SD卡里面,来读取字库里面的数据显示对应的汉字,这就有了一个很糟糕的问题,那就是速度慢了,显示汉字时间太长,所以显示一些信息还可以,但是如果要刷新歌词什么的,我感觉很困难,这几天也试过很多方法但是也没有好的办法来提高这个速度。真的很纠结了......
在做DIYMP3的整个过程中遇到了一些问题,慢慢的,只要自己琢磨还是会解决的。一个DIYMP3的制作,刚开始就需要写一个简单的菜单,我感觉菜单界面是一个有人机界面作品必须要的。我是用结构体来写的菜单,我觉得挺好用的,所以这里分享给大家,主要代码如下:
typedef struct
{
uint8 KeyStateIndex; //当前的状态索引号
uint8 KeyDownState; //按下向下的按键后的索引号
uint8 KeyUpState; //按下向上的索引号
uint8 KeySureState; //按下确定
uint8 KeyBackState; //按下返回
void (*CurrentOperate)(); //当前状态需要执行的函数
}MenuTab;
一个结构体可以解决菜单的很多问题了。
在就是SD卡是必须要搞的,文件级操作是这个的基础了。我借鉴的是振南的FAT,经过很多网友使用,znFAT已经相当的完整了,可以完成一些项目和作品。znfat操作也很简单,只需要提供扇区读写函数给FAT调用就好了,其他的就是定义所使用外部存储器的类型,SD卡还是U盘等,上面的东西设定好了之后再声明一个结构体,
struct FAT32_Init_Arg *pArg;
struct FAT32_Init_Arg FAT_Init_SD;
struct FileInfoStruct OpenFileInfo;
unsigned char Dev_No;
pArg = &FAT_Init_SD;
Dev_No = SDCARD;
之后就是VS1003,其实VS1003基本操作很简单,就是读写寄存器,我想分享的是频谱,在读频谱的是要给VS1003写入一段代码,之后就可以读取频谱了,14个频段。具体代码太长这里就不贴上来了,在沁恒的网站上有相应的资料。
彩屏是一个很纠结的问题,就是没有字库,刚开始我也没多考虑这个,只是觉得取模就好了。但是最后要大量显示文字和读取歌曲信息的时候就很要命了,这个取模简直弱爆了。最后在网上查了开始琢磨着字库,经过在网上各大论坛逛了几天找到了一个字库文件.bin文件。我开始尝试把这个文件放在SD卡里面,然后读取里面的数据显示。尝试了半天感觉可以,但是速度感觉很慢,这个就直接否定我要显示歌词,速度慢跟不上。字库一般论坛上很多,大家可以自己找找哦!按照我的用法用就好了。
刚开始没显示一张图片都要用软件去取模,太麻烦了,开始解码BMP文件,这种格式的图片编码有一定规律,可以通过单片机解码然后去显示,实现了,现在方便多了,对于BMP文件的编码格式,可以浏览http://baike.baidu.com/view/7671.htm
最后一个问题就是对于MP3文件编码的分析了,对于MP3编码我更喜欢的是ID3V2,这个编码对于单片机去分析有很大好处,它的信息都在文件的开头,读出来的时间花的少,ID3V1信息都在文件最后的128个字节,如果去读取花的时间要长很多。这里分享一个链接http://baike.baidu.com/view/66078.htm
这次我学到了很多,,,感谢这次活动了,瑞萨单片机IO功能太多,用起来得好好把握!!!学习东西还是要在做一个具体的实物中来探索和发现。
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |