0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】基于HiSpark Wi-Fi IoT套件_5-OLED中文显示

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-04 16:21 次阅读
本文来源电子发烧友社区,作者:徐以锋, 帖子地址:https://bbs.elecfans.com/jishu_2012060_1_1.html


上一篇报告已经过去一个月了,主要是公司项目太急,耽搁太长时间。上一次的报告主要主要介绍了HI3861的IIC操作,控制OLED显示英文“hello world”,当时调试的时候其实是想显示中文的,但是因为原先IAR开发环境下的中文显示程序移植到鸿蒙里面后居然一堆错误,编译器差异文中对应细节会
详述,所以只显示了英文。
那之后总归觉得OLED怎么也得能显示中文吧,所以本篇主要介绍怎么在OLED上显示中文,当然是基于上次报告的代码,最终代码会在文末附件里。主要内容有如下几点:
1、 汉字取模
2、 代码编写修改
3、 烧录测试
一、汉字取模
上次报告已经介绍过,套件使用的OLED显示cache如下图所示,显示点阵对应cache每个字节的顺序是从左到右从上倒下,而显示的每个字节的bit是高位在下。
105009o4qqdqsdbqt632rq.png
通过显存与点阵对应关系,那汉字取模要遵循字节从左到右从上到下,字节内为纵向8点(一个字节位数)下高位取模方式,使用的取模软件是“LcmZimoLCD字模提取工具软件”,报告后边会在附件中体现。因此,最终软件设置界面设置内容如下图所示:
105010eu4z3c7rz30mmlc7.png
设置完成后点击“参数确认“并在下方文字框中输入”你好“并点击输入字串进入下一界面,下一界面如下图所示:
105011u9wi8nzobl9of09i.png
由图中可以看出汉字取模已经完成,并直接生成C语言代码。形式如下:
  1. // ------------------汉字字模的数据结构定义------------------------ //
  2. typedef struct typFNT_GB16 // 汉字字模数据结构
  3. {
  4. signed char Index[2]; // 汉字内码索引
  5. char Msk[32]; // 点阵码数据
  6. };
复制代码
  1. /////////////////////////////////////////////////////////////////////////
  2. // 汉字字模表 //
  3. // 汉字库: 宋体16.dot 纵向取模下高位,数据排列:从左到右从上到下 //
  4. /////////////////////////////////////////////////////////////////////////
  5. struct typFNT_GB16 code GB_16[] = // 数据表
  6. {
  7. "你",0x40,0x20,0xF8,0x07,0x40,0x20,0x18,0x0F,
  8. 0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,
  9. 0x00,0x00,0xFF,0x00,0x00,0x08,0x04,0x43,
  10. 0x80,0x7F,0x00,0x01,0x06,0x0C,0x00,0x00,
  11. "好",0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,
  12. 0x82,0x82,0xE2,0x92,0x8A,0xC6,0x80,0x00,
  13. 0x40,0x22,0x15,0x08,0x14,0x63,0x00,0x00,
  14. 0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00
  15. };
  16. // 汉字表:
  17. // 你好
复制代码

此处生成的代码需要做进一步修改方可使用鸿蒙系统使用的GCC编译器,具体修改内容会在代码修改中做详述。
二、代码编写与修改
代码修改主要有如下几点。
1、 单个汉字字符机构体修改:
修改汉字取模软件生成的代码,能够通过鸿蒙交叉编译器,其中结构体 struct typFNT_GB16 内的signed char Index[2]; 索引值由2更改为3,因为单个汉字在双引号内时还需要一个字节存储字符串结束字符“”。最终更改后的结构体如下:
  1. struct typFNT_GB16 // 汉字字模数据结构
  2. {
  3. unsigned charindex[3]; // 汉字内码索引
  4. charmask[32]; // 点阵码数据
  5. };
