我的LCD驱动芯片是SSD1289,这个不重要,关键现在看原子的写一个字符的程序有点不懂,请大虾指点:
程序如下:
void LCD_DrawPoint(u16 x,u16 y)
{
LCD_SetCursor(x,y);//设置光标位置
LCD_WR_REG(0x22);//开始写入GRAM
LCD_WR_DATA(POINT_COLOR);
}
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{
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 POINT_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;
}
void LCD_ShowString(u16 x,u16 y,const u8 *p)
{
while(*p!='\0')
{
if(x>MAX_CHAR_POSX)
{
x=0;
y+=16;
}
if(y>MAX_CHAR_POSY)
{
y=x=0;
LCD_Clear(WHITE);
}
LCD_ShowChar(x,y,*p,16,0);
x+=8;
p++;
}
} |