这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【墨水屏电子书】成果贴-电子书基本功能

共9条 1/1 1 跳转至

【墨水屏电子书】成果贴-电子书基本功能

高工
2024-08-07 22:31:02     打赏

本次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学习中用到了很多的指针,这方面的锻炼还是挺有用的。

期待下一次活动的到来。

相关视频会发布在视频网站,地址在二楼。

" target="_self"<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=112921183060816&bvid=BV1KmaXeeEQo&cid=500001641687046&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>


高工
2024-08-07 22:34:02     打赏
2楼

专家
2024-08-08 06:47:36     打赏
3楼

学习一下


专家
2024-08-08 09:10:08     打赏
4楼

学习学习


院士
2024-08-08 10:14:45     打赏
5楼

这已经是成果帖子了啊


专家
2024-08-08 20:50:35     打赏
6楼

感谢分享


高工
2024-08-08 20:54:33     打赏
7楼

感谢分享


专家
2024-08-08 20:56:22     打赏
8楼

感谢分享


专家
2024-08-12 08:16:32     打赏
9楼

感谢分享


共9条 1/1 1 跳转至

回复

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