
标准版
4.2寸墨水屏模块-含程序说明
1.5w
0
0
14
简介
4.2寸墨水屏驱动模块--三色,包含程序使用说明
简介:4.2寸墨水屏驱动模块--三色,包含程序使用说明开源协议
:GPL 3.0
创建时间:2021-02-04 04:43:00更新时间:2021-11-05 08:32:04
描述
墨水屏驱动模块,现用于大连佳显4.2寸墨水屏,写有墨水屏程序的注解以及使用的说明,请看下文
了解更多墨水屏相关,可以登录大连佳显官网
模块介绍:
- 模块体积:30mm*36mm
- 供电电压:5 V
- 适用于SPI通信的墨水屏,通过此模块连接控制芯片和裸屏,主控板使用的是VET6基础板
模块整体较为简单,但仍有几个需要注意的地方,需要仔细查看:
- 在电源上
- 本次使用的 4.2 寸屏需要使用 5V 供电。
- 对于2.9寸以上的电子墨水屏,比如3.5寸、4.3寸、6寸、8寸电子纸,如果使用3.7V锂电池供电,需要升压IC,将3V升到5V。而对于2.04寸或2.9寸及更小尺寸的电子纸就不需要升压IC了,直接用3V驱动就可以了。
- 主控板的选型
- 由于存储图像点阵数据需要较大的空间,这里一张图片会占据15KB左右的空间,所以应该注意单片机的 ROM/RAM 的大小,在这里使用的是VET6基础板,可供参考。
- 元件的选择
- 电容耐压值需要大于等于15V,MOS管的选型,官方推荐的型号是Si1304BDL或Si1308EDL,当然也可以根据参数选择相似的MOS,电感的电流值不要太小,要保证500mA以上,太小可能会导致发热情况。
- fpc座儿,是一个很重要的元件,这里使用的是抽拉式 上接fpc连接器,一定注意fpc座儿的引脚顺序,原理图一定不要首末引脚倒置,注意比对。
- 焊接
- 由于fpc排座为0.5mm间距,焊接难度稍大,建议先焊接上排座儿后在焊接其他元件。
- 刷新方式
- 只有单色墨水屏支持局部刷新,彩色墨水屏只支持全刷。
- 全刷:电子纸刷新需要画面闪烁多次后,最终显示所需要的画面,其中闪烁的目的是清除显示残影,以达到最佳的显示效果。
- 局刷:电子纸刷新无画面闪烁,局刷需要用户在使用的时候,刷新几次后,进行一次全刷操作,以清除显示残影。
- 通信方式
- 使用模拟 SPI 通信方式,SPI 工作频率不要超过 2MHz
- IO 口配置 输入:BUSY 输出:CS、RES、D/C、SCLK、SDIN。
程序移植步骤
- 下载测试程序,可以直接从附件下载或者登录官网下载。
- 修改引脚即可开始跑例程
- 原版程序是用keil 4 编写的,如果使用的是keil 4 ,可以直接打开,如果使用的是keil 5,就需要改变一下属性,否则可能出现无法下载的情况
- 实际过程
- 修改 keil 4 工程文件的后缀,改成 keil 5 工程文件
- 具体是将工程文件后缀添加字母 x ,属性会自动改变。
原先是
后来是
- 根据自己的引脚定义,更改程序,如果只是测试,那么更改引脚顺序接口,官方的例程中自带了显示效果
- 我们先打开 EPD 文件下的
Display_EPD_W21_spi.c
文件,需要修改void EPD_GPIO_Init(void)
函数中的引脚初始化函数,下图是更改后的内容
- 我们先打开 EPD 文件下的
* 打开 Display_EPD_W21_spi.h
文件,修改引脚宏定义即可
实际效果如下
墨水屏程序使用说明
接下来会简要说明三色墨水屏的显示步骤,对需要用到的函数做相应的详细解释,针对不同的显示内容,会给出相应的函数调用模板,直接调用即可, 看了这篇文章,就可以像控制常见的OLED那样,方便地控制墨水屏了
- 墨水屏的显示内容同样是由一个一个的像素点构成的,本次使用的是4.2寸的墨水屏,它的像素尺寸为400x300,即X轴坐范围为0~400,Y轴坐标范围是0 ~ 300
- 三色墨水屏不能局部刷新,适合显示内容不需要频繁改变的情况,局部刷新可以使用使用黑白的两色墨水屏
- 墨水屏可显示的内容有:整幅图片,指定的字符和文字,指定的 点 线 圆 矩形等图形
- 三色墨水屏如何显示三种颜色?其实是两张图片的叠加,首先将黑白图片置于底层,之后叠加一张红白的图片在上层
- 移植墨水屏程序,只需要修改IO的定义即可,其中BUSY需要设置为输入模式,其他引脚需要设置为输出模式
- 整幅图片的显示和指定的字符图形等内容的显示方法不同
一些基本函数的说明:
函数名称 | 参数 | 函数作用 | 注释 |
---|---|---|---|
EPD_GPIO_Init(); | 空 | GPIO 初始化 | |
EPD_init(); | 空 | 墨水屏初始化 | |
EPD_sleep(); | 空 | 进入睡眠模式 | 必要的函数,不可删除 |
delay_s(a); | 秒数 | 延时函数 | 延时 a 秒 |
PIC_display_Clear(); | 空 | 清屏函数 | 清除屏幕内容 |
EPD_init_GUI(); | 空 | GUI初始化 | 加载图形用户界面 |
Paint_SelectImage(); | 数组指针 | 设置虚拟画布数据存储位置 | |
Paint_Clear(); | 颜色(WHITE BLACK RED) | 清除图片颜色 | 不单独使用 |
EPD_Display(); | 数组指针 | 显示函数 | 将指定的内容进行显示 |
Paint_DrawNum(); | X,Y,数字,大小,背景块颜色,数字颜色 | 指定数字内容 | 不单独使用 |
Paint_DrawPoint(); | X,Y,颜色,粗细,填充样式 | 在指定坐标绘制点 | 不单独使用 |
Paint_DrawLine(); | X0,Y0,X1,Y1,颜色,实/虚线,粗细 | 绘制任意斜率的直线 | 不单独使用 |
Paint_DrawRectangle(); | X0,Y0,X1,Y1,颜色,是否填充,粗细 | 绘制矩形 | 不单独使用 |
Paint_DrawCircle(); | 圆心X,圆心Y,半径R,颜色,是否填充,粗细 | 指定位置绘制指定大小的圆 | 不单独使用 |
Paint_DrawString_EN(); | X,Y,字符串,大小,背景块颜色,字体颜色 | 显示字符串 | 不单独使用 |
Paint_DrawString_CN(); | X,Y,汉字或字符串,大小,背景块颜色,文字颜色 | 指定位置显示指定的汉字 | 不单独使用 |
程序的具体实现:
- 程序的初始化
- 程序初始化包括墨水屏的初始化,引脚的初始化,中断的初始化,GUI的初始化
- 必要的过程函数
- 设置函数:包括设置画布空间,设置屏幕尺寸和显示方向等
- 清除函数:应用在显示字符等内容上,过渡过程需要的函数
- 休眠函数:电子屏刷新后,必须进入睡眠模式,再重新初始化
- 整幅图像和指定字符的显示过程是不一样的,下面会分别解释
整幅图片的显示
- 显示整幅图像的步骤为先取模再调用如下四个函数,直接调用即可,任一函数都不可省略
EPD_init(); //初始化
PIC_display(gImage_BW,gImage_R); //显示函数
EPD_sleep(); //睡眠模式,不可删除
delay_s(2); //延时2s
- 具体说明:
- 调用上面四行语句,就可以在屏幕上显示存储的图像,黑白图像在底层,红白图像在顶层,叠加实现三色效果,图像的点阵数据存储在
Ap_29demo.h
文件中,使用两个数组分别存储,gImage_BW[15000]
存储黑白图像数据,gImage_R[15000]
存储红白图像数据,两个数组名称不要修改,我们只需要修改点阵数据即可。 - 图像的取模可以通过
image2lcd
软件实现,软件已经放在了附件中。 - 注意图像需要的格式为:尺寸:400 * 300 文件格式为 .bmp 文件,尽量是两种颜色且区别较大的图像
- 软件需要先注册来消除水印,注册码可以使用 0000-0000-0000-0000-6A3B ,软件按下图设置参数即可,之后点击打开导入图像,想要正常显示,颜色反转前打勾,调整一下亮度和对比度以达到最佳的显示效果,之后保存为
.c
文件,复制其中的十六进制文件替换到两个数组的文件即可 - 在
while(1)
中调用上面四句函数,如果不需要循环显示的话,在四句话后加上一句while(1);
即可
- 调用上面四行语句,就可以在屏幕上显示存储的图像,黑白图像在底层,红白图像在顶层,叠加实现三色效果,图像的点阵数据存储在
指定字符、图形等内容的显示
- 步骤:初始化 → 设置黑白空间 → 指定黑白内容 → 清除颜色 → 设置红白空间 → 指定红白内容 → 清除颜色 → 显示 → 睡眠
- 下面会给出一个模板:
Paint_NewImage(BW_Image,EPD_WIDTH,EPD_HEIGHT,0,WHITE); //设置黑白屏幕尺寸和方向
Paint_NewImage(R_Image,EPD_WIDTH,EPD_HEIGHT,0,WHITE); //设置红白屏幕尺寸和方向
EPD_init_GUI(); //初始化GUI
Paint_SelectImage(BW_Image); //设置黑白画布空间
Paint_Clear(WHITE); //清除图片颜色
/* 指定黑白内容开始 */
/* 指定黑白内容结束 */
Paint_SelectImage(R_Image); //设置红白画布空间
Paint_Clear(WHITE); //清除图片颜色
/* 指红白内容开始 */
/* 指定红白内容结束 */
EPD_Display(BW_Image,R_Image); //显示图像
EPD_sleep(); //进入必要的休眠模式,不可删除
delay_s(2); //延时2s
- 具体说明
- 显示指定内容,复制上面的语句,然后在两行注释位置间写入指定内容即可,下面会对不同的内容做相应的介绍
- 上述程序执行流程为:先设置屏幕的参数,再初始化GUI,也就是图形用户界面,之后设置好底层的黑白显示空间,就可以写入黑白内容了,指定内容后,再设置红白空间,写入红白内容,到这里,就已经指定显示的所有内容了,但是只是到这儿是不能显示的,需要调用显示函数,将上述内容显示出来,最后进入休眠模式。
- 显示数字、英文字符、绘制 点、线、 圆形、矩形 直接调用函数即可,显示中文需要先取一下字模,取字模软件同样放置在附件中,取字模过程会在下面介绍
- 上述的程序尽量不要随意修改,例如:如果不设置数据空间,删去Paint_SelectImage(BW_Image);则底层为全黑色,不设置Paint_SelectImage(R_Image);则顶层为全红色
- 下面会介绍数字、字符、点、线条、矩形、圆、汉字的显示方法,只需要将它们放在上述程序的注释处的内容即可
- 显示数字和字符串,因为两者的使用相似,所以放在一起
- 显示数字函数举例:
Paint_DrawNum(0, 0, 123456789, &Font24, WHITE, BLACK);
- 显示字符串函数举例:
Paint_DrawString_EN\(0, 70, "Hallo World", &Font24, BLACK, WHITE);
- 其中参数从左开始为:起始的X坐标、Y坐标、显示的数字/字符串、数字/字符串尺寸,背景尺寸,数字/字符串尺寸
- X的坐标范围: 0 ~ 400 Y的坐标范围 : 0 ~ 300
- 两个函数使用较为简单,前三项好理解,说下后面三项参数:
- &Font24:字符的尺寸,共5种,分别为&Font8、&Font12、&Font16、&Font20、&Font24,直接使用即可
- 背景颜色:墨水屏字符的显示区域为一个矩形,背景块和字符的显示颜色相反即可显示指定内容,此参数即背景块颜色
- 字符颜色:即文字的颜色,背景和文字颜色不同可实现反转的效果
- 显示数字函数举例:
- 指定位置显示 点
- 调用函数:
Paint_DrawPoint(X, Y, BLACK, DOT_PIXEL_8X8, DOT_STYLE_DFT);
- 参数:为X坐标 Y坐标 点 的颜色 点的大小 是否填充
- 其中点的大小范围是 1X1 ~ 8X8 ,默认点是填充的
- 调用函数:
- 绘制任意斜率的线段
- 调用函数:
Paint_DrawLine(X0, Y0, X1, Y1, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_8X8);
- 参数:从左到右--起始位置的X坐标,Y坐标,重点位置的X坐标、Y坐标、线条颜色、实线or虚线、线条粗细
- 经过前四个函数,即起点(X,Y) 和 终点(X,Y),这样,就达到了任意的斜率
- 之后是线条的类型:实线还是虚线,默认实线
- 最后是线条的粗细,同样是 1X1 ~ 8X8
- 调用函数:
- 指定位置显示指定尺寸的矩形
- 调用函数:
Paint_DrawRectangle(X0, Y0, X1, Y1, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1);
- 参数:左上角坐标X、Y,右下角坐标X、Y,矩形的颜色、是否填充,边的粗细
- 下图显示了填充和不填充的区别
- 调用函数:
- 显示任意的圆
- 调用函数:
Paint_DrawCircle(X, Y, R, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1);
- 参数:圆心的坐标--(X,Y)、半径R、颜色,是否填充、圆的粗细
- 下图显示了填充和不填充的区别
- 调用函数:
- 显示汉字
- 调用函数:
Paint_DrawString_CN(X,Y, "菊花台", &Font24CN, WHITE,BLACK);
- 参数:起始点坐标(X,Y),显示的中文,中文字体大小,背景颜色,文字颜色
- 其中,字体大小仅支持
Font12CN
以及Font24CN
- 使用中文,需要手动取字模,取模软件可以用
PCtoLCD2002
,我会放置在附件中,软件参数设置请看下图,需要:阴码 逐行式 顺向 输出十六进制 C51格式 Font12CN
对应的字符宽和高位 16 x 21 ,设置如下,还可以更改字体Font24CN
对应的字符宽和高位 32 x 41,设置如下- 接下来输入文字,点击
生成字模
,就会自动生成十六进制数据: - 需要
Font12CN
型号文字,则打开FONTS
文件下的font12CN.c
文件,复制刚才取模软件生成的数据到数组中,需要注意,生成的数据格式上需要和给出的例子的格式相同,即
- 调用函数:
{"你",
0x00,0x00,0x00,0x10,0x00,0x10,0x02,0x20,0x06,0x20,0x06,0x7E,0x0C,0x73,0x0C,0xC7,
0x19,0x9C,0x1B,0x10,0x38,0x10,0x68,0x92,0x09,0x93,0x09,0x93,0x0B,0x11,0x08,0x70,
0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
},/*"你"*/
Font24CN
型号是一样的步骤,只要数组中有了字模,就可以在函数中随意使用了
设计图
原理图
PCB
BOM
ID | Name | Designator | Footprint | Quantity |
---|---|---|---|---|
1 | PWR | LED1 | 0603_D_JX | 1 |
2 | 4.7K/1% | R2 | 0603_R_JX | 1 |
3 | 68uH | L1 | IND-SMD_L6.0-W6.0_FNR60XXS | 1 |
4 | 105 | C14,C13,C12,C11,C10,C9,C8,C7,C6,C5 | C0603 | 10 |
5 | 4.7uf | C2 | C0603 | 1 |

添加到专辑
0
0
分享
侵权投诉
评论