使用编译器环境:KEIL5.38A 一根MicUSB线。
实验目标:在墨水屏中显示字符串
首先我们在墨水瓶拓展板的原理图:
SPI通讯方式简单介绍:
SPI(Serial Peripheral Interface)是一种高速全双工的通信总线,是一种通讯协议1。SPI通讯方式具体过程如下2:
主设备向从设备发送一个时钟脉冲,称为时钟起始。同时,主设备将片选信号拉低,以选择从设备。
主设备向从设备发送一个控制字节,控制字节包括数据传输的格式和长度等信息。
主设备向从设备发送数据。数据按照字节的顺序依次传输。在每个字节传输结束后,从设备会回应一个应答信号来确认接收到数据。
当所有的数据传输完成后,主设备将片选信号拉高,表示结束通信。
SPI接口一般使用四条信号线通信:SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。
墨水屏的工作原理:
每个微胶囊里含有电泳粒子──带负电荷的白色以及带正电荷的黑色粒子,悬浮于透明液体中。 利用正负相吸的原理,当电场接通时,该区块对应的黑或白粒子会移动至微胶囊的顶端,使用者在该区块上,就能看见白色或黑色。
所以我们就可以理解,为什么断电之后,墨水瓶上面依然会存在我们上次像输出的图片或者字样了。
软件代码编写的时候基本思路为:控制Pico评估板通过SPI(串行外设接口)与墨水屏通信编写初始化代码,设置墨水屏的参数(分辨率、显示模式等),编写显示代码,实现在墨水屏上显示文本、图形等内容
软件代码:
底层驱动代码:
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);
}
}
}
}
int My_strlen(char *data) {
int i = 0;
while (data[i]) {
i++;
}
return i;
}
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++;
}显示字样驱动函数如下所示:
int main_EPD_test(void){
epd_init();
DEV_Delay_ms(2000);
fb_init();
draw_fb_point(10,20);
draw_fb(0, 20, "let is do DIY two");
draw_fb(0, 60, "HelloEEPW&DigiKey");
draw_fb(0, 90, "autor & keyboard7");
}测试图片如下:
实验现象:开机之后墨水屏自检(参考例程,这里并为做修改,方便查询功能异常时候,是否为墨水屏在使用过程中出现的质量问题),最后屏幕显示下图字样,同时LED灯闪烁。

我要赚赏金
