OpenEdv-开源电子网

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

精英板lcd显示如何自动换行?

[复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-7-3
在线时间
10 小时
发表于 2018-4-18 19:09:23 | 显示全部楼层 |阅读模式
2金钱
        Show_Str(30,50,200,16,"Font Update Failed!Font Update Failed!Font Update Failed!Font Update Failed!",16,0);                               
主函数是初始化是这样的,但是超出的部分不能换行。
而text.c里面的Show_Str是写了换行的,无效吗?有没有大佬做过
void Show_Str(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size,u8 mode)
{                                       
        u16 x0=x;
        u16 y0=y;                                                                    
    u8 bHz=0;     //×Ö·û»òÕßÖDÎÄ                                                                                              
    while(*str!=0)//êy¾YÎ′½áêø
    {
        if(!bHz)
        {
                if(*str>0x80)bHz=1;//ÖDÎÄ
                else              //×Ö·û
                {      
                if(x>(x0+width-size/2))//»»DD
                                {                       
                                       
                                        y+=size;
                                        x=x0;         
                        LED0=0;                                       
                                }                                                            
                        if(y>(y0+height-size))break;//Ô½½ç·μ»Ø      
                        if(*str==13)//»»DD·ûoÅ
                        {         
                            y+=size;
                                        x=x0;
                            str++;
                        }  
                        else LCD_ShowChar(x,y,*str,size,mode);//óDD§2¿·ÖD′èë
                                str++;
                        x+=size/2; //×Ö·û,Îaè«×ÖμÄò»°ë
                }
        }else//ÖDÎÄ
        {     
            bHz=0;//óDoo×Ö¿a   
            if(x>(x0+width-size))//»»DD
                        {            
                                y+=size;
                                x=x0;                  
                                //LED0=0;
                        }
                if(y>(y0+height-size))break;//Ô½½ç·μ»Ø                                                       
                Show_Font(x,y,str,size,mode); //ÏÔê¾Õa¸öoo×Ö,¿ÕDÄÏÔê¾
                str+=2;
                x+=size;//ÏÂò»¸öoo×ÖÆ«òÆ            
        }                                                 
    }   
}                                            

最佳答案

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

仿真找下问题,你就知道了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-4-18 19:09:24 | 显示全部楼层
仿真找下问题,你就知道了。
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-7-3
在线时间
10 小时
 楼主| 发表于 2018-4-20 23:45:20 | 显示全部楼层
解决了
void Show_Str(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size,u8 mode)
{                                       
        u16 x0=x;
        u16 y0=y;                       
        u16        length;
    u8 bHz=0;     //字符或者中文                                                                                              
    while(*str!=0)//数据未结束
    {
        if(!bHz)
        {
                if(*str>0x80)bHz=1;//中文
                else              //字符
                {      
                                                 LCD_ShowChar(x,y,*str,size,mode);//有效部分写入
                                                        str++;
                                                                length++ ;       
                        x+=size/2; //字符,为全字的一半
                                        if(x>lcddev.width | length>25)//换行  //因为占满行是26个字节
                                {                                  
                                        y+=size;
                                        x=x0;          
                                        length=0;
                                }       
                }
        }else//中文
        {     
            bHz=0;//有汉字库                                         
                LCD_ShowChinese(x,y,str,size,mode); //显示这个汉字,空心显示
                str+=2;
                                        length+=2 ;          //汉字加两个字节
                x+=size;//下一个汉字偏移            
                                if(x>lcddev.width| length>24)//换行  由于汉字是两个字节,判断条件为24
                        {                                  
                                        y+=size;
                                        x=x0;          
                                length=0;                                       
                                }       
        }                                                 
    }   
}         
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 00:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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