一、实现过程

1.制作对应规格的数字和显示画面图片;

2.根据图片规格分配地址,存进片外flash,图片烧录用MinPro100G工具;

3.参考规格书,软件调试。

二、涉及软硬件

墨水瓶:ED060XCD(Eink元太科技)1024*758、墨水瓶驱动芯片:IT8951E(iTE联阳半导体-台产)、MCU:STM32F103RCT6

三、显示数字

显示数字有两种方法,本质是一样的,本文采用第二种方法:

1.直接数字取模放在.c文件中,用的时候直接送显;

2.取模之后存进片外flash中,用的时候先读取再送显。

送显函数代码如下:

//******************************************************************
//函数名:  LCD_ShowNumber
//功能:    显示3位数字
//输入参数:x,y :起点坐标
//          number数字大小
//          mode:模式 取2:GC16
//******************************************************************
u8 LCD_ShowNumber(u16 x,u16 y,u16 number,u8 mode)
{     char buf[3]={0};u8 failcount=0;if(number<=9){failcount=0;sprintf(buf,"00%d",number);while(LCD_ShowString(x,y,buf,mode)==FAIL){ScreenRestart();                                   //重启墨水屏failcount++;if(failcount>=3)break;                                                   }       }else if(10<=number&&number<=99){failcount=0;sprintf(buf,"0%d",number);while(LCD_ShowString(x,y,buf,mode)==FAIL){ScreenRestart();                                   //重启墨水屏failcount++;if(failcount>=3)break;                                                    }       }else if(100<=number&&number<=999){failcount=0;sprintf(buf,"%d",number);while(LCD_ShowString(x,y,buf,mode)==FAIL){ScreenRestart();                                   //重启墨水屏failcount++;if(failcount>=2)break;                                                   }                       }else if(999<number){failcount=0;number=999;sprintf(buf,"%d",number);while(LCD_ShowString(x,y,buf,mode)==FAIL){ScreenRestart();                                   //重启墨水屏failcount++;if(failcount>=3)break;                                                  }               }   return SUCCESS;

显示驱动函数代码如下:数字图片大小--长:93,宽:52,显示数字图片是先从片外flash里面读出来,然后再显示,显示函数调用的ITE提供的库函数。

#define  PIXEL  IT8951_4BPP
#define NUMBER_width 52            //数值的长宽
#define NUMBER_height 93
u32 NUMBER_ADD=388096*5;      //记得烧写FLASH地址
u8 LCD_ShowString(u16 x,u16 y,char *p,u8 mode)
{     u8 i,j,k; uint8_t buff[2418];j=strlen(p);for(i=0;i<j;i++){k=p[i]-'0';if(i<2)     //目前只有3位数 每个数是52*93   中间空8{if(FlashReadData(buff,NUMBER_ADD+sizeof(buff)*k,sizeof(buff))==FAIL)return FAIL;           if(LCD_ShowChar(x+(NUMBER_width+8)*i,y,NUMBER_width,NUMBER_height,buff,mode,NUMBER)==FAIL)return FAIL;                                }else{if(FlashReadData(buff,NUMBER_ADD+(NUMBER_width*NUMBER_height/(4-PIXEL))*k,NUMBER_width*NUMBER_height/(4-PIXEL))==FAIL)return FAIL;if(LCD_ShowChar(x+(NUMBER_width+8)*i,y,NUMBER_width,NUMBER_height,buff,mode,NUMBER)==FAIL)                                return FAIL;                                  }}    if(IT8951DisplayArea(x,y,60*strlen(p)-8,93,3)==FAIL)return FAIL;return SUCCESS;
}

四、显示图片

因为图片暂用内存比较大,取模出来之后堆栈溢出了,所以,显示画面图片和显示数字方法2思路是一样的,按照之前存进去的地址,想要显示哪一张图片就读取哪一张图片,然后送显。需要注意的是,图片读出来的数据量比较大,读取送显时可以把图片分成N等份,N份数据依次读取送显,读取结束一整图片就会显示出来。

代码如下:显示图片API函数

u8 ShOwPicture(u8 picture)
{u8 failCount=0;while(DisPlayPicture(picture)==FAIL)           {ScreenRestart();                                   //重启墨水屏failCount++;if(failCount==3){return FAIL; }              }return SUCCESS;
}

picture:要显示的图片标号

//墨水屏存放的在FLASH位置,根据自己存放的位置来写
#define SCREEN_START         0
#define PUT_PILLING          1
#define SCREEN_FOGING        2
#define SCREEN_COOLING       3
#define SCREEN_END           4
#define WHITESCREEN          6
#define BLACKSCREEN          7
#define WAITSHOW             10

底层驱动函数如下:墨水瓶--1024*758,为了便于取模采用1024*760,因为像素点是4bpp模式,一个像素点相当于半个字节,所以要除以2,然后分成95等分,每份数据4096字节。

u8 DisPlayPicture(u8 picture)
{     u8 i;u16 k=95;               //1024*760/2/4096=95 水平模式取模:760=95*8(高度按760取,方便取整)uint8_t buff[4096]; UsartxPrintf(USART_DEBUG, "picture is %d\r\n",picture);   for(i=0;i<k;i++)     {        if(picture==WHITESCREEN)  {memset(buff, 0xFF, sizeof(buff));//0xFF:全白界面,把界面分成95等份if(IT8951DisplayExampleuser(0,i*8,1024,8,buff,IT8951_4BPP,PICTURE)==FAIL)    {return FAIL;}}  else if(picture==BLACKSCREEN)  {memset(buff, 0x00, sizeof(buff));//0x00:全黑界面if(IT8951DisplayExampleuser(0,i*8,1024,8,buff,IT8951_4BPP,PICTURE)==FAIL)       {return FAIL;}}else{                        if(FlashReadData(buff,388096*picture+4096*i,4096)==FAIL)return FAIL;//把图片分成95块,每次送显4096个字节if(IT8951DisplayExampleuser(0,i*8,1024,8,buff,IT8951_4BPP,PICTURE)==FAIL)      {return FAIL;}}}  if(IT8951DisplayArea(0,0,EPD_WIDTH,EPD_HEIGHT,2)==FAIL)//刷新模式:GC16{         UsartxPrintf(USART_DEBUG, "end . . .\r\n",picture);return FAIL;}                  return SUCCESS;
}

E-LINK墨水瓶显示数字和图片相关推荐

  1. 【数字图像处理】一.MFC详解显示BMP格式图片

    本文主要是讲述<数字图像处理>系列栏目中的第一篇文章.主要详细介绍了BMP图片格式,同时使用C++和MFC显示BMP格式,主要结合自己的<数字图像处理>课程和以前的项目叙述讲解 ...

  2. 基于Ubuntu系统,调用opencv在图片上显示数字和汉字

    文章目录 一.汉字编码的介绍 1.汉字编码的发展过程 (1)汉字编码产生的原因 (2)常用的汉字编码 2.区位码 (1)产生原因 (2)概念简述 (3)区域分布情况 3.机内码 (1)基本概念 (2) ...

  3. Unity UGUI 数字使用图片显示-BMFont

    Unity UGUI 数字使用图片显示-BMFont BMFont 之前使用Cocos引擎的时候需要用到艺术字也就是将数字使用美术给的图片来代替显示,也就是要做一个新字体专门用来显示艺术字,当时用的是 ...

  4. led点阵---显示数字或汉字(内含代码+注释+图片)

    q:1483078351     v:15136037805,    git为@qq1483078351a  已开源,里面有课件和代码.有问题欢迎询问,共同进步. #include"reg5 ...

  5. c android显示gif动画,MFC显示GIF动画图片

    本帖则将讨论如何在MFC的对话框里显示GIF动画图片.一些关于传统控件的美化方法正在研究当中会陆续发帖的. 这是本帖用到的一个VS2008例程. 附件  GifPicture.rar (138.1 K ...

  6. MFC详解显示BMP格式图片

    本文主要是讲述<数字图像处理>系列栏目中的第一篇文章.主要详细介绍了BMP图片格式,同时使用C++和MFC显示BMP格式,主要结合自己的<数字图像处理>课程和以前的项目叙述讲解 ...

  7. python数码管倒计时程序_树莓派Python编程用1位数码管显示数字倒计时

    用1位数码管显示数字倒计时 概述 上一篇 我们学习了使用 PWM 来控制 LED 的亮度,这次我们学习使用1位数码管显示个位数字倒计时. 通过本节课,我们能学习到: 1位数码管的显示原理 所需硬件 树 ...

  8. Android Studio利用时钟控件AnalogClock显示模拟时钟以及TextClock显示数字时钟

    前言 利用时钟控件AnalogClock快速制作一个模拟时钟.利用TextClock显示数字时钟. 一.AnalogClock是什么? AnalogClock继承的是View,可重写OnDraw方法. ...

  9. Android开发自定义View实现数字与图片无缝切换的2048

    本博客地址:http://blog.csdn.net/talentclass_ctt/article/details/51952378 最近在学自定义View,无意中看到鸿洋大神以前写过的2048(附 ...

最新文章

  1. atitit.mp4 视频文件多媒体格式结构详解
  2. 时间被空间和运动度量
  3. php邮件发送失败,php服务器发送邮件失败问题解析
  4. Guestfish 使用说明
  5. [register]-TCR(Translation Control Register)寄存器详解
  6. 防火墙未来的技术发展趋势
  7. 使用Spring Boot构建RESTFul服务
  8. jvm gc策略_IBM JVM调整– gencon GC策略
  9. flow 静态类型检查 js
  10. js判断对象还是数组
  11. 实验五——循环结构学习总结
  12. Linux系统编程5:入门篇之在Linux下观察C/C++程序编译过程 gcc/g++使用详解
  13. Radware:应用交付向云端扩展
  14. Flutter底部导航栏BottomNavigationBar页面状态保持解决方案
  15. IOS中,在两个ViewController之间传值
  16. tf 单个文字识别 data 数据输入
  17. ogg是什么文件?ogg怎么转mp3格式?
  18. 微博商城开启社会化电商之路
  19. Excel怎么将一列数据合并到一个单元格中
  20. php mysql orm_PHP基于ORM操作MySQL数据库 - strtolower

热门文章

  1. 8点1氪|阿里巴巴第三财季营收破千亿;传滴滴拟裁员25%;饿了么口碑超30亿美元融资已逐步到位...
  2. 小程序自定义Tabber,使其图标突出
  3. 2022 年第十二届 MathorCup 高校数学建模挑战赛D题思路(移动通信网络站址规划和区域聚类问题)
  4. 2015年,我买了台i7 4790k主机
  5. docker mysql数据迁移
  6. 12.【乘法口诀表】
  7. 【报复性赚钱】2023年5大风口行业
  8. 心法利器[32] | 一些印象深刻的bad case
  9. 【VRTK4.0】使用
  10. [转]利用下载论坛的数据库拿站的Shell