OpenEdv-开源电子网

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

有关程序源码库函数版本中的汉字显示程序源码中的bug

[复制链接]

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
发表于 2016-4-25 11:56:54 | 显示全部楼层 |阅读模式
10金钱
本人用的是STM32MINI开发板,现在在做汉字显示,在学习正点原子提供的程序源码过程中时,看到一个函数void Show_Str(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size,u8 mode)
该函数的功能是实现汉字的显示,并具有自动换行功能,但是在实际测试过程中,运行该函数并不具有自动换行的功能,我想请大家帮我看看这个函数有什么问题
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;     //字符或者中文                                                                                              
    while(*str!=0)//数据未结束
    {
        if(!bHz)
        {
                if(*str>0x80)
                        bHz=1;//中文
                else              
                        {      
                                if(x>(x0+width-size/2))//换行
                                        {                                  
                                                y+=size;
                                                x=x0;          
                                        }                                                            
                                if(y>(y0+height-size))
                                        break;//越界返回      
                                if(*str==13)//换行符号
                                        {         
                                                y+=size;
                                                x=x0;
                                                str++;
                                        }  
                                else
                                        LCD_ShowChar(x,y,*str,size,mode);//有效部分写入
                                str++;
                                x+=size/2; //字符,为全字的一半
                        }
        }
        else//中文
                {     
                        bHz=0;//有汉字库   
                        if(x>(x0+width-size))//换行
                                {            
                                        y+=size;
                                        x=x0;                  
                                }
                        if(y>(y0+height-size))
                                        break;//越界返回                                                       
                        Show_Font(x,y,str,size,mode); //显示这个汉字,空心显示
                        str+=2;
                        x+=size;//下一个汉字偏移            
                }                                                 
     }   
}                                            

最佳答案

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

需要设置行数才能实现换行
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
 楼主| 发表于 2016-4-25 11:56:55 | 显示全部楼层
需要设置行数才能实现换行
回复

使用道具 举报

354

主题

1475

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8091
金钱
8091
注册时间
2015-10-15
在线时间
2917 小时
发表于 2016-4-25 12:04:14 | 显示全部楼层
您是怎么调用的?入口参数看看
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
 楼主| 发表于 2016-4-25 12:41:10 | 显示全部楼层
        Show_Str(60,70,200,16,"字库开发程序开发程序开发程序",16,0);       
回复

使用道具 举报

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
 楼主| 发表于 2016-4-25 12:42:09 | 显示全部楼层
本帖最后由 一条汪 于 2016-4-25 12:45 编辑

然后就超了。。。是width设置的有问题吗?width最大不是为240么?(2.8寸电阻屏竖向显示)
回复

使用道具 举报

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
 楼主| 发表于 2016-4-25 12:51:43 | 显示全部楼层
还有您看看那个函数一开始 bHz=0,结果代进去之后发现第一次运行程序相当于只给bHz=1,之后再运行函数,我想为什么不能直接给bHz初始化的时候就赋值为1呢?
回复

使用道具 举报

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
 楼主| 发表于 2016-4-25 13:12:30 | 显示全部楼层
本帖最后由 一条汪 于 2016-4-25 13:15 编辑

还有标志换行的那句:x>(x0+width-size)是什么意思?完全搞不明白啊,x不是在一开始该函数初始化的时候就令x=x0了么?size的取值只有3种,要么是12要么是16要么是24呗,width不就是汉字显示的宽度么?我定义的是200,例程的也是这个值,那怎么可能实现x>(x0+width-size)?
回复

使用道具 举报

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
 楼主| 发表于 2016-4-25 13:23:07 | 显示全部楼层
还有一个问题,就是我在例程里“”号里写的东西在单片机里是以一个字符串来储存的吗?,那这个字符串如果直接通过蓝牙透传出去,接收到的那端调用相同的函数是不是可以显示汉字呢?(前提是字库什么的都存在并且相同)
回复

使用道具 举报

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
 楼主| 发表于 2016-4-25 14:46:18 | 显示全部楼层
@openedvadmin 小白求解
回复

使用道具 举报

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
 楼主| 发表于 2016-4-25 14:48:21 | 显示全部楼层
@正点原子 小白求解
回复

使用道具 举报

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
 楼主| 发表于 2016-4-25 16:40:39 | 显示全部楼层
顶一下
回复

使用道具 举报

15

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-18
在线时间
18 小时
 楼主| 发表于 2016-5-5 13:22:30 | 显示全部楼层
问题解决了,这是由于我没有设置字体高度
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 07:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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