使用编译器环境: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