
手把手教您驱动电子墨水屏/电子纸系列-02-全屏刷新
//各位看客老爷们大家好!!!最近我们Shining Man小组(公司内部小组) 一直在鼓捣墨水屏的教学项目。
我们设想以一个小白的视角去呈现给大伙从零到一驱动墨水屏的整个过程!!(固定开头~)//
上一期,我们提到了硬件方面的电子纸显示屏知识(我们收集了一些看客老爷们的想法,接下来的新系列中会陆续填坑~!)
今天这一期,我们来聊聊电子纸显示屏的刷新模式。
电子纸显示屏的刷新初始化代码可以分三种:
1.全刷,更准确地说是指全屏整体性地进行画面更新,是最基础也是非常必要的功能。
全刷的最显著特征是屏幕会闪烁3次,然后进行画面更新。(您千万不能觉得这是屏幕坏了~!)
*加入全刷对清屏保护屏幕,延长使用寿命十分关键!
2.快刷,也就是屏幕进行快速更新,也称高刷新率。最显著的特征是屏幕只闪烁一次,基本在1到1.5s内就完成新一幅画面的更新。
3.局刷,在屏幕的局部区域,画面会快速地更新,通常在0.3s左右完成一次。局刷对于墨水屏实现更多可能性至关重要!
当然,今天我们只谈论全刷,以下示例代码大家可以浏览下:
void EPD_HW_Init(void)
{
EPD_W21_RST_0; // Module reset
delay_xms(10);//At least 10ms delay
EPD_W21_RST_1;
delay_xms(10); //At least 10ms delay
Epaper_READBUSY();
Epaper_Write_Command(0x12); //SWRESET
Epaper_READBUSY();
Epaper_Write_Command(0x01); //Driver output control
Epaper_Write_Data(0xF9);
Epaper_Write_Data(0x00);
Epaper_Write_Data(0x00);
Epaper_Write_Command(0x11); //data entry mode
Epaper_Write_Data(0x01);
Epaper_Write_Command(0x44); //set Ram-X address start/end position
Epaper_Write_Data(0x00);
Epaper_Write_Data(0x0F); //0x0F-->(15+1)*8=128
Epaper_Write_Command(0x45); //set Ram-Y address start/end position
Epaper_Write_Data(0xF9); //0xF9-->(249+1)=250
Epaper_Write_Data(0x00);
Epaper_Write_Data(0x00);
Epaper_Write_Data(0x00);
Epaper_Write_Command(0x3C); //BorderWavefrom
Epaper_Write_Data(0x05);
Epaper_Write_Command(0x21); // Display update control
Epaper_Write_Data(0x00);
Epaper_Write_Data(0x80);
Epaper_Write_Command(0x18); //Read built-in temperature sensor
Epaper_Write_Data(0x80);
Epaper_Write_Command(0x4E); // set RAM x address count to 0;
Epaper_Write_Data(0x00);
Epaper_Write_Command(0x4F); // set RAM y address count to 0X199;
Epaper_Write_Data(0xF9);
Epaper_Write_Data(0x00);
Epaper_READBUSY();
}
以上代码其实可以进一步简化下,以便您更好地理解这个过程:
void EPD_HW_Init(void)
{
EPD_W21_RST_0; // Module reset
delay_xms(10);//At least 10ms delay
EPD_W21_RST_1;
delay_xms(10); //At least 10ms delay
Epaper_Write_Command(0x12); //SWRESET
Epaper_READBUSY();
Epaper_Write_Command(0x21); // Display Update Control
Epaper_Write_Data(0x00);
Epaper_Write_Data(0x00);
Epaper_Write_Command(0x20);
Epaper_READBUSY();
}
在这简单地奉上解释:首先屏幕工作前要进行初始化,之后要获取屏幕状态(0x12),如果判定状态为IDLE,
就会写入Display Update Control(0x21),因为这份示例中我们都是采用正常显示,两个相关的写寄存器都请写入0x00。
最后写入0x20去激活显示设置,您也可以理解成使能。
这里不再多赘述每条指令和写入数据的具体含义,您可以移步IC数据手册或者某一份电子纸产品规格书自行查阅,谢谢。
或者您也可以浏览这篇博客,里边我们对用到的指令和程序流程图进行了初步介绍,应该也能解决您的部分疑虑:
5.1 根据规格书流程图和指令表编写您的电子纸驱动程序 (Arduino-IDE)
各位看客老爷们可以动手尝试下把原先例程中的相应部分用上述简化的代码进行替换,是否依然正常实现屏幕更新画面了?
欢迎各位看客老爷们给我们小组留言(您可以直接邮件或者通过官网的Tidio或者留言板给我们私信)
额外扩展阅读:
GITHUB Library-Good Display墨水屏例程库(支持STM32/Arduino/ESP32/ESP8266)
电子纸/墨水屏的百科全书(查找您需要的FAQ,如果没有您需要的请您告知我们,第一时间发布弥补空白!!!)
您可以点击这里或者导航栏的企业定制服务快捷提交您对我们的需求!!我们会及时回复跟进的。
使用ImageToArray为您手上的GoodDisplay系列墨水屏制作取模图吧!
扫二维码用手机看