我今天在用原子的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进行判别才对,而且不管是叠加还是非叠加都应该是一样的,以上疑问,麻烦原子帮我看下,谢啦。
|