显示函数
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode, u16 color)
{
u16 temp,t1,t;
u16 y0=y;
u16 csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数
num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)
for(t=0;t<csize;t++)
{
switch(size) //不同的字体在添加字库后可以直接在这里添加case语句
{
case 12: temp = asc2_1608[num][t]; break; //调用1206字体
case 16: temp = asc2_1608[num][t]; break; //调用1608字体
case 24: temp = asc2_2412[num][t]; break; //调用2412字体
case 36: temp = asc2_3618[num][t]; break; //调用3618字体
case 48: temp = asc2_4824[num][t]; break; //调用4824字体
case 60: temp = asc2_6030[num][t]; break; //调用6030字体
default: return; //没有的字库
}
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_Fast_DrawPoint(x,y,color);
else if(mode==0)LCD_Fast_DrawPoint(x,y,color);
temp<<=1;
y++;
if(y>=lcddev.height)return; //超区域了
if((y-y0)==size)
{
y=y0;
x++;
if(x>=lcddev.width)return; //超区域了
break;
}
}
}
}
void LCD_Show_Font(u16 x,u16 y,u16 size, u8 mode, u8 index, u16 color)
{//需要自己生产汉字字库
u16 t;
u8 temp,t1;
u16 y0=y;
u8 *dzk;
u16 csize = 0;
switch(size)
{
case 24:csize = 72; break; //一个24*24的汉字72字节
case 36:csize = 180; break; //一个36*36的汉字168字节
case 48:csize = 288; break; //一个48*48的汉字288字节
case 60:csize = 480; break; //一个60*60的汉字480字节
case 72:csize = 648; break; //一个72*72的汉字648字节
default : return; //不是合适的size就返回不显示
}
dzk=(u8*)LCD_HZK_TBL[index]; //得到汉字编号对应的点阵库
for(t=0;t<csize;t++)
{
temp=dzk[t]; //得到点阵数据
for(t1=0;t1<8;t1++) //按照从高位到低位的顺序画点
{
if(temp&0x80)LCD_Fast_DrawPoint(x,y,color);
else if(0 == mode)LCD_Fast_DrawPoint(x,y,color);
temp<<=1;
y++;
if((y-y0)==size) //对y坐标的处理,当y坐标距起始坐标差24个像素点,x坐标加1
{
y=y0;
x++;
break;
}
}
}
}
void LCD_Show_string_Font(u16 x, u16 y, u8 mode, u8 ch_index_arr[], u8 len, u16 color)
{ //按照LCD_ShowChar()的方法可以改成适合任何字库
u16 temp = 0,t = 0,t1 = 0;
u16 y0=y;
u8 *dzk;
u16 csize=180; //一个36*36的汉字180字节
u8 i;
for(i = 0; i < len; i++)
{
dzk=(u8*)LCD_HZK_TBL[ch_index_arr[i]]; //得到汉字编号对应的点阵库
for(t=0;t<csize;t++)
{
temp=dzk[t]; //得到点阵数据
for(t1=0;t1<8;t1++) //按照从高位到低位的顺序画点
{
if(temp&0x80)LCD_Fast_DrawPoint(x,y,color);
else if(0 == mode)LCD_Fast_DrawPoint(x,y,color);
temp<<=1;
y++;
if((y-y0)== 36) //对y坐标的处理,当y坐标距起始坐标差36个像素点,x坐标加1
{
y=y0;
x++;
break;
}
}
}
}
}
版权声明:本文为qq_43577471原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。