优秀的编程知识分享平台

网站首页 > 技术文章 正文

【STM32F103ZET6开发板】第3-7讲:电子墨水屏显示

nanyue 2024-09-10 16:17:46 技术文章 3 ℃

电子墨水屏显示实验

实验目的

  • 了解电子墨水屏的基本原理及接口特性。
  • 掌握STM32驱动电子墨水屏显示的程序设计。

实验内容

  • 编写程序使用模拟SPI控制电子墨水屏显示不同信息的内容。

硬件设计

电子墨水屏简介

“EINK”是Electronic Ink的缩写,翻译成中文为“电子墨水”。电子墨水屏表面意思为使用电子墨水的屏幕,电子墨水屏又被称为电子纸显示技术。电子墨水是一种革新信息显示的新方法和技术。

1999年,美国E-Ink公司(由朗讯公司,摩托罗拉公司以及数家风险投资公司为了开发电子纸于1997年成立的企业)推出了其使用电子墨水的第一款产品——Immedia大尺寸显示装置。2015年12月,伦敦拿破仑桥的公交站牌变成了电子墨水屏。它能实时显示到站时间和路线,主要靠太阳能补充电量。如下图:

图1:伦敦拿破仑桥的公交站牌

工作原理:电子墨水屏表面附着很多体积很小的“微胶囊”,封装了带有负电的黑色颗粒和带有正电的白色颗粒,通过改变电荷使不同颜色的颗粒有序排列,从而呈现出黑白分明的可视化效果。

与传统液晶显示对比:电子墨水屏具有双稳态性,即当显示静态图像的时候,可以不耗电,换句话说,就是即使断开所有电源,电子纸显示器依然能够保留最后一幅画面。这意味着,我们不需要像传统液晶显示器那样需要持续不断地为电子纸显示器维持电源的供给,而是仅仅在切换显示画面的时候才需要提供电力。由此可见,电子纸显示器要比传统液晶显示器省电得多。

应用举例:亚马逊公司推出的Kindle、易狄欧(EDO)公司的E600系列、汉王公司推出的汉王N系列电子阅览器(电纸书)都是应用E-Ink的电子墨水技术。

  • 注:电子墨水屏优点很多,但价格昂贵是其最大的软肋。但不可否认,从长远来看,电子纸显示技术会对传统出版行业造成巨大的冲击。

IK-E154电子墨水屏(1.54吋)

IK-E154电子墨水屏是艾克姆科技推出的一款高性能电子墨水显示模块。该模块是一款支持局部刷新、200×200分辨率、屏幕尺寸1.54 英寸的电子纸显示屏,其使用3.3V电源,支持3线和4线SPI通讯接口。该模块还具有功耗低、视角宽、阳光直射下仍可清晰显示等优点,常用于货架标签、智能卡、广告牌、工业仪表等显示。

产品型号注释如下图。


图2:艾克姆1.54吋电子墨水屏型号注释

IK-E154电子墨水屏模块的规格参数

表1:IK-E154电子显示屏模块规格参数

参数

规格

工作电压

3.3V

外形尺寸

45.4(L)mm × 32.2(W)mm

显示尺寸

27.6mm × 27.6mm

通信接口

3线SPI、4线SPI

分 辨 率

200 × 200

显示颜色

黑、白

点距

0.138 mm × 0.138 mm

局部刷新

支持

刷新电流

4mA(典型值)

重量

8.5g

可视角度

>170

引脚数

8个

IK-E154电子墨水屏模块的管脚定义

IK-E154电子墨水屏模块接口是针间距为2.54mm的排针,共8个引脚,其引脚定义如下。

图3:艾克姆1.54吋电子墨水屏模块引脚定义

IK-E154电子墨水屏模块和开发板连接

IK-E154电子墨水屏模块可以使用各种类型的MCU驱动,如STM32系列单片机、STC15系列单片机、LPC系列单片机以及各种蓝牙BLE芯片等。IK-E154电子墨水屏模块和艾克姆科技IK-ZET6开发板MCU之间的连接如下图所示。

图4:IK-ZET6开发板与OLED屏连接示意图

  • 1个电子墨水屏模块接口占用的单片机的引脚如下表:

表2:电子墨水屏模块接口引脚分配

OLED

引脚

说明

MOSI

PB13

非独立GPIO

CLK

PB15

非独立GPIO

CS

PG11

非独立GPIO

