字體中12*6等代表的意義
根據選擇的字體1206或1608,它們表示字符是12個像素高或16個像素高(對應第一個for),字符的寬度是6或8(對應嵌套的for),通過for來遍歷像素定義中的每一個數字0或1,1的時候顯示該像素點,0的時候不顯示,這樣就能夠顯示出文字了。
疊加方式就是不管原來的底色是什么,當像素為1的時候就顯示該點,為0的時候什么也不做。
非疊加方式就是為1的時候顯示該點,為0的時候顯示底色。
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 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;
}
字符字節計算
每個32*32的漢字點陣 有128個字節 (高32個像素點*寬32個像素點,每一個像素點是一位,32*32=32*4*8=128*8位=128字節)
u8 csize=(size/8+((size%8)?1:0))*(size);//得到字體一個字符對應點陣集所占的字節數