极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2891|回复: 18

使用Arduino读取bmp图片并在1.44寸的小液晶显示

  [复制链接]
发表于 2016-10-11 19:30:01 | 显示全部楼层 |阅读模式
本帖最后由 维博哥哥 于 2016-10-11 19:33 编辑

之前搞了好久Arduino Due,在驱动液晶ILI9481的时候,一直弄不出来。然后想用usb接口驱动北通游戏手柄还是弄不出来,于是就转战stm32,想学学这底层到底怎么弄。弄stm32估计都快半个月了吧,又在IIC上面驱动BMA180搞不出来。心灰意懒,还是做arduino好玩,没事还能出来写写帖子。


这其实是好久之前做的小实验,读取bmp文件并显示出来。挺有意思的主要这次图片不再是把图片转化成文本文件,而是直接的二进制文件,真正的二进制文件。说到二进制的图片文件,bmp估计是最简单的一种了。除了文件头,后面就是图片数据。其实吧,这些文件都是很简单的,关键是找到很好的教材,我就是找到写得很整齐的小程序是用c写的,直接生成一个bmp图片。程序我挂在后面,因为之前对结构体不是很懂,所以看很多都不是很懂,有了这个程序基本上明白。


说回我们的这次小实验,使用的设备128*128像素的小液晶,一个SD卡读卡器,一个8G的TF卡。如图所示,中间的ov7670是没有用到的。


  1. #include <SPI.h>
  2. #include <SD.h>
  3. #include <UTFT.h>

  4. UTFT myGLCD(ST7735S,A2,A1,A5,A4,A3);
  5. File myFile;
  6. byte a;
  7. unsigned short pic[0x4000];
  8. void setup()
  9. {
  10.   // Open serial communications and wait for port to open:
  11.   Serial.begin(9600);
  12.   while (!Serial) {
  13.     ; // wait for serial port to connect. Needed for Leonardo only
  14.   }

  15.   myGLCD.InitLCD(PORTRAIT);
  16.   Serial.print("Initializing SD card...");
  17.   // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  18.   // Note that even if it's not used as the CS pin, the hardware SS pin
  19.   // (10 on most Arduino boards, 53 on the Mega, 14 on the Leonardo) must be left as an output
  20.   // or the SD library functions will not work.

  21.   if (!SD.begin(4)) {
  22.     Serial.println("initialization failed!");
  23.     return;
  24.   }
  25.   Serial.println("initialization done.");

  26.   
  27.   // re-open the file for reading:
  28.   myFile = SD.open("4.bmp");
  29.   if (myFile) {
  30.     Serial.println("4.bmp:");

  31.     // read from the file until there's nothing else in it:
  32.     while (myFile.available()) {
  33.       //跳过前0x36个字节的头
  34.       for(int i=0;i<0x36;i++)
  35.       {
  36.         Serial.print(myFile.read(),HEX);
  37.         Serial.print(" ");
  38.       }
  39.           //把rgb24转换成rgb16,128*128像素转换成hex是0x4000
  40.       for(int i=0;i<0x4000;i++)
  41.       {
  42.        a = myFile.read();
  43.        pic[i] = (a*32/256)<<11;
  44.        a = myFile.read();
  45.        pic[i] |= (a*64/256)<<5;   
  46.        a = myFile.read();
  47.        pic[i] |= (a*32/256);      
  48.       }
  49.       Serial.println("OK");
  50.     }
  51.     // close the file:
  52.     myFile.close();
  53.   } else {
  54.     // if the file didn't open, print an error:
  55.     Serial.println("error opening test.txt");
  56.   }
  57. }

  58. void loop()
  59. {
  60.   // nothing happens after setup
  61.   myGLCD.fillScr(255, 255, 255);
  62.   myGLCD.drawBitmap (0, 0, 128, 128, pic, 1);
  63.   delay(5000);
  64. }
复制代码
QQ图片20160928195244.jpg

程序源码相关资源.rar

2.64 MB, 下载次数: 72

回复

使用道具 举报

发表于 2016-10-12 16:21:11 | 显示全部楼层
不错,学习一下。
回复 支持 反对

使用道具 举报

发表于 2016-10-14 00:28:33 | 显示全部楼层
下一步要结合ov7670了吗
回复 支持 反对

使用道具 举报

发表于 2016-10-18 16:46:19 | 显示全部楼层
大神...求教,如何能让小车根据bmp的图像规划路线自动行走?就是些横纵线!或者jpg的也行!

如图

如图
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-23 19:26:57 | 显示全部楼层
GXJAMES 发表于 2016-10-18 16:46
大神...求教,如何能让小车根据bmp的图像规划路线自动行走?就是些横纵线!或者jpg的也行!

亲,你这问题太大了,你把bmp图片读出来,然后图像处理,然后。。。
回复 支持 反对

使用道具 举报

发表于 2016-11-11 14:29:18 | 显示全部楼层
能留个联系方式吗?想问点东西,麻烦啦
这是我QQ:1510976232
回复 支持 反对

使用道具 举报

发表于 2016-11-14 23:39:17 | 显示全部楼层
楼主在吗?帮帮我呗
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2017-11-25 13:36 , Processed in 0.047795 second(s), 10 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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