最近在做LCD的编程,基本的函数都会调用,可是我分析了好久,不理解temp>>=1; 起什么作用,每一次循环temp的值不是要被重新赋值的嘛,这里面为什么要右移一位呢??、
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 x_size,u8 y_size,u16 color,u8 mode)
{
#define MAX_CHAR_POSX 800
#define MAX_CHAR_POSY 480
u8 temp,x_loop,all_loop;
u16 pos; u8 t,i;
u16 colortemp=POINT_COLOR; //将原来的颜色保存
POINT_COLOR=color; //画笔颜色赋值
x_loop=x_size/8; //横向循环的次数
all_loop=x_loop*y_size;//计算一共需要循环多少次
if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;
num=num-' ';//得到偏移后的值
if(mode==1)//叠加方式
{
for(pos=0;pos<all_loop;)
{
for(i=0;i<x_loop;i++)
{
temp=asc2_3216[num][pos];
for(t=0;t<8;t++)
{
if(temp&0x01)
LCD_DrawPoint(x+t+8*i,y+pos/x_loop);//画一个点
temp>>=1;
}
pos++;
}
}
}
if(mode==0)//非叠加方式 填充方式
{
for(pos=0;pos<all_loop;)
{
for(i=0;i<x_loop;i++)
{
temp=asc2_3216[num][pos];
for(t=0;t<8;t++)
{
if(temp&0x01)POINT_COLOR=color;
else POINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x+t+8*i,y+pos/x_loop);//画一个点
temp>>=1;
}
pos++;
}
}
}
  OINT_COLOR=colortemp;
}
|