这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 《墨水屏电子书》过程篇2-字符显示

共6条 1/1 1 跳转至

《墨水屏电子书》过程篇2-字符显示

专家
2024-08-25 23:59:59     打赏

      承接上期的呼吸灯效果,这期就围绕墨水屏的驱动展开话题,还是采用Keil工具开发。电路原理图如下,可知inky与Pico采用SPI通讯,因此跟OLED屏一样,需要先初始化SPI驱动。

image.png

SPI是一种同步、全双工、主从式接口的通信总线。数据在时钟上升沿或下降沿同步。主机和从机可以同时传输数据。

image.png

RP2040 内部spi的逻辑框图

image.png

下面再来看看墨水屏相关知识,使用的墨水屏参数如下:

image.png

墨水屏显示原理

悬浮在液体中的带电纳米粒子受到电场作用而产生迁移。墨水屏是靠反射环境光来显示图案的,因此不需要背光,在环境光下,墨水屏清晰可视,可视角度几乎达到了 180°。所以,墨水屏非常适合阅读。

image.png墨水屏刷新模式

1、全局刷新:墨水屏在刷新过程中会闪烁多次,闪烁是为了清除残影达到最佳的显示效果

2、局部刷新:墨水屏在刷新过程中不闪烁。

注意:使用局刷功能在刷新几次之后,要进行一次全刷操作清除残影,否则残影问题会越来越严重,甚至损坏屏幕


墨水屏通信时序

image.png

很显然是SPI模式0,即CPHA=0CPOL=0

由于墨水屏刷新较慢,因此SPI时钟一般设置为4MHz

参考的部分代码如下:

#include "pico/stdlib.h"
#include "epd2.h"
#include "my_epd.h"
#include "my_led.h"

static void system_init(void)
{
    extern void SystemCoreClockUpdate();

    SystemCoreClockUpdate();
  
}

int main(void) 
{
  char key = 0x00, key_new;  
  unsigned char txtIndex = 0;  
  
  system_init();  
  
  LED_init();   
  epd_init(); 
  fb_init();
  draw_fb_point(10,20);	
  updata_to_epd(DISPLAY_ALL);
	
  while (true) {  
	draw_fb(0, 0, "EEPW&DigiKey");    
	draw_fb(0, 36, "RP2040 Test");    
	draw_fb(0, 72, "inky e-book ");  
	updata_to_epd(DISPLAY_PART); 

	DEV_Delay_ms(200);  
	draw_fb(0, 72, "DIY  2024.08");  
	updata_to_epd(DISPLAY_PART);
	LED_ON();  
	DEV_Delay_ms(200);
	LED_OFF();   
  }  
  return 0;  
}
void epd_init(){
		OLED_GPIOInit();	
		EPD_2IN9D_Init();
		EPD_2IN9D_Clear();
}

void fb_init(){
		int x,y;
		for(x = 0; x < EPD_H; x++){
				for(y = 0; y < EPD_W; y++){
						drawfb[x][y] = 0;
				}
		}
		EPD_HeightMemory = EPD_H;
		EPD_WidthMemory = EPD_W;
		if(EPD_WidthMemory % 8){
				EPD_WidthMemory = EPD_W / 8 + 1;
		}else{
				EPD_WidthMemory = EPD_W / 8 ;
		}
}

void draw_fb(int x, int y, char *data) {  
  short int word;  
  int i, dataLen = My_strlen(data);  
  
  for (i = 0; i < dataLen;) {  
     if ((x + ASCII_FONT_H) > EPD_H) {  
      x = 0;  
      y += ASCII_FONT_W;  
    }  
    draw_fb_ASCII(x, y, data[i]);  
  
    x += ASCII_FONT_H;  
    i++;  
  }  
}  

void updata_to_epd(char flag){
		fb_to_epddata();
		if(flag ==  DISPLAY_PART){
				EPD_2IN9D_DisplayPart(Image_BW2);
				DEV_Delay_ms(500);
		}else{
				EPD_2IN9D_Init();
				EPD_2IN9D_Display(Image_BW2);
				DEV_Delay_ms(2000);
		}
}

先将板卡进入U盘烧录模式,即先按下“BOOTSEL”按钮,然后再上电,全编译工程,即将转化成的.uf2文件格式拷贝到pico中,自动重启后则看到如下的现象。

字符显示.gif字符显示.zip


专家
2024-08-26 01:38:10     打赏
2楼

感谢楼主分享


高工
2024-08-26 09:44:38     打赏
3楼

我也要加油实现了


助工
2024-08-26 11:02:28     打赏
4楼

谢谢分享


专家
2024-08-26 20:33:35     打赏
5楼

感谢分享


专家
2024-08-26 20:36:05     打赏
6楼

感谢分享


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]