单片机

您所在的位置:网站首页 esp8266屏幕驱动板 单片机

单片机

2024-07-11 09:04| 来源: 网络整理| 查看: 265

前一章介绍了在ESP8266下搭建的天气预报机。 单片机—ESP8266模块开发

当时结果中含有中文的部分乱码了,今天尝试着解决一下这个问题。 这里涉及到的问题有以下几步:

首先要将utf-8的字符串,转化为gbk编码,然后通过查找HZK字库,找到对应的点阵数据,修改扫描模式,最后放到屏幕上显示。优化多个字符一起显示优化中英文一起显示

我们一步一步来尝试解决。 在这里插入图片描述

utf转gbk编码

我们的开发环境是ESP8266的开发板,用了的freeRTOS系统,对比常规linux下面的iconv方式,我们并没有这个库,移植的话,比较麻烦(其实就是懒) 在这里插入图片描述

这里介绍了一个查表法的版本。 代码下载 c语言版本utf-8转gbk查表法

使用方式就是下面的接口

int SwitchToGbk(const unsigned char* pszBufIn, int nBufInLen, unsigned char* pszBufOut, int* pnBufOutLen)

做个测试先。在这里插入图片描述

我们可以先将两个文件编译进去,测试一下转化效果

unsigned char out[8]={0}; int lenout=0; unsigned char falsh[8]={0}; ESP_ERROR_CHECK( nvs_flash_init() ); SwitchToGbk((unsigned char*)"我",3, out, &lenout); printf("lenout:%d 0x%02x 0x%02x\n",lenout,out[0],out[1]);

打印中可以看到 在这里插入图片描述 通过对照gbk编码表 在这里插入图片描述 发现没有问题。这么顺利? 在这里插入图片描述

查找字库

继续,gbk转化字模。这里用到了HZK字库,下载链接 HZK字库 这个字库是一个文件,但是我们的单片机上,并没有办法比较合适的将这个文件直接导入到设备中,因为并没有现成的文件系统在里面,所以,这里用flash方式,直接将文件烧录到固定的位置上,到时候直接读取flash中的内容就可以获得相应的数据了。 在这里插入图片描述

首先烧写HZK文件 我们的是8Mflash,也具体不太清楚前面用到了多少,所以我用了最后1M的位置来存储这个HZK文件,HZK文件大概两百多K,足够了 在这里插入图片描述 然后我们再次测试读写flash接口。使用的是接口

esp_err_t spi_flash_read(size_t src_addr, void *des_addr, size_t size) { if (!s_emulator) { return ESP_ERR_FLASH_OP_TIMEOUT; } if (!s_emulator->read(reinterpret_cast(des_addr), src_addr, size)) { return ESP_ERR_FLASH_OP_FAIL; } return ESP_OK; }

测试一下我们刚才烧写进去的文件,就检查这两位,看看一致不一致。 在这里插入图片描述 读取函数

spi_flash_read(0x700000+0x70, falsh, 2); printf("falsh: 0x%02x 0x%02x\n",falsh[0],falsh[1]);

测试结果 在这里插入图片描述 没毛病。

字符显示

然后我们就开始查找HZK,找到测试字符“我”的点阵数据,利用前面的数据,我们接着测试

offset = (94*(unsigned int)(out[0]-0xa0-1)+(out[1]-0xa0-1))*32; spi_flash_read(0x700000+offset, falsh, 32); for(k=0; k


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3