OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8277|回复: 7

SD卡做字库已搞定,这速度不知正常不?(已解决)

[复制链接]

31

主题

269

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
发表于 2013-3-13 19:11:06 | 显示全部楼层 |阅读模式
我用SD卡做的字库,只有中文。共6768个汉字。我把所有汉字保存在一个文本文档中,
然后用STM32读取此文档并将所有汉字显示到屏幕上(满了就清屏一次)
这样下来,算了一下大概要11分40秒才能将所有汉字完整的显示一遍,查找速度大约9汉字/秒。
在字库中查找汉字数据的办法是我自己想的比较笨的办法。
谁来买我的火柴.....
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-13 22:29:29 | 显示全部楼层
回复【楼主位】古月:
---------------------------------
能做出来,不错了,呵呵。
你的查找方法是怎么样的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

31

主题

269

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
 楼主| 发表于 2013-3-14 11:54:00 | 显示全部楼层

思路是这样的:做的字库中全是中文汉字,不考虑特殊字符、标点、英文等等。。。
先计算出汉字是第几个字,再在字库中读取该位置对应的数据。
①:
//高字节:0xB0--F7 低字节:0xA1--FE
u8 ZK_HUANSUAN(u8 ch, u8 j)
{
     if (j == 0)
     {
          return (ch - 0xb0);  //返回高字节区码
     }
     else if (j == 1)
     {
          return (ch - 0xa0);  //返回低字节位码
     }
     return 0xff;    //返回错误代码
}
②:
num[j] = ZK_HUANSUAN(*hz, j);//这里每两个字符做成一组
number = (num[0] * 94) + num[1]; //计算出是第几个字,在哪个位置 

③:
 n = number / 16;//如果汉字的位置比较靠后的话,就大块读取数据(每512字节/块) 
 for (i = 0; i < n - 1; i++) //舍一块数据,不读这512字节
 {
      res = f_read(&file, read_buffer_big, 512, &br);//一次最多读取512字节,此处作用是抛弃无用数据,让读数据指针累加后移
 }
 if (n == 0)
 {
      n = number % 16;//除去第一个512字节块
 }
 else
 {
      n = number % 16 + 16;//最后的数据:512字节(加上舍去的一块数据) + 32字节的倍数(剩余数据) 
 }
 for (i = 0; i < n; i++)
 {
      res = f_read(&file, read_buffer_small, 32, &br);//最后一次的32个字节才是真正的汉字码,以前的数据都覆盖丢失了
 }
res = f_close(&file);//读取完毕,关闭文件

就这样最后read_buffer_small中的32字节就是汉字的数据。描点就OK了。

ziku.FON

211.35 KB, 下载次数: 230

ziku.txt

13.21 KB, 下载次数: 159

谁来买我的火柴.....
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-14 14:20:08 | 显示全部楼层
有个f_lseek,可以直接定位的,你试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-3-14 17:30:05 | 显示全部楼层
是的 用f_lseek直接定位,我汉字是用的BIN
1-1
回复 支持 反对

使用道具 举报

31

主题

269

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
 楼主| 发表于 2013-3-14 17:37:34 | 显示全部楼层
原来有此函数的说害的我费这么大劲来定位,这个函数见过但是没用过,这下就漂亮了撒。
刚刚加入了中英文及特殊字符等等。。。还是原来的办法,可以阅读小说了。
我再用f_lseek试试。谢谢原子和mygod!
谁来买我的火柴.....
回复 支持 反对

使用道具 举报

31

主题

269

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
 楼主| 发表于 2013-3-14 18:03:26 | 显示全部楼层
好强悍,果然一下就OK了。
不过有个问题,就是在文本文档中,遇到回车等情况怎么处理。
谁来买我的火柴.....
回复 支持 反对

使用道具 举报

7

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2011-9-3
在线时间
4 小时
发表于 2013-3-14 22:22:10 | 显示全部楼层
不错,有空研究下。
http://shop60782849.taobao.com/显示屏专卖
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-23 19:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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