数码之家

 找回密码
 立即注册
搜索
查看: 3572|回复: 7

[C51] 搞了个UNICODE字库,用于LCD12864

[复制链接]
发表于 2021-10-11 19:42:26 | 显示全部楼层 |阅读模式
        一直对小功放机的蓝牙音频模块只能用按键控制,不能用单片机控制感到不方便。最近终于看到一款不到10元钱的,支持串口控制的蓝牙音频模块,买回来后,看说明知道支持串口输出播放U盘或TF卡的歌曲名,但输出编码格式是UNICODE的,找了很久,网上的字库都是GB2312的,需要转码,有的还是横向取模的,不适合用于LCD12864液晶屏。经过多方查找,找到一个支持输出UNICODE格式的字库生成软件,当然,它输出汉字的多少取决于字模点阵有多大,是不是常用字,像我取16x16的,感觉也就是GB2312中有的字。但字库占用的空间不大,用个EN25T80就装得下。








这个是取模软件(这个是别人注册后分享出来的,下载地址为:http://crxza.198424.com/charactermatrix.zip),在16x16点阵下是这个样子的,空白的位置是用0表示的,也就是读这个位置会显示空白。取模方式纵向取模,高位在下,纵向排列。和NOKIA5110屏,主控是st7567的各类点阵屏(如12864屏)是相同的


这个是读取以EN25T80作为字库时的读取程序,用的是STC单片机的硬件SPI。中断方式读数据,输入24位地址,读出32个数据
  1. void en25t80_reak(DWORD adds)
  2. {
  3.         BYTE enn;
  4.         en25t80_cs=0;
  5.         //SPCTL=0xd0;//spi工作
  6.         spi_ok=0;
  7.         SPDAT=0x03;//读数据
  8.         //spi_ok=0;
  9.         while(!spi_ok);
  10.         spi_ok=0;
  11.         SPDAT=adds/65536;//地址d23-d16
  12.         while(!spi_ok);
  13.         spi_ok=0;
  14.         SPDAT=adds%65536/256;//地址d15-d8
  15.         while(!spi_ok);
  16.         spi_ok=0;
  17.         SPDAT=adds%256;//地址d7-d0
  18.         while(!spi_ok);
  19.         for(enn=0;enn<32;enn++)
  20.         {
  21.         spi_ok=0;
  22.         SPDAT=0xff;//数值随意,用于产生时钟信号
  23.         //spi_data[0]=SPDAT;
  24.         while(!spi_ok);//等待接收完成
  25.         spi_data[enn]=SPDAT;//接收数据
  26.         }
  27. en25t80_cs=1;
  28. }

复制代码


这个是字库,里面只有中文字,英文字没有,地址从0开始。要知道一个汉字的开始 地址,代码是这样的
  1. chinese_spi_code=(chinese_spi_code-0x4e00)*32;
  2. en25t80_reak(chinese_spi_code);
复制代码



这里的0x4e00是汉字“一”的UNICODE码,chinese_spi_code是对应汉字的UNICODE码,再读字库得到32个数据,组成一个汉字的16x16点阵字符。
查询汉字的UNICOED可以用微软的Word,输入汉字后选中,再按Alt+X,如果知道编码,不知道汉字,用”插入“菜单中的“符号“,里面支持BGK和UNICODE编码汉字的查找,用;也可以用网页https://bianma.supfree.net/chaye.asp?id=6570http://www.dwenzhao.cn/cal/php/gbkunicode.php

要在点阵屏上显示这个汉字的代码是这样的

  1. void LCD_write_chinese_spi_string(unsigned char X, unsigned char Y)//,         // 12,4
  2. {
  3.     unsigned char n;
  4.    
  5.     LCD_set_XY(X,Y);                             //设置初始位置
  6.    
  7.     for (n=0; n<32; n++)              //写一个汉字
  8.                 {
  9.                   if (n==16)                      //写汉字的下半部分地址
  10.                     {
  11.                       LCD_set_XY(X,Y+1);
  12.                       }
  13.                          LcdDataWrite(spi_data[n]);
  14.          }
  15. }
  16.   

复制代码





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +60 收起 理由
家睦 + 60

查看全部打赏

发表于 2021-10-11 20:07:02 | 显示全部楼层
我去,牛鼻啦
回复 支持 反对

使用道具 举报

发表于 2021-10-11 20:11:34 | 显示全部楼层
unicode不错~~~ 芯片容量越来越大

也有这样的屏呀

:lol:
回复 支持 反对

使用道具 举报

发表于 2021-10-12 01:02:27 | 显示全部楼层
搞一个24C16一类我觉得很方便,但是自己烧字库就是成本高一些:lol:
回复 支持 反对

使用道具 举报

发表于 2021-10-12 23:25:54 来自手机浏览器 | 显示全部楼层
这个模块俺折腾过,usb加蓝牙播放,串口控制,只是实现了播放曲目和时间,没有做中文显示
回复 支持 反对

使用道具 举报

发表于 2021-10-13 10:17:51 | 显示全部楼层
好像 W25Q16  那样的,也不算很贵
回复 支持 反对

使用道具 举报

发表于 2021-10-17 14:13:10 来自手机浏览器 | 显示全部楼层
蓝牙音频模块方便推荐下?另外,论坛有做字库的精华贴。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-19 21:41:34 来自手机浏览器 | 显示全部楼层
hefanghua 发表于 2021-10-17 14:13
蓝牙音频模块方便推荐下?另外,论坛有做字库的精华贴。

芯片是杰理的AC6902,清月电子二次开发的BT201,但是不要在它哪卖,贵,有几家在卖和它一样子的。字库他们都是用GB2312编码的,现在网页和这个蓝牙模块,用的是UNICODE编码,这两者之间还要有一个转码的数组,好几百K大呢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-6-9 20:07 , Processed in 0.234001 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表