OpenEdv-开源电子网

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

关于原子例程里面“LCD_ShowChar”的疑问

[复制链接]

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2014-4-15
在线时间
6 小时
发表于 2014-5-18 17:09:25 | 显示全部楼层 |阅读模式
5金钱
我今天在用原子的ALIENTEK战舰 标准例程调试的时候,发现一个问题,想请教下原子,是不是原来的例程有问题,还是我理解错了,是关于LCD. c里面的LCD_ShowChar()程序,以下是例程里面的:
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{    
    u8 temp,t1,t;
u16 y0=y;
u16 colortemp=POINT_COLOR;           
//设置窗口   
num=num-' ';//得到偏移后的值
if(!mode) //非叠加方式
{
   for(t=0;t<size;t++)
   {   
if(size==12)temp=asc2_1206[num][t];  //调用1206字体
else temp=asc2_1608[num][t]; //调用1608字体                          
       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(x>=lcddev.width){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];  //调用1206字体
else temp=asc2_1608[num][t]; //调用1608字体                          
       for(t1=0;t1<8;t1++)
{    
       if(temp&0x80)LCD_DrawPoint(x,y); 
temp<<=1;
y++;
if(x>=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;        
}   
对里面的这句话有疑问:
y++;
if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了
照理说,在叠加和不叠加里面,这句话应该是一样的处理才对,为什么
在非叠加里面是x>=lcddev.width,而在叠加里面是x>=lcddev.height,而且在这之前,都没有对x有操作,为什么要对它进行判别,所以结合我的理解,我认为应该改成如下才是对的:
y++;
if(y>=lcddev.height){POINT_COLOR=colortemp;return;}//超区域了
也就是应该是对上面刚刚赋值的y进行判别才对,而且不管是叠加还是非叠加都应该是一样的,以上疑问,麻烦原子帮我看下,谢啦。

最佳答案

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

是个bug,第一个应该改为:if(y>=lcddev.height){POINT_COLOR=colortemp;return;}//超区域了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-18 17:09:26 | 显示全部楼层
是个bug,第一个应该改为:if(y>=lcddev.height){POINT_COLOR=colortemp;return;}//超区域了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-9-15
在线时间
0 小时
发表于 2014-5-23 21:47:50 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
迷你版的和战舰版的这里不一样吗,为什么那些超区域的代码我都没看到、
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{  
#if USE_HORIZONTAL==1
#define MAX_CHAR_POSX 312
#define MAX_CHAR_POSY 232 
#else     
#define MAX_CHAR_POSX 232
#define MAX_CHAR_POSY 312
#endif 
    u8 temp;
    u8 pos,t;
u16 x0=x;
u16 colortemp=POINT_COLOR;      
    if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;     
//设置窗口    
num=num-' ';//得到偏移后的值
if(!mode) //非叠加方式
{
for(pos=0;pos<size;pos++)
{
if(size==12)temp=asc2_1206[num][pos];//调用1206字体
else temp=asc2_1608[num][pos];  //调用1608字体
for(t=0;t<size/2;t++)
    {                 
        if(temp&0x01)POINT_COLOR=colortemp;
else OINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp>>=1; 
x++;
    }
x=x0;
y++;
}
}else//叠加方式
{
for(pos=0;pos<size;pos++)
{
if(size==12)temp=asc2_1206[num][pos];//调用1206字体
else temp=asc2_1608[num][pos];  //调用1608字体
for(t=0;t<size/2;t++)
    {                 
        if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//画一个点     
        temp>>=1; 
    }
}
}
POINT_COLOR=colortemp;              
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-23 22:45:49 | 显示全部楼层
回复【3楼】Fisher:
---------------------------------
代码不定期更新的,所以,不知道你看的是不是最新代码.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-9-15
在线时间
0 小时
发表于 2014-5-24 11:46:10 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
压缩文件显示13年4月的,应该不是最新的吧,是不是可以提供一份文档专门是每个时间都更新的所有内容,这样也知道需要更新哪一部分文件
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-24 23:12:49 | 显示全部楼层
回复【5楼】Fisher:
---------------------------------
恩,这个建议不错.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-7 21:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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