C/D

PB5

非独立GPIO

RESET

PG4

非独立GPIO

BUSY

PD3

非独立GPIO

  • 注:独立GPIO表示开发板没有其他的电路使用这个GPIO,非独立GPIO说明开发板有其他电路用到了该GPIO。
  • IK-E154电子墨水屏模块支持3线和4线SPI,模块上通过BS电阻焊接的位置确定使用3线或4线SPI,默认设置的是4线SPI,如下图所示。

图5:墨水屏模块3线和4线SPI设置

软件设计

取模软件的使用

IK-E154电子墨水屏模块待显示的内容需要通过取模软件处理符合要求的图片实现,取模软件常用的是image2lcd软件。在使用取模软件的过程中,只有对取模软件进行正确的配置才会显示正确的内容,而不至于出现乱码。下面简单介绍下image2lcd取模软件的使用。

制作符合要求的图片

用户在制作图片用于IK-E154电子墨水屏模块时,对制作的图片有下面3个方面的要求:

  1. 因IK-E154电子墨水屏模块不支持灰度,所以制作的图片必须是纯黑白图片。
  2. 因IK-E154电子墨水屏模块分别率是200*200,所以制作的图片尺寸必须是200*200。
  3. 制作的图片需保存为.bmp格式,以保证取模软件可以有效识别。

取模软件使用示例

下图是使用image2lcd取模软件,将一个200*200黑白图形取模的步骤,仅供用户参考:

图6:取模软件生成代码步骤示意

  • 注:按上述步骤操作到第10步后,图片的代码会被保存在文本文档中,可将其拷贝到源程序中使用。

IK-E154电子墨水屏显示(模拟SPI)

  • 注:本节的实验源码是在“实验3-1-1:OLED显示(模拟SPI)”的基础上修改。本节对应的实验源码是:“实验3-21:1.54吋电子墨水屏显示(模拟SPI)”。本实验是4线SPI控制IK-E154电子墨水屏,请知悉。

工程需要用到的库文件

本例需要用到的c文件如下表所示,工程需要添加下表中的c文件。

表4:实验需要用到的C文件

序号

文件名

后缀

功能描述

1

stm32f10x_rcc

.c

复位与时钟控制器。

2

stm32f10x_gpio

.c

通用输入输出。

按下图所示将需要的c文件添加到工程。

图7:在新建工程中添加所需库函数c文件

头文件引用和路径设置

  • 需要引用的头文件

因为在“main.c”文件中使用了标准库和我们自己建的软件延时函数,所以需要引用下面的头文件。

  1. #include "stm32f10x.h"
  2. //delay这里报错的原因是:delay函数用汇编实现的,导致了MDK误报。
  3. #include "delay.h"
  • 需要包含的头文件路径

本例需要包含的头文件路径如下表:

表5: 头文件包含路径

序号

路径

描述

1

..\Lib\F10x_FWLIB\inc

标准库头文件路径。

2

..\User

stm32f10x_conf.h头文件在该路径,所以要包含。

3

..\User\bsp

自建的板卡相关的驱动文件路径。

MDK中点击魔术棒,打开工程配置窗口,按照下图所示添加头文件包含路径。

图8:添加头文件包含路径

编写代码

首先介绍下SPI_GPIO_Init函数,该函数中除了对电子墨水屏用到的SPI接口的GPIO口进行了设置,还对电子墨水屏所用到的C/D、RESET、BUSY等引脚所使用的GPIO口进行设置。

代码清单:初始化电子墨水屏所用到的GPIO

  1. /******************************************************************************
  2. * 描 述 : 初始化墨水屏所用到的IO口
  3. * 入 参 : 无
  4. * 返回值 : 无
  5. *****************************************************************************/ void SPI_GPIO_Init(void)
  6. {
  7. GPIO_InitTypeDef GPIO_InitStructure;

  8. //打开所用GPIO的时钟
  9. RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOG , ENABLE);

  10. //配置的IO是PB5 PB13 PB15
  11. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_13 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  12. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
  13. GPIO_Init(GPIOB, &GPIO_InitStructure);
  14. //配置的IO是PG4 PG11
  15. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_11;
  16. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  17. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
  18. GPIO_Init(GPIOG, &GPIO_InitStructure);
  19. //配置的IO是PD3
  20. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  21. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  22. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
  23. GPIO_Init(GPIOD, &GPIO_InitStructure);

  24. }

