使用编译器环境:KEIL5.38A 一根MicUSB线。
实验目标:在墨水屏中显示汉字
经过之前时间得研究墨水瓶,使用KEIL编译软件对字符串显示,基本是可以正常,对于驱动汉字还是有些困难得,类似于其他单片机通过IIC驱动界面显示得方法.
在调试的时候遇到屏幕刷新太快的话,会导致某些汉字无法正常显示,所有我们在刷新汉字的时候,不要频繁的刷新屏幕,对于相同的界面不要重复刷新,只需要刷新一次即可,可以使用板载的LED对程序的工作状态进行显示。。
驱动汉字的代码如下:
extern const unsigned char acHZK16C[];
#define GB2312_FONT_H 16
#define GB2312_FONT_W 16
*显示GB2132*/
void draw_fb_GB2132(int x, int y, int bankCode, int posCode) {
const unsigned char *pData = NULL;
unsigned char idxX, idxY;
int lineData;
int pos;
pos = ((bankCode - 0xA1) * 94 + (posCode - 0xA1)) * (GB2312_FONT_H * GB2312_FONT_W / 8);
pData = acHZK16C + pos;
for (idxY = 0; idxY < GB2312_FONT_W; idxY++) {
lineData = pData[idxY * 2];
lineData = lineData << 8;
lineData = lineData | pData[idxY * 2 + 1];
for (idxX = 0; idxX < GB2312_FONT_H; idxX++) {
if (lineData & (0x01 << idxX)) {
draw_fb_point(x + GB2312_FONT_H - idxX, y + idxY);
} else {
clear_fb_point(x + GB2312_FONT_H - idxX, y + idxY);
}
}
}
}
///*显示汉字*/
void draw_hanzi(int x, int y, char *data) {
int i, dataLen = My_strlen(data);
for (i = 0; i < dataLen;) {
if (data[i] > 127) {
if ((x + GB2312_FONT_H) > EPD_H) {
x = 0;
y += GB2312_FONT_W;
}
draw_fb_GB2132(x, y, data[i], data[i + 1]);
x += GB2312_FONT_H;
i += 2;
} else {
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++;
}
}
}实物效果如下:




开发心得:
主要是对屏幕的大小进行判断,不要过快的刷新屏幕,频繁的刷新屏幕导致屏幕刷新不正常,还有就是对按键的处理,对于同一按键的扫描不要,需要增加去抖的处理。要不然会导致屏幕快速的刷新或者是按下一次按键时,多次触发的情况。
下方B站视频是开发过程的任务展示:
B站视频连接
https://www.bilibili.com/video/BV18h1yYbEw7/?spm_id_from=333.999.0.0
我要赚赏金
