• cubeIDE开发,结合汉字取模工具,在LCD输出各种字体


    目录

    一、汉字取模工具

    二、汉字取模配置

     三、创建工程

    四、汉字LCD显示设计

    五、汉字输出测试

     六、附件


    一、汉字取模工具

            嵌入式LCD屏显示无非就是不间断刷新LCD宽度*LCD高度的像素矩阵,并为每个像素指定特定颜色。对于LCD屏幕显示汉字,无非就是将字体形状转换为字体宽度*字体高度的像素矩阵,及指定每个字体像素的颜色,然后在LCD屏幕指定位置按字体宽度*字体高度的像素矩阵进行刷新渲染。

            汉字取模工具可以设置汉字显示的行、列像素大小,设置字体类型等信息,将输入的每个字符转换成指定行宽、列宽的二进制矩阵,在该矩阵中,字体覆盖区域采用1标记、字体不覆盖区域采用0标记。

            取模工具读者可以自行在网上搜索“LcmZimo.exe”下载,或采用下面链接:

    嵌入式开发之lcd汉字取模工具-嵌入式文档类资源-CSDN下载

    二、汉字取模配置

            我们双击LcmZimo.exe打开,取模工具界面如下,红框部分是字体相关参数设置,篮框部分是图片参数设置(通常用于各种艺术字体、图片像素等):

             现在来制作24*24矩阵的“嵌入式开发测试!”的字体编码表,如下图进行设置。

             最终得到字符编码表:

             点击保存,将字符编码表输出为头文件“pytest.h”,如下图:

     三、创建工程

            本文基于STM32L496VGT3的MCU创建一个新工程,并提前实现了lpusart串口驱动、三个按键及三个LED灯驱动、以及OLED屏幕驱动(SPI引脚),相关设置参考本专栏的博文:

       cubeIDE开发, stm32的OLED点亮及字符显示设计(基于SPI通信)_py_free的博客-CSDN博客

            假定已经实现了这些基本功能,在此基础上实现OLED屏幕显示刚刚定义汉字“嵌入式开发测试!”。

    四、汉字LCD显示设计

            将刚才取模软件保存输出的pytest.h头文件拷贝到ICore/oled目录下,本文对pytest.h做了细微调整(去除一些不规范编程告警,不调整无影响):

             取模软件针对每个字符输出了一个72字节的8bit的数值,也就是72字节*8bit=576bit=24*24像素,目前该字符编码在取模软件上设置是横向取模左高位,数据排列:从左到右从上到下,就意味着,每3个字节*8bit=24bit表示一行的像素,如前三个字符0X00 0X18 0X00->0000 0000 0001 1000 0000 0000,作为“嵌”字第一行像素标记,位数值为1的填充前景色,为0的填充背景色。具体代码如下:

    1. //绘制每个字符,24*24像素大小
    2. void OLED_DISPLAY_24x24(uint8_t xpos, uint8_t ypos,uint8_t index)
    3. {
    4. uint16_t textData[24][24]={0}; //24*24大小颜色矩阵
    5. FNT_GB24 cur_text = code_GB_24[index];
    6. for(uint8_t i=0;i<72;i++){
    7. for(uint8_t j=0; j<8; j++)
    8. if(cur_text.Msk[i]&(0x01<<(8-j))){
    9. textData[i/3][(i%3)*8+j] = LCD_DISP_BLUE;//前景色,蓝色
    10. }else{
    11. textData[i/3][(i%3)*8+j] = LCD_DISP_BLACK;//背景色,黑色
    12. }
    13. }
    14. for(uint8_t i=0; i<24; i++)
    15. {
    16. OLED_WriteLine(xpos,ypos+i,textData[i],24);//列像素渲染
    17. }
    18. }

            上述代码中,每个汉字72字节编码表,3个字节表示一行(列宽3*8bit=24),共24行(72字节/3=24),构成24*24的二进制矩阵,然后根据该二进制矩阵,为1的给与前景色,为0的给与背景色,从而得到24*24的颜色矩阵,然后在渲染时在24*24像素的LCD区域渲染对应的颜色,形成屏幕显示输出。

            然后逐个字符绘制输出,完成前面输入字段“嵌入式开发测试!”的全部输出:

    1. void BSP_LCD_login(uint8_t xpos, uint8_t ypos)
    2. {
    3. BSP_LCD_Clear_DMA(LCD_DISP_BLUE);
    4. for(uint8_t index=0; index<8;index++)
    5. {
    6. OLED_DISPLAY_24x24(xpos+index*24,ypos,index);
    7. }
    8. }

    五、汉字输出测试

            在主循环函数中,按键KEY0时,屏幕输出显示“嵌入式开发测试!”字段:

             编译及下载:

             按键KEY0,屏幕输出显示如下:

     六、附件

            源码地址:https://download.csdn.net/download/py8105/87241407

  • 相关阅读:
    Vue生成带图片logo以及文字的二维码组件,可下载二维码为图片,附组件调用代码--核心qrcode
    Element-Ui+Vue实现首页布局(带收缩展开效果)
    Etcd-v3.4.27集群部署
    tf.contrib.image
    Window10安装linux子系统及子系统安装1Panel面板
    /apache/lib/libapr-1.so.0: undefined symbol: dlopen
    MacBook 往服务器上传、下载文件的几种操作
    【数据结构算法(一)】递归篇(常见实例讲解)
    OpenCV实现Photoshop曲线调整
    Redis占用内存过高怎么办
  • 原文地址:https://blog.csdn.net/py8105/article/details/128173762