然后,模拟SPI接口向电子墨水屏发送一个字节的数据。

代码清单:模拟SPI向墨水屏写入1字节数据

  1. /******************************************************************************
  2. * 描 述 : 向E154墨水屏写入1字节数据
  3. * 入 参 : dat:数据
  4. * 返回值 : 无
  5. ******************************************************************************/
  6. void SPI_Write(uint8_t dat)
  7. {
  8. uint8_t i;

  9. for(i=0; i<8; i++) //发送一个八位数据
  10. {
  11. E154_CLK_0;

  12. if (dat&0x80)

  13. E154_MOSI_1;

  14. else

  15. E154_MOSI_0;

  16. dat <<= 1;
  17. E154_CLK_1;
  18. }
  19. }

关于IK-E154电子墨水屏驱动相关的函数,不再逐一介绍。大家可参考例程直接调用即可。当然在针对不同的单片机及其编译环境中,要知晓如何借用这些IK-E154电子墨水屏的驱动函数,以实现更广泛的应用。

最后,在主函数中对IK-E154电子墨水屏进行初始化后,控制IK-E154电子墨水屏循环显示不同的内容。

代码清单:主函数

  1. int main(void)
  2. {
  3. uint8_t m;
  4. //初始化电子墨水屏所用到的IO口
  5. SPI_GPIO_Init();

  6. //刷屏
  7. EPD_init_Full();
  8. sw_delay_ms(300);

  9. //全白
  10. EPD_init_Full();
  11. sw_delay_ms(300);
  12. m=0xff;
  13. EPD_Dis_Full((unsigned char *)&m,0); //all white
  14. sw_delay_ms(DELAYTIME*3);

  15. //显示蔬菜牌并反显
  16. EPD_Dis_Full((unsigned char *)first,1); // pic
  17. sw_delay_ms(4500);

  18. //显示图片、网址并反显
  19. EPD_Dis_Full((unsigned char *)second,1); // pic
  20. sw_delay_ms(4500);

  21. //显示LOGO并反显
  22. EPD_Dis_Full((unsigned char *)logo,1); // pic
  23. sw_delay_ms(4500);

  24. //局部显示数字
  25. EPD_init_Part();
  26. sw_delay_ms(300);
  27. EPD_Dis_Part(0,xDot-1,0,yDot-1,(unsigned char *)logo,1); //pic
  28. for(m=0;m<9;m++)
  29. {
  30. EPD_Dis_Part(0,31,0,63,(unsigned char *)&Num[m],1);
  31. sw_delay_ms(10);
  32. }
  33. sw_delay_ms(DELAYTIME);

  34. //全白
  35. EPD_init_Full();
  36. sw_delay_ms(300);
  37. m=0xff;
  38. EPD_Dis_Full((unsigned char *)&m,0); //all white
  39. sw_delay_ms(DELAYTIME*3);

  40. EPD_init_Part();
  41. sw_delay_ms(300);

  42. while(1)
  43. {
  44. //显示蔬菜牌
  45. EPD_Dis_Part(0,xDot-1,0,yDot-1,(unsigned char *)first,1); //pic
  46. sw_delay_ms(1500);
  47. //显示图片网址
  48. EPD_Dis_Part(0,xDot-1,0,yDot-1,(unsigned char *)second,1); //pic
  49. sw_delay_ms(1500);
  50. }
  51. }

实验步骤

  1. 解压“…\第3部分:标准库教程和实验源码\ 2 – 传感器实验程序\”目录下的压缩文件“实验3-21:1.54吋电子墨水屏显示(模拟SPI)”,将解压后得到的文件夹拷贝到合适的目录,如“D\STM32F103ZET6”。
  2. 启动MDK5.23。
  3. 在MDK5中执行“Project→Open Project”打开“…\E154\projec”目录下的工程“E154.uvproj”。
  4. 点击编译按钮编译工程。注意查看编译输出栏,观察编译的结果,如果有错误,修改程序,直到编译成功为止。编译后生成的HEX文件“E154.hex”位于工程目录下的“Objects”文件夹中。
  5. 点击下载按钮下载程序 。如果需要对程序进行仿真,点击Debug按钮,即可将程序下载到STM32F103ZET6中进行仿真。
  6. 程序运行后,可以观察到IK-E154电子墨水屏循环显示不同内容的信息。

Tags:

最近发表
标签列表