667|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
点赞 关注
 

回复
举报

7177

帖子

2

TA的资源

版主

沙发
 

什么型号的屏幕?

此帖出自GD32 MCU论坛
 
 
 

回复

1078

帖子

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/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表