复制代码
2、 汉字码表:
查看上文中生成的汉字码表struct typFNT_GB16 code GB_16[],可以看出字模软件将所有数据都以字节数组的方式存放的,这种存放方式在IAR中可以直接编译通过,也就是IAR会将字符数组映射到struct typFNT_GB16内容中,而鸿蒙使用的GCC编译器不支持此类操作,所以上次报告未能实现中文显示。根据编译器报错提示,需要将生成的汉字码表更改为如下:
  1. const structtypFNT_GB16ST_GB_16[] =
  2. {
  3. {
  4. {"你",},
  5. {
  6. 0x40,0x20,0xF8,0x07,0x40,0x20,0x18,0x0F,
  7. 0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,
  8. 0x00,0x00,0xFF,0x00,0x00,0x08,0x04,0x43,
  9. 0x80,0x7F,0x00,0x01,0x06,0x0C,0x00,0x00,
  10. }
  11. },
  12. {
  13. {"好",},
  14. {
  15. 0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,
  16. 0x82,0x82,0xE2,0x92,0x8A,0xC6,0x80,0x00,
  17. 0x40,0x22,0x15,0x08,0x14,0x63,0x00,0x00,
  18. 0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,
  19. }
  20. },
  21. };
复制代码
3、 显示函数添加中文显示代码:
需要在OLED驱动中添加汉字处理部分,本报告依据上一个报告主要是修改OLED_DrawString16函数。其中有几个需要特别注意的在代码中有注释。修改后代码如下:
i
  1. ntOLED_DrawString16(int x, int y ,constchar* p_str, int color)
  2. {
  3. int i , j , m ;
  4. const unsigned char *p_asc= 0;
  5. const char* p_cn= 0;
  6. const struct typFNT_GB16* p_cn_lib ;
  7. if((x >= 120) || (y >= 7))
  8. return -1;
  9. while(*p_str != '')
  10. {
  11. // 判断当前字节是不是汉字字符,
  12. // 汉字编码用两个字节表示一个汉字,并且起始自己大余0x7f
  13. // 本来使用(*p_str)<0X80,但是编译器编译有Warning提示
  14. // 提示为此条指令永远为true,编译中不允许有告警故更改为
  15. //(*p_str)&0X80)==0
  16. if(((*p_str)&0X80)==0)
  17. {
  18. p_asc = nAsciiDot16X8 + ((*p_str -32)<< 4) ;
  19. for(j = 0 ; j < 2 ;  j++)
  20. {
  21. for(i = 0 ; i < 8 ; i++)
  22. {
  23. if(color)
  24. {
  25. OLEDBuffer[(y + j)][x +i]= * p_asc ++;
  26. }
  27. else
  28. {
  29. OLEDBuffer[(y + j)][x +i] = ~(* p_asc ++) ;
  30. }
  31. }
  32. }
  33. x += 8 ;
  34. p_str ++ ;
  35. }
  36. Else
  37. {
  38. printf("[xxxxx]hanzi.
  39. ");
  40. p_cn = (char*)-1;
  41. p_cn_lib = ST_GB_16 ;
  42. m = GetSTLiberayNum();
  43. for(i = 0 ; i < m ; i++)
  44. {
  45. printf("[xxxxx] *p_str =%x.
  46. ",*p_str);
  47. // 此处多一个char型指针取值与0xff解释在代码末尾
  48. if(((*p_str)&0xff) ==p_cn_lib->index[0])
  49. {
  50. printf("[xxxxx]bingo1.
  51. ");
  52. if(((*(p_str+1))&0xff)== p_cn_lib->index[1])
  53. {
  54. p_cn = p_cn_lib->mask ;
  55. printf("[xxxxx]bingo2.
  56. ");
  57. break ;
  58. }
  59. }
  60. p_cn_lib++;
  61. }
  62. if(p_cn != (char*)-1)
  63. {
  64. for(j = 0 ; j < 2 ;  j++)
  65. {
  66. for(i = 0 ; i < 16 ;i++)
  67. {
  68. if(color)
  69. {
  70. OLEDBuffer[(y +j)][x + i]= * p_cn ++;
  71. }
  72. else
  73. {
  74. OLEDBuffer[(y +j)][x + i] = ~(* p_cn ++) ;
  75. }
  76. }
  77. }
  78. }
  79. x += 16 ;
  80. p_str += 2;
  81. }
  82. }
  83. return x;
  84. }
复制代码

以上代码修改过程中从注释可以看出有两个地方编译器有特别之处,第一个在代码注释中已经解释,而第二个贴别解释一下,因为本人也很困惑。
其中((*p_str)&0xff) == p_cn_lib->index[0]这一条,p_str按照定义类型是“constchar*”,对其取值应该是char类型,而实际取值后是一个4字节数值。可能所使用的gcc中char为4字节的类型,使用printf("[xxxxx] *p_str =%x.
",*p_str);语句串口打印居然在字符值前面添加了0xffffff--。所以才有了((*p_str)&0xff)的处理。此处问题折腾了半个下午才找到原因,一方面对gcc使用不多,不是很熟悉,另一方面可能是自己编程方式有问题。
4、 显示代码添加:
在OLED显示驱动中添加OLED_DrawString16(8,4,"你好",1);语句,并修改BUILD.gn文件添加字库代码文件,编译生成bin文件。
三、编译测试
编译测试不多说了,下载后按RESET按键重启,OLED显示内容如下图:
105012pz6sf3frnrjcvvkv.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • wi-fi
    +关注

    关注

    14

    文章

    2183

    浏览量

    125605
  • HarmonyOS
    +关注

    关注

    79

    文章

    1987

    浏览量

    31067
  • HiSpark
    +关注

    关注

    1

    文章

    156

    浏览量

    7050
收藏 人收藏

    评论

    相关推荐

    Wi-Fi 8要来了!未来Wi-Fi技术演进方向揭秘

    产品销售中,虽然Wi-Fi 7产品的销量份额快速从年初的个位数百分比增长至14%,但Wi-Fi 6产品的销量份额依然稳定在60%左右。如果从存量设备来看,那么Wi-Fi 7路由器的占比将远远小于这个数。   智能手机等终端设备已
    的头像 发表于 11-24 03:14 2480次阅读
    <b class='flag-5'>Wi-Fi</b> 8要来了!未来<b class='flag-5'>Wi-Fi</b>技术演进方向揭秘

    华为海思正式进入Wi-Fi FEM赛道?

    产品和技术交流。 2017年是国产Wi-Fi FEM元年,锐迪科(RDA)是中国大陆第一家推出和量产Wi-Fi5 FEM的公司,也是第一家导入H公司的Wi-Fi FEM厂商。 也是在这一年,我频繁地跟H
    发表于 12-11 17:42

    摩尔斯微电子发布Wi-Fi HaLow评估套件,加速物联网开发

    近日,全球领先的Wi-Fi HaLow解决方案提供商摩尔斯微电子正式推出一款开创性的评估套件——MM6108-EKH05。这款完全整合的开发平台,旨在推动各行业物联网解决方案的快速发展
    的头像 发表于 12-11 13:40 426次阅读

    Wi-Fi 4到Wi-Fi 7:网速飙升40倍的无线革命

    Wi-Fi 4首次引入MIMO和40 MHz频宽,是基础的高效无线网络标准。   Wi-Fi 5 Wi-Fi 5拥有更高的数据速率,专注于
    的头像 发表于 12-09 10:10 545次阅读
    从<b class='flag-5'>Wi-Fi</b> 4到<b class='flag-5'>Wi-Fi</b> 7:网速飙升40倍的无线革命

    Wi-Fi 7有哪些底层技术优势

    您在多个Wi-Fi行业活动中代表LitePoint。Wi-Fi 7带来了哪些新颖且有趣的特点?
    的头像 发表于 11-15 15:27 698次阅读

    Wi-Fi 7与Wi-Fi 6E有什么区别

    也许很多人还在考虑是否要将使用的Wi-Fi设备升级到Wi-Fi 6或Wi-Fi 6E,而这些标准的继任者却已经开始“登堂入室”了。Wi-Fi 7是新一代
    的头像 发表于 11-07 11:38 1619次阅读

    最典型的3家Wi-Fi Halow芯片企业

    Wi-Fi Halow是Wi-Fi联盟推出的专门面向物联网市场的标准。
    的头像 发表于 08-30 09:58 2491次阅读
    最典型的3家<b class='flag-5'>Wi-Fi</b> Halow芯片企业

    IR900 Wi-Fi联网的配置过程

    , 通过SSID扫描可以查看;输入密码,点击保存; 在SSID扫描页面中查看是否连接成功, 如果没有请检查认证方式、加密方式、密码是否输入正确; Wi-Fi扫描显示“已连接”,进入“快速向导-新建WAN
    发表于 07-25 06:09

    未来的Wi-Fi路由器

    厂家加入开始杀价,Wi-Fi FEM由于厂家众多,价格一降再降,直接杀到成本价以下,DC-DC电源芯片也好不到哪里去,供应商的上市年度报和季度报也是不堪入眼。 除了跟着主芯片从Wi-Fi4升级到Wi-Fi5,再从
    的头像 发表于 06-20 15:32 556次阅读

    DA16200 超低功耗 Wi-Fi 模块开发套件 Pro数据手册

    电子发烧友网站提供《DA16200 超低功耗 Wi-Fi 模块开发套件 Pro数据手册.rar》资料免费下载
    发表于 05-30 17:53 1次下载
    DA16200 超低功耗 <b class='flag-5'>Wi-Fi</b> 模块开发<b class='flag-5'>套件</b> Pro数据手册

    DA16200 超低功耗 Wi-Fi 模块开发套件数据手册

    电子发烧友网站提供《DA16200 超低功耗 Wi-Fi 模块开发套件数据手册.rar》资料免费下载
    发表于 05-30 17:13 0次下载
    DA16200 超低功耗 <b class='flag-5'>Wi-Fi</b> 模块开发<b class='flag-5'>套件</b>数据手册

    AIROC™ Wi-Fi和蓝牙组合连接掉线的原因?怎么解决?

    我最近购买了一台配备 AIROC™ Wi-Fi 和蓝牙组合模块的笔记本电脑。 大多数时候,Wi-Fi 连接都能正常使用图书馆创世纪网站ePUB 转换工具、在线书店和学术出版物,但我注意到蓝牙连接总是
    发表于 05-24 07:48

    华为获得全球首个国际Wi-Fi联盟WFA企业级Wi-Fi 7认证!

    Wi-Fi联盟已发布Wi-Fi 7认证标准,华为是第一批送测厂商,获得业界首个企业级Wi-Fi 7 的Wi-Fi联盟官方认证。
    的头像 发表于 04-28 10:17 859次阅读
    华为获得全球首个国际<b class='flag-5'>Wi-Fi</b>联盟WFA企业级<b class='flag-5'>Wi-Fi</b> 7认证!

    验证物联网Wi-Fi HaLow用例的MM6108-EKH08开发套件来啦

    验证物联网Wi-Fi HaLow用例的MM6108-EKH08开发套件来啦 MM6108-EKH08开发套件专为验证物联网Wi-Fi HaLow用例而设计。该
    的头像 发表于 04-11 12:01 1923次阅读
    验证物联网<b class='flag-5'>Wi-Fi</b> HaLow用例的MM6108-EKH08开发<b class='flag-5'>套件</b>来啦

    Wi-Fi 7与Wi-Fi 6的相关知识科普

    科普:Wi-Fi 7 vs. Wi-Fi 6,青出于蓝
    的头像 发表于 03-12 10:59 940次阅读
    <b class='flag-5'>Wi-Fi</b> 7与<b class='flag-5'>Wi-Fi</b> 6的相关知识科普