mj933 发表于 2009-6-26 09:04:41

M8如何读取SD卡中的TXT和BMP文件,并通过LED屏显示出来?

小弟最近做一个项目,要从SD卡内读取TXT和BMP文件,并通过LED屏显示出来,现在SD卡的驱动可以了,LED屏的显示也可以。对于如何读取SD卡内的TXT和BMP文件,我现在无从下手了?以及如何通过读到的TXT或BMP文件的内容如何转换为LED屏显示的字模矩阵呢?
希望各位大侠多多指点?

hyz_avr 发表于 2009-6-26 09:08:25

TXT...字模(字库)..

mj933 发表于 2009-6-26 15:39:40

自己顶一下!!
楼上的意思是啥呢?

yzn09 发表于 2009-6-26 16:14:40

可以关于我的znFAT 原创FAT32文件系统

yzn09 发表于 2009-6-26 16:22:25

可以关于我的znFAT 原创FAT32文件系统

fjhcpu 发表于 2009-6-26 16:37:28

你那LED点阵屏吗,多大的

mj933 发表于 2009-6-27 10:59:42

点阵屏是16*64,显示4个字,走屏的。现在我就想通过读出SD卡中的BMP文件和TXT文件的内容,来显示。BMP的数据格式,我搞清楚了,但是就不是到读SD的时候,用那个地址才可以读到BMP的内容?还有就是读到BMP的位图数据的时候,要通过怎样的数据转换变成我LED屏的字模格式呢?

yemingxp 发表于 2009-6-27 11:01:17

外包得了..

mj933 发表于 2009-6-27 11:01:34

BMP文件,是用黑白色的,高是16,宽就根据要显示的内容来变化

mj933 发表于 2009-6-27 11:02:26

7楼的外包,是什么意思呢?能说清楚吗?

yulutong 发表于 2009-7-14 14:52:27

楼主问题有没有解决了?

yzn09 发表于 2009-7-14 15:54:07

读取SD卡上的BMP文件显示在TFT上
http://bbs.znmcu.cn/viewthread.php?tid=23&extra=page%3D1

mj933 发表于 2009-8-3 11:51:47

搞了一个月,终于搞出了一点成绩了。现在我的系统可以读出一个BMP文件了,高度是16,宽度可变的。问题是,当我宽度小于256时,显示是不会出现问题的,但我的宽度大于256时,就出现问题了,LED屏的下半部分显示正常,上半部分显示不正常?有朋友遇到这个问题吗?

lichangan 发表于 2009-8-3 17:47:29

楼主能否放点程序

fsclub 发表于 2009-8-3 17:50:24

【12楼】 mj933
积分:51
派别:
等级:------
来自:
搞了一个月,终于搞出了一点成绩了。现在我的系统可以读出一个BMP文件了,高度是16,宽度可变的。问题是,当我宽度小于256时,显示是不会出现问题的,但我的宽度大于256时,就出现问题了,LED屏的下半部分显示正常,上半部分显示不正常?有朋友遇到这个问题吗?
-----------
数据类型的问题?

mj933 发表于 2009-8-3 21:15:33

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;
                   }
          
}

mj933 发表于 2009-8-3 22:11:08

上面的程序是,读BMP文件的程序来的

mj933 发表于 2009-8-3 22:22:09

上面的程序,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的数据是对的。

h2feo4 发表于 2009-8-3 22:24:22

关注一下

mj933 发表于 2009-8-3 22:25:11

编译器用ICC的

mj933 发表于 2009-8-3 22:28:48

忘了说:图片的宽度是448位,高16位

mj933 发表于 2009-8-4 14:56:09

自己顶一下

lichangan 发表于 2009-8-4 15:01:30

吧贴顶起,让高手解决。

mj933 发表于 2009-8-7 16:04:49

问题解决了,原来是自己大意了,SecIndex=SecIndex + SecOffset;造成数据出错。

sino_design 发表于 2009-8-7 23:47:22

厉害呀

dachun 发表于 2009-8-8 08:16:41

关注下!

asdfzl 发表于 2010-6-19 10:51:12

m

Afcmiao1 发表于 2010-9-5 11:16:01

正在强烈学习ing!!!!

xstt 发表于 2010-9-6 09:56:27

mark

abcabc2356 发表于 2011-3-14 21:20:51

MARK

frankvos 发表于 2012-9-11 16:55:23

技术性记号

cckeke 发表于 2012-9-12 17:04:24

mark学习了
页: [1]
查看完整版本: M8如何读取SD卡中的TXT和BMP文件,并通过LED屏显示出来?