816|4

24

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

GD32嵌入式解惑 [复制链接]

求助大佬,为什么加入的代码显示12、16的字体正常,但是显示24和32的字体时候,显示不全,只显示一半,这问题出在那一部分,求大佬解惑

代码如下:参照网上的改写的,加入24和32,字符只能显示出一半来,24和32字库完整。

  • //字符显示
  • void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t size,uint8_t mode)
  • {
  • char temp,t1,t;
  • uint16_t y0=y;
  • uint16_t colortemp=POINT_COLOR;
  • num=num-' ';
  • if(!mode)
  • {
  • for(t=0;t<size;t++)
  • {
  • if(size==12)
  • {
  • temp=asc2_1206[num][t];
  • }
  • else if(size==16)
  • {
  • temp=asc2_1608[num][t];
  • }
  • else if(size==24)
  • {
  • temp=asc2_2412[num][t]; //调用2412字体
  • }
  • else if(size==32)
  • {
  • temp=asc2_3216[num][t];
  • }
  • // else return; //没有的字库
  • for(t1=0;t1<8;t1++)
  • {
  • if(temp&0x80)
  • {
  • POINT_COLOR=colortemp;
  • }
  • else
  • {
  • POINT_COLOR=BACK_COLOR;
  • }
  • LCD_DrawPoint(x,y);
  • temp<<=1;
  • y++;
  • if(y>=lcddev.height)
  • {
  • POINT_COLOR=colortemp; return;
  • }
  • if((y-y0)==size)
  • {
  • y=y0;
  • x++;
  • if(x>=lcddev.width)
  • {
  • POINT_COLOR=colortemp; return;
  • }
  • break;
  • }
  • }
  • }
  • }
  • else
  • {
  • for(t=0;t<size;t++)
  • {
  • if(size==12)
  • {
  • temp=asc2_1206[num][t];
  • }
  • else if(size==16)
  • {
  • temp=asc2_1608[num][t];
  • }
  • else if(size==24)
  • {
  • temp=asc2_2412[num][t]; //调用2412字体
  • }
  • else if(size==32)
  • {
  • temp=asc2_3216[num][t];
  • }
  • for(t1=0;t1<8;t1++)
  • {
  • if(temp&0x80)
  • {
  • LCD_DrawPoint(x,y);
  • }
  • temp<<=1;
  • y++;
  • if(y>=lcddev.height)
  • {
  • POINT_COLOR=colortemp; return;
  • }
  • if((y-y0)==size)
  • {
  • y=y0;
  • x++;
  • if(x>=lcddev.width)
  • {
  • POINT_COLOR=colortemp; return;
  • }
  • break;
  • }
  • }
  • }
  • }
  • POINT_COLOR=colortemp;
  • }

 

此帖出自GD32 MCU论坛

最新回复

1206和1608点阵字体横向只有6点和8点,一个字节就可以覆盖,因此t1只要循环8次就能完整显示。而2412和3216点阵字体横向分别有12点和16点,需要的2个字节才能覆盖,你的程序只循环了前8个点,剩余的点阵并未写到屏幕上,当然只有左半个字了。   详情 回复 发表于 2024-6-8 09:51
点赞 关注
 

回复
举报

7541

帖子

2

TA的资源

版主

沙发
 

什么型号的屏幕?

此帖出自GD32 MCU论坛
 
 
 

回复

1088

帖子

0

TA的资源

纯净的硅(高级)

板凳
 

我也遇到了,是Y方向的起点不对,调整以下初始化中Y的起始初值。同样的驱动芯片有的LCD不同,我2.5元淘了一个就发现这个问题。

此帖出自GD32 MCU论坛
 
个人签名چوآن شـين
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

4
 

1206和1608点阵字体横向只有6点和8点,一个字节就可以覆盖,因此t1只要循环8次就能完整显示。而2412和3216点阵字体横向分别有12点和16点,需要的2个字节才能覆盖,你的程序只循环了前8个点,剩余的点阵并未写到屏幕上,当然只有左半个字了。

此帖出自GD32 MCU论坛

点评

感谢大佬  详情 回复 发表于 2024-6-12 08:25
 
 
 

回复

24

帖子

0

TA的资源

一粒金砂(中级)

5
 
hujj 发表于 2024-6-8 09:51 1206和1608点阵字体横向只有6点和8点,一个字节就可以覆盖,因此t1只要循环8次就能完整显示。而2412和3216 ...

感谢大佬

此帖出自GD32 MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表