M8如何读取SD卡中的TXT和BMP文件,并通过LED屏显示出来?
小弟最近做一个项目,要从SD卡内读取TXT和BMP文件,并通过LED屏显示出来,现在SD卡的驱动可以了,LED屏的显示也可以。对于如何读取SD卡内的TXT和BMP文件,我现在无从下手了?以及如何通过读到的TXT或BMP文件的内容如何转换为LED屏显示的字模矩阵呢?希望各位大侠多多指点? TXT...字模(字库).. 自己顶一下!!
楼上的意思是啥呢? 可以关于我的znFAT 原创FAT32文件系统 可以关于我的znFAT 原创FAT32文件系统 你那LED点阵屏吗,多大的 点阵屏是16*64,显示4个字,走屏的。现在我就想通过读出SD卡中的BMP文件和TXT文件的内容,来显示。BMP的数据格式,我搞清楚了,但是就不是到读SD的时候,用那个地址才可以读到BMP的内容?还有就是读到BMP的位图数据的时候,要通过怎样的数据转换变成我LED屏的字模格式呢? 外包得了.. BMP文件,是用黑白色的,高是16,宽就根据要显示的内容来变化 7楼的外包,是什么意思呢?能说清楚吗? 楼主问题有没有解决了? 读取SD卡上的BMP文件显示在TFT上
http://bbs.znmcu.cn/viewthread.php?tid=23&extra=page%3D1 搞了一个月,终于搞出了一点成绩了。现在我的系统可以读出一个BMP文件了,高度是16,宽度可变的。问题是,当我宽度小于256时,显示是不会出现问题的,但我的宽度大于256时,就出现问题了,LED屏的下半部分显示正常,上半部分显示不正常?有朋友遇到这个问题吗? 楼主能否放点程序 【12楼】 mj933
积分:51
派别:
等级:------
来自:
搞了一个月,终于搞出了一点成绩了。现在我的系统可以读出一个BMP文件了,高度是16,宽度可变的。问题是,当我宽度小于256时,显示是不会出现问题的,但我的宽度大于256时,就出现问题了,LED屏的下半部分显示正常,上半部分显示不正常?有朋友遇到这个问题吗?
-----------
数据类型的问题? void Bmp_Control(FileManageInfo *pf)
{
Int32ubmpOffest = 0;
staticInt16uRNbyte = 0;
Int32ubiWidth = 0;
Int32ubfOffest = 0;
Int32uSecIndex = 0;
Int32uLastSecIndex = 0;
Int16uk = 0;
Int08uk1 = 0;
Int16uRowByte_T = 0;
Int16uRowByte_F = 0;
Int08u*Buf = R_NULL;
Int08uSecOffset = 0;
Int16uReadPoint = 0;
//Int08ureadBmp;
biWidth= Bmpd.biWidth; //BMP图片的宽度
bfOffest = Bmpd.bfOffBits;//BMP图片数据的编移量
//SetOffNbyte(readBmp, 16);
SetOffNbyte(Bmpd.dis_Bmp, 16);
k = biWidth % 8;
RowByte_T = biWidth / 8;
if (k)
{
RowByte_T = RowByte_T + 1; // 一行数据占有的有效字节数
}
k = RowByte_T % 4;
if (k)
{
RowByte_F = RowByte_T + (4 - k); // 一行数据占有的字节数
}
else
{
RowByte_F = RowByte_T;
}
SecIndex = GetFristSecOfClus(pf->CurClus);
RNbyte = 1;
for (k1 = 0; k1 < 16; k1++)
{
bmpOffest =k1 * RowByte_F + bfOffest + RNbyte;
SecOffset =bmpOffest / 512;
SecIndex=SecIndex + SecOffset;
ReadPoint =bmpOffest % 512;
if(LastSecIndex != SecIndex)
{
Buf = OpenSector(SecIndex);//这里出问题了
LastSecIndex = SecIndex;
}
Bmpd.dis_Bmp = Buf;
}
++RNbyte;
if (RNbyte >= RowByte_T)
{
RNbyte = 0;
}
} 上面的程序是,读BMP文件的程序来的 上面的程序,Bmpd.dis_Bmp~Bmpd.dis_Bmp 的数据是正确的,Bmpd.dis_Bmp~Bmpd.dis_Bmp的是错误的。当我改为一下程序时:
void Bmp_Control(FileManageInfo *pf)
{
Int32ubmpOffest = 0;
staticInt16uRNbyte = 0;
Int32ubiWidth = 0;
Int32ubfOffest = 0;
Int32uSecIndex = 0;
Int32uLastSecIndex = 0;
Int16uk = 0;
Int08uk1 = 0;
Int16uRowByte_T = 0;
Int16uRowByte_F = 0;
Int08u*Buf = R_NULL;
Int08uSecOffset = 0;
Int16uReadPoint = 0;
//Int08ureadBmp;
biWidth= Bmpd.biWidth; //BMP图片的宽度
bfOffest = Bmpd.bfOffBits;//BMP图片数据的编移量
//SetOffNbyte(readBmp, 16);
SetOffNbyte(Bmpd.dis_Bmp, 16);
k = biWidth % 8;
RowByte_T = biWidth / 8;
if (k)
{
RowByte_T = RowByte_T + 1; // 一行数据占有的有效字节数
}
k = RowByte_T % 4;
if (k)
{
RowByte_F = RowByte_T + (4 - k); // 一行数据占有的字节数
}
else
{
RowByte_F = RowByte_T;
}
SecIndex = GetFristSecOfClus(pf->CurClus);
//for (k1 = 11; k1 < 16; k1++)
// {
RNbyte = 1;
k1 = 12;
bmpOffest =k1 * RowByte_F + bfOffest + RNbyte;
SecOffset =bmpOffest / 512;
SecIndex=SecIndex + SecOffset;
ReadPoint =bmpOffest % 512;
if(LastSecIndex != SecIndex)
{
Buf = OpenSector(SecIndex);
LastSecIndex = SecIndex;
}
Bmpd.dis_Bmp = Buf;
//}
++RNbyte;
if (RNbyte >= RowByte_T)
{
RNbyte = 0;
}
}
这个时候Bmpd.dis_Bmp的数据是对的。 关注一下 编译器用ICC的 忘了说:图片的宽度是448位,高16位 自己顶一下 吧贴顶起,让高手解决。 问题解决了,原来是自己大意了,SecIndex=SecIndex + SecOffset;造成数据出错。 厉害呀 关注下! m 正在强烈学习ing!!!! mark MARK 技术性记号 mark学习了
页:
[1]