野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14280|回复: 12

关于48×48汉字的显示

[复制链接]
发表于 2016-4-7 15:25:41 | 显示全部楼层 |阅读模式
请问大神,我现在想使用48×48的字库,应该怎么扫描汉字的点阵呢?比如开发板程序中扫描24×24是这么写的:
for ( ucPage = 0; ucPage < macHEIGHT_CH_CHAR; ucPage ++ )
        {

                usTemp = ucBuffer [ ucPage * 3 ];
                usTemp = ( usTemp << 8 );
                usTemp |= ucBuffer [ ucPage * 3 + 1 ];
                usTemp = ( usTemp << 8 );
                usTemp |= ucBuffer [ ucPage * 3 + 2];
       
               
                for ( ucColumn = 0; ucColumn < macWIDTH_CH_CHAR; ucColumn ++ )
                {                       
                        if ( usTemp & ( 0x01 << 23 ) )                                  
                        {
                               
                          *(__IO uint16_t*)(CurrentFrameBuffer + (3*Xaddress) + xpos) = (0x00FFFF & CurrentTextColor);        //GB
        *(__IO uint8_t*)(CurrentFrameBuffer + (3*Xaddress) + xpos+2) = (0xFF0000 & CurrentTextColor) >> 16; //R

                        }                               
                        else       
                        {
                               
                                *(__IO uint16_t*)(CurrentFrameBuffer + (3*Xaddress) + xpos) = (0x00FFFF & CurrentBackColor);        //GB
        *(__IO uint8_t*)(CurrentFrameBuffer + (3*Xaddress) + xpos+2) = (0xFF0000 & CurrentBackColor) >> 16; //R

                        }       
                               
                        Xaddress++;                       
                        usTemp <<= 1;
                       
                }
               
                Xaddress += (LCD_PIXEL_WIDTH - macWIDTH_CH_CHAR);
我知道24×24的点阵式72个点,但是48×48有288个点,应该怎么扫描呢?
另外我知道您那个任意字体的显示,但是那个显示48×48会显得有些粗糙,所以我想直接使用48×48的点阵,请大神帮忙指点一下,非常感谢
回复

使用道具 举报

发表于 2016-4-7 16:09:56 | 显示全部楼层
macHEIGHT_CH_CHAR
macWIDTH_CH_CHAR

改这两个宏,改字库文件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-8 10:52:36 | 显示全部楼层
flyleaf 发表于 2016-4-7 16:09
macHEIGHT_CH_CHAR
macWIDTH_CH_CHAR

按照您说的我都已经改为48了,但是还是不对,请问一下生成48×48字体是这样设置吗?

设置格式

设置格式
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-8 10:54:01 | 显示全部楼层
flyleaf 发表于 2016-4-7 16:09
macHEIGHT_CH_CHAR
macWIDTH_CH_CHAR

我也试了将图中的字模选项中的每行显示改为48,还是不对啊!
回复 支持 反对

使用道具 举报

发表于 2016-4-8 11:06:45 | 显示全部楼层
houqingzhi123 发表于 2016-4-8 10:54
我也试了将图中的字模选项中的每行显示改为48,还是不对啊!

生成的字库已经烧录到FLASH了?

你可以先用教程里的串口模拟显示字符函数测试,修改出一个能正常可用的函数,然后再改液晶显示函数、改字模文件、烧录到flash 1.png 2.png


回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-8 14:38:15 | 显示全部楼层
flyleaf 发表于 2016-4-8 11:06
生成的字库已经烧录到FLASH了?

你可以先用教程里的串口模拟显示字符函数测试,修改出一个能正常可用 ...

你好,我使用你们介绍的串口生成的不对呢,另外就是你们的百度网盘的资料怎么都没有了呢,在哪里可以下到?
回复 支持 反对

使用道具 举报

发表于 2016-4-8 14:40:47 | 显示全部楼层
houqingzhi123 发表于 2016-4-8 14:38
你好,我使用你们介绍的串口生成的不对呢,另外就是你们的百度网盘的资料怎么都没有了呢,在哪里可以下到 ...

例子里的字模大小与你的不一样,要改
F4光盘资料:
http://pan.baidu.com/s/1qYlAqgk
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-8 14:43:02 | 显示全部楼层
flyleaf 发表于 2016-4-8 14:40
例子里的字模大小与你的不一样,要改
F4光盘资料:
http://pan.baidu.com/s/1qYlAqgk

问题是我使用的是你的例程,就是pdf里面的,16×16的,我没有改动,直接抄过来的,显示不对啊
回复 支持 反对

使用道具 举报

发表于 2016-4-8 14:49:00 | 显示全部楼层
houqingzhi123 发表于 2016-4-8 14:43
问题是我使用的是你的例程,就是pdf里面的,16×16的,我没有改动,直接抄过来的,显示不对啊

<LTDC—液晶显示汉字(字库在外部FLASH)>那个例程,在main文件本身就包含这个Printf_Charater函数,测试没有问题,可以接上串口看看看。估计是你抄pdf代码抄错了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-8 16:38:25 | 显示全部楼层
flyleaf 发表于 2016-4-8 14:49
那个例程,在main文件本身就包含这个Printf_Charater函数,测试没有问题,可以接上串口看看看。估计是你 ...

是串口软件的问题,这个已经解决,我可以使用串口助手正常显示汉字了,但是我根据LTDC-显示汉字(字库在外部FLASH)的程序中更改,使用48×48的字库,在液晶屏上只显示一部分汉字,不知道为什么,麻烦您帮忙看一下,下面是我更改的程序和液晶显示的现象,我要显示的汉字为        for ( ucPage = 0; ucPage < macHEIGHT_CH_CHAR; ucPage ++ )
        {

                usTemp = ucBuffer [ ucPage * 6 ];
                usTemp = ( usTemp << 8 );
                usTemp |= ucBuffer [ ucPage * 6 + 1];
                usTemp = ( usTemp << 8 );
                usTemp |= ucBuffer [ ucPage * 6 + 2];
                usTemp = ( usTemp << 8 );
                usTemp |= ucBuffer [ ucPage * 6 + 3];
                usTemp = ( usTemp << 8 );
                usTemp |= ucBuffer [ ucPage * 6 + 4];
                usTemp = ( usTemp << 8 );
                usTemp |= ucBuffer [ ucPage * 6 + 5];//此处更改为6个字节,将usTemp更改为uint_64,即64位
                //以下没有改动
                for ( ucColumn = 0; ucColumn < macWIDTH_CH_CHAR; ucColumn ++ )
                {                       
                        if ( usTemp & ( 0x01 << 23 ) )                                  
                        {
                       
                          *(__IO uint16_t*)(CurrentFrameBuffer + (3*Xaddress) + xpos) = (0x00FFFF & CurrentTextColor);        //GB
        *(__IO uint8_t*)(CurrentFrameBuffer + (3*Xaddress) + xpos+2) = (0xFF0000 & CurrentTextColor) >>32; //R

                        }                               
                        else       
                        {
                               
                                *(__IO uint16_t*)(CurrentFrameBuffer + (3*Xaddress) + xpos) = (0x00FFFF & CurrentBackColor);        //GB
        *(__IO uint8_t*)(CurrentFrameBuffer + (3*Xaddress) + xpos+2) = (0xFF0000 & CurrentBackColor) >>32; //R

                        }       
                               
                        Xaddress++;                       
                        usTemp <<=1;//不明白此处什么用
                       
                }


显示一部分汉字

显示一部分汉字
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-8 16:39:10 | 显示全部楼层
houqingzhi123 发表于 2016-4-8 16:38
是串口软件的问题,这个已经解决,我可以使用串口助手正常显示汉字了,但是我根据LTDC-显示汉字(字库在 ...

我已经确定汉字字库没有问题
回复 支持 反对

使用道具 举报

发表于 2016-4-8 16:47:56 | 显示全部楼层
if ( usTemp & ( 0x01 << 23 ) )
改成 47 试试

这个表示判断该位是否空白,23的话应该是只对应24*24的字模
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-11 10:17:42 | 显示全部楼层

我整明白了,47不行,其实是64位不支持,我改成两个32位就可以了
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 03:17 , Processed in 0.055699 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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