搜索
bottom↓
回复: 31

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

[复制链接]

出0入0汤圆

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-6-26 09:08:25 | 显示全部楼层
TXT...字模(字库)..

出0入0汤圆

 楼主| 发表于 2009-6-26 15:39:40 | 显示全部楼层
自己顶一下!!
楼上的意思是啥呢?

出0入0汤圆

发表于 2009-6-26 16:14:40 | 显示全部楼层
可以关于我的znFAT 原创FAT32文件系统

出0入0汤圆

发表于 2009-6-26 16:22:25 | 显示全部楼层
可以关于我的znFAT 原创FAT32文件系统

出0入0汤圆

发表于 2009-6-26 16:37:28 | 显示全部楼层
你那LED点阵屏吗,多大的

出0入0汤圆

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

出0入0汤圆

发表于 2009-6-27 11:01:17 | 显示全部楼层
外包得了..

出0入0汤圆

 楼主| 发表于 2009-6-27 11:01:34 | 显示全部楼层
BMP文件,是用黑白色的,高是16,宽就根据要显示的内容来变化

出0入0汤圆

 楼主| 发表于 2009-6-27 11:02:26 | 显示全部楼层
7楼的外包,是什么意思呢?能说清楚吗?

出0入0汤圆

发表于 2009-7-14 14:52:27 | 显示全部楼层
楼主问题有没有解决了?

出0入0汤圆

发表于 2009-7-14 15:54:07 | 显示全部楼层
读取SD卡上的BMP文件显示在TFT上
http://bbs.znmcu.cn/viewthread.php?tid=23&extra=page%3D1

出0入0汤圆

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

出0入0汤圆

发表于 2009-8-3 17:47:29 | 显示全部楼层
楼主能否放点程序

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2009-8-3 21:15:33 | 显示全部楼层
void   Bmp_Control(FileManageInfo *pf)
{
           Int32u  bmpOffest = 0;
           static  Int16u  RNbyte = 0;
           Int32u  biWidth = 0;
           Int32u  bfOffest = 0;
           Int32u  SecIndex = 0;
           Int32u  LastSecIndex = 0;
            Int16u  k = 0;
           Int08u  k1 = 0;
           Int16u  RowByte_T = 0;
           Int16u  RowByte_F = 0;

           Int08u  *Buf = R_NULL;
           Int08u  SecOffset = 0;
           Int16u  ReadPoint = 0;

           //Int08u  readBmp[16];

           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[15 - k1] = Buf[ReadPoint];
           }
          
           ++RNbyte;
           if (RNbyte >= RowByte_T)
       {
              RNbyte = 0;
                   }
          
}

出0入0汤圆

 楼主| 发表于 2009-8-3 22:11:08 | 显示全部楼层
上面的程序是,读BMP文件的程序来的

出0入0汤圆

 楼主| 发表于 2009-8-3 22:22:09 | 显示全部楼层
上面的程序,Bmpd.dis_Bmp[5]~Bmpd.dis_Bmp[15] 的数据是正确的,Bmpd.dis_Bmp[0]~Bmpd.dis_Bmp[4]的是错误的。当我改为一下程序时:

void   Bmp_Control(FileManageInfo *pf)
{
           Int32u  bmpOffest = 0;
           static  Int16u  RNbyte = 0;
           Int32u  biWidth = 0;
           Int32u  bfOffest = 0;
           Int32u  SecIndex = 0;
           Int32u  LastSecIndex = 0;
       Int16u  k = 0;
           Int08u  k1 = 0;
           Int16u  RowByte_T = 0;
           Int16u  RowByte_F = 0;

           Int08u  *Buf = R_NULL;
           Int08u  SecOffset = 0;
           Int16u  ReadPoint = 0;

           //Int08u  readBmp[16];

           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[15 - k1] = Buf[ReadPoint];
           //}
           ++RNbyte;
           if (RNbyte >= RowByte_T)
       {
              RNbyte = 0;
                   }
          
}
这个时候Bmpd.dis_Bmp[3]的数据是对的。

出0入0汤圆

发表于 2009-8-3 22:24:22 | 显示全部楼层
关注一下

出0入0汤圆

 楼主| 发表于 2009-8-3 22:25:11 | 显示全部楼层
编译器用ICC的

出0入0汤圆

 楼主| 发表于 2009-8-3 22:28:48 | 显示全部楼层
忘了说:图片的宽度是448位,高16位

出0入0汤圆

 楼主| 发表于 2009-8-4 14:56:09 | 显示全部楼层
自己顶一下

出0入0汤圆

发表于 2009-8-4 15:01:30 | 显示全部楼层
吧贴顶起,让高手解决。

出0入0汤圆

 楼主| 发表于 2009-8-7 16:04:49 | 显示全部楼层
问题解决了,原来是自己大意了,SecIndex  =  SecIndex + SecOffset;造成数据出错。

出0入0汤圆

发表于 2009-8-7 23:47:22 | 显示全部楼层
厉害呀

出0入0汤圆

发表于 2009-8-8 08:16:41 | 显示全部楼层
关注下!

出0入0汤圆

发表于 2010-6-19 10:51:12 | 显示全部楼层
m

出0入0汤圆

发表于 2010-9-5 11:16:01 | 显示全部楼层
正在强烈学习ing!!!!

出0入16汤圆

发表于 2010-9-6 09:56:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-14 21:20:51 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-9-11 16:55:23 | 显示全部楼层
技术性记号

出0入0汤圆

发表于 2012-9-12 17:04:24 | 显示全部楼层
mark  学习了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-10 19:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表