本章节的主要目标是基于屏幕驱动函数(在屏幕任意位置画点)实现字符的显示,例如显示Hello EEPW & DigiKey 。
到这里可以知道基本的需求是显示,不过在显示之前需要对屏幕进行驱动设计以及初始化,不过由于屏幕的资料比较少,这一部分的驱动也是在教学中提供了,我们直接使用就可以了。

我们熟悉一下我们要是用的函数,除了基础的初始化函数epd_init(void)外,操作函数只有一个写点函数draw_fb_point(int x,int y),咱们要显示字符(不管是ASCII还是汉字都是一个一个点组成的)实际上就是连续的写点,在"epd2.c"中有一个ASCII的字库,16*24的,我们就用这个字库来完成本次的显示。
首先我们要在字库中获取字符对应的初始位置:

void draw_fb_point(int x,int y){
drawfb[OLED_H - x - 1][y] = 1;
}
void clear_fb_point(int x, int y){
drawfb[OLED_H - x - 1][y] = 0;
}
void draw_fb_ASCII(int x, int y, char word) {
const uint8_t *pData = epd2_get_font_16_24h(word);
unsigned char idxX, idxY;
int lineData;
for (idxY = 0; idxY < 24; idxY++) {
lineData = pData[idxY * 2 + 1];
lineData = lineData << 8;
lineData = lineData | pData[idxY * 2];
for (idxX = 0; idxX < 16; idxX++) {
if (lineData & (0x01 << idxX)) {
draw_fb_point(x + idxX, y + idxY);
} else {
clear_fb_point(x + idxX, y + idxY);
}
}
}
}
void draw_fb(int x, int y, char *data) {
short int word,ASCII_FONT_H,ASCII_FONT_W;
int i;
ASCII_FONT_H = 24;
ASCII_FONT_W = 16;
for (i = 0; data[i] != 0;) {
if ((x + ASCII_FONT_W) > EPD_H) {
x = 0;
y += ASCII_FONT_H;
}
draw_fb_ASCII(x, y, data[i]);
x += ASCII_FONT_W;
i++;
}
} 添加了这些基础的显示函数后,我们就可以在main中添加显示内容了。
效果如下:

我要赚赏金
