OpenEdv-开源电子网

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

STM32F407开发板显示汉字的困惑

[复制链接]

49

主题

148

帖子

0

精华

高级会员

Rank: 4

积分
683
金钱
683
注册时间
2017-11-23
在线时间
133 小时
发表于 2022-3-28 16:19:03 | 显示全部楼层 |阅读模式
1金钱
     各位大神,有哪位大神能指导下LCD如何显示24x24和32x32汉字,感谢!!  说明下;
     开发板主控芯片是STM32F407ZGT6,LCD屏是2.8寸16BIT
     我最近在用原子大神的STM32F407开发板做LCD显示汉字的应用学习,参考了好几个网友的汉字显示示例,发现汉字取模及显示有多种形式,
     有用汉字库的,这种库里的字比较多,但占用内存也大,这种方法适合于土豪级的板子应用。
     还有自定义库的,这个根据个人需要用到的字,来写对应的字模到字库里,相对来说比较灵活,占用空间也合适。
    在LCD显示汉字应用时,看到有的朋友是按字库里,存字的顺序来读字,显示字的,
给个字库起始地址,然后连续读取多少个字显示。
这种方式在显示的一串字的顺序,正好和字库里的字储存的顺序一致时,读取,显示是非常好的,
但往往这种几率比较少,大多时候显示的需求是,从字库里找出几个字,组合,然后成为一个词语来显示的,
这样,同样的字库,通过多种字的组合,就可以显示多个词语了,个人感觉这个方法还是比较好!!
后面附件里的程序,就是按这种方法来显示汉字的,
附件里的方法只示例了16x16的汉字显示,我试着显示24x24汉字和32x32汉字,想着应该跟16x16汉字显示是一样的啊,
按照16x16汉字显示的方法,我增加上了24x24和32x32汉字的显示代码,但却没用显示出来汉字来,



变换取模方式好几种,也没用,依然显示不出来。
不知是我取模设置不对,还是程序读取字模不对,后附源程序。
恳请有知道的大神指导指导!!
万分感谢!!!


我的程序调用如下
11.png
12.png
13.png
14.png
我的汉字取模及取模设置如下
15.png
16.png
17.png
这是16x16的汉字显示程序,这个完美显示,
以下的24x24,和32x32程序段是我根据16x16的程序增添的,
对应的字库也是我增添的,
18.png
19.png
20.png
21.png
22.png
这是最终显示的效果
24x24和32x32的汉字没用显示出来,
23.jpg
源程序如下
LCD-CS24.rar (8.39 MB, 下载次数: 11)

最佳答案

查看完整内容[请看2#楼]

//显示一个指定大小的汉字 //x,y :汉字的坐标 //font:汉字GBK码 //size:字体大小 void TFT_Show_Font(u16 x,u16 y,u8 *font,u8 size) { u8 temp,t,t1; u16 y0=y; //u8 dzk[32*32/8]; u8 *dzk=mymalloc(SRAMIN,32*32/8); u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数 if(size!=12&&size!=16&&size!=24&&size!=32)ret ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2022-3-28 16:19:04 | 显示全部楼层
本帖最后由 nashui_sx 于 2022-3-28 20:41 编辑

//显示一个指定大小的汉字
//x,y :汉字的坐标
//font:汉字GBK码
//size:字体大小
void TFT_Show_Font(u16 x,u16 y,u8 *font,u8 size)
{
        u8 temp,t,t1;
        u16 y0=y;
        //u8 dzk[32*32/8];  
        u8 *dzk=mymalloc(SRAMIN,32*32/8);
        u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数         
        if(size!=12&&size!=16&&size!=24&&size!=32)return;        //不支持的size
        Get_HzMat(font,dzk,size);        //得到相应大小的点阵数据
        for(t=0;t<csize;t++)
        {                                                                                                      
                temp=dzk[t];                        //得到点阵数据                          
                for(t1=0;t1<8;t1++)
                {
                        if(temp&0x80)TFT_DrawPoint_Color(x,y,BRUSH_COLOR);
                        else TFT_DrawPoint_Color(x,y,BACK_COLOR);
                        temp<<=1;
                        y++;
                        if((y-y0)==size)
                        {
                                y=y0;
                                x++;
                                break;
                        }
                }           
        }
  myfree(SRAMIN,dzk);  
}



单独取模:阴码+逐列式+顺向
想办法把字的数组弄到dzk里面就行 如下  支持最大32  因为数组定义的u8 dzk[32*32/8]


//显示一个指定大小的汉字
//x,y :汉字的坐标
//font:汉字GBK码
//size:字体大小
void TFT_Show_Font(u16 x,u16 y,u8 *font,u8 size)
{
        u8 temp,t,t1;
        u16 y0=y;
        //u8 dzk[32*32/8];  
        //u8 *dzk=mymalloc(SRAMIN,32*32/8);
        u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数         
        if(size!=12&&size!=16&&size!=24&&size!=32)return;        //不支持的size
        //Get_HzMat(font,dzk,size);        //得到相应大小的点阵数据
u8 dzk[]={0x02,0x00,0x42,0x00,0x33,0xFE,0x00,0x04,0x00,0x08,0x22,0x00,0x2A,0xFF,0x2A,0xA8,0x2A,0xA8,0xFE,0xA8,0x2A,0xAA,0x2A,0xA9,0x2A,0xFE,0x22,0x00,0x02,0x00,0x00,0x00};
        for(t=0;t<csize;t++)
        {                                                                                                      
                temp=dzk[t];                        //得到点阵数据                          
                for(t1=0;t1<8;t1++)
                {
                        if(temp&0x80)TFT_DrawPoint_Color(x,y,BRUSH_COLOR);
                        else TFT_DrawPoint_Color(x,y,BACK_COLOR);
                        temp<<=1;
                        y++;
                        if((y-y0)==size)
                        {
                                y=y0;
                                x++;
                                break;
                        }
                }           
        }
  myfree(SRAMIN,dzk);  
}

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-3-29 01:23:49 | 显示全部楼层
仿真找下问题就知道了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

49

主题

148

帖子

0

精华

高级会员

Rank: 4

积分
683
金钱
683
注册时间
2017-11-23
在线时间
133 小时
 楼主| 发表于 2022-3-29 15:24:02 | 显示全部楼层
感谢nashui_sx大神的示例指导,按大神的指导,确实显示成功了,再检查自己的问题,应该是我取模有问题所致,
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2022-3-29 21:56:26 | 显示全部楼层
温柔的郎 发表于 2022-3-29 15:24
感谢nashui_sx大神的示例指导,按大神的指导,确实显示成功了,再检查自己的问题,应该是我取模有问题所致 ...

客气了,看你头像像极客工坊的一个版主,就给你发了个例子
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 00:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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