本次DIY学习活动的最终成果是实现电子书基本功能,实现按键翻页(上一页、下一页等),有关硬件部分我们就不在赘述了,主要介绍软件部分的实现。
通过过程学习我们基本掌握了按键,LED控制以及墨水屏显示的基本操作,接下来就是进一步将各个模块功能进行扩展例如,显示汉字,然后使用例程的《礼记》选段进行电子书的翻页展示。
汉字显示部分,我们使用的库是16*16的库,一个汉字占用两个字节,而且所有的汉字一定是大于144的,所以针对汉字显示,我们设计一个单字的显示函数:
void draw_fb_GB2132(int x, int y, unsigned int bankCode, unsigned int posCode) {
const uint8_t *pData;
unsigned char idxX, idxY;
int lineData;
int pos;
short int FONT_H,FONT_W;
FONT_H = GB2312_FONT_H;
FONT_W = GB2312_FONT_W;
pos = ((bankCode - 0xA1) * 94 + (posCode - 0xA1)) * (FONT_H * FONT_W / 8);
pData = acHZK16C;
pData += pos;
for (idxY = 0; idxY < FONT_W; idxY++) {
lineData = pData[idxY * 2];
lineData = lineData << 8;
lineData = lineData | pData[idxY * 2 + 1];
for (idxX = 0; idxX < FONT_H; idxX++) {
if (lineData & (0x01 << idxX)) {
draw_fb_point(x + FONT_H - idxX, y + idxY);
}
else {
clear_fb_point(x + FONT_H - idxX, y + idxY);
}
}
}
for (idxY = FONT_W; idxY < FONT_W; idxY++) {
for (idxX = 0; idxX < FONT_H; idxX++) {
clear_fb_point(x + FONT_H - idxX, y + idxY);
}
}
}接下来就是在draw_fb(int x, int y, unsigned char *data)中添加显示判断:
if(data[i] > 0x80){
FONT_H = GB2312_FONT_H;
FONT_W = GB2312_FONT_W;
if ((x + FONT_W) > EPD_H) {
x = 0;
if(y+FONT_H>=EPD_W)
break;
else
y += FONT_H;
}
draw_fb_GB2132(x, y, data[i], data[i+1]);
x += FONT_W;
i += 2;
}加下来就是在main中加入按键控制,A键上翻,C键下凡,B键到第一页:
if(get_key(INKY_KEYA_PIN) == 1)
{
if(offise >= 288){
offise -= 288;
draw_fb(0, 0, dx_dzs+offise,FONT_Mode);
updata_to_epd(DISPLAY_PART);
}
}
if(get_key(INKY_KEYB_PIN) == 1)
{
offise = 0;
draw_fb(0, 0, dx_dzs,FONT_Mode);
updata_to_epd(DISPLAY_PART);
}
if(get_key(INKY_KEYC_PIN) == 1)
{
if(offise < My_strlen(dx_dzs)){
offise += 288;
draw_fb(0, 0, dx_dzs+offise,FONT_Mode);
updata_to_epd(DISPLAY_PART);
}
}到这里我们也基本上完成了本次DIY的基础任务,由于也没有购买扩展任务的器件,也就不在进行相关DIY设计了,本次的DIY活动接触了全新的墨水屏器件,也是在学习过程中掌握了基于Keil进行Raspberry Pi Pico的调试之法,可以说一种全新的体验。不过说实话对于前期的任务来说还好,可以一次少次就调试成功,不过每次进入BOOT还是比较麻烦的,对于后面问题比较多的时候就不比较不方便了。在本次的DIY学习中用到了很多的指针,这方面的锻炼还是挺有用的。
期待下一次活动的到来。
相关视频会发布在视频网站,地址在二楼。
我要赚赏金
