适用于少量显示;
以下是代码,下面会简要的说明如何显示任意字符,包括但不限于汉字、英文、数字;
/* 显示索引占一个字节的字符* 参数:【x,y】起始坐标;【cn】要显示的数据的起始地址;【len】数据个数*/
void LCD_ShowFont(u16 x, u16 y, u8 *cn, u8 len)
{u8 j, wordNum, a;u16 color,i;u16 x0=x; u16 y0=y; for(a = 0; a<len; a++){for (wordNum=0; wordNum<12; wordNum++){ //wordNum扫描字库的字数if ((CnChar16x33[wordNum].Index[0]==*cn))
// &&(CnChar32x29[wordNum].Index[1]==*(cn+1))){for(i=0; i<66; i++) { //MSK的位数color=CnChar16x33[wordNum].Msk[i];for(j=0;j<8;j++) {if((color&0x80)==0x80){LCD_DrawFRONT_COLOR(x,y,FRONT_COLOR);} else{LCD_DrawFRONT_COLOR(x,y,BACK_COLOR);} color<<=1;x++;if((x-x0)==16){x=x0;y++;if((y-y0)==33){y=y0;}}}//for(j=0;j<8;j++)结束} } } //for (wordNum=0; wordNum<12; wordNum++)结束 cn += 1;x += 16;x0=x;}
}
这里主要用索引所占的字节来区分汉字,中文输入占两个字节,英文输入占一个字节(大概);
随要显示的字符不同,修改以下数据:
其中wordNum是点阵数据集的字数;【第11行】
i是点阵数据数组Msk的下标,大小 = 字符宽 * 字符高 / 8 也就是单个字符点阵数据所占字节数【第16行】,要注意这个变量的大小,这里为16位,最大也就65536,如果单个字符的点阵数据超过这个值,就得修改成32位的;
x-x0 字符宽度【第31行】;
y-y0 字符高度【第35行】;
【第45行】每个字符的间隔;
取模软件可在参考资料中获得;
字符取模方式:C51格式,横向取模
例如取得的数据如下:
/*-- 文字: 0 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1F,0xF8,
0x3E,0x78,0x3C,0x3C,0x78,0x3C,0x78,0x1E,0x78,0x1E,0x78,0x1E,0xF8,0x1E,0xF0,0x1E,
0xF0,0x1E,0xF0,0x1E,0xF0,0x1E,0xF8,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x3C,0x3C,0x3C,
0x3E,0x7C,0x1F,0xF8,0x0F,0xF0,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,
需手动在头部添加索引,如下:
/*-- 文字: 0 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"0",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1F,0xF8,
0x3E,0x78,0x3C,0x3C,0x78,0x3C,0x78,0x1E,0x78,0x1E,0x78,0x1E,0xF8,0x1E,0xF0,0x1E,
0xF0,0x1E,0xF0,0x1E,0xF0,0x1E,0xF8,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x3C,0x3C,0x3C,
0x3E,0x7C,0x1F,0xF8,0x0F,0xF0,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,
完整的点阵数据集,例如:
// ------------------ 字模的数据结构定义 ------------------------ //
struct Cn16CharTypeDef // 字模数据结构
{unsigned char Index[1]; // 字符内码索引,一个字符占一个字节【汉字内码索引,一个汉字占两个字节】unsigned char Msk[66]; // 点阵码数据(16*33/8)
};struct Cn16CharTypeDef const CnChar16x33[]=
{
/*-- 文字: 0 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"0",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1F,0xF8,
0x3E,0x78,0x3C,0x3C,0x78,0x3C,0x78,0x1E,0x78,0x1E,0x78,0x1E,0xF8,0x1E,0xF0,0x1E,
0xF0,0x1E,0xF0,0x1E,0xF0,0x1E,0xF8,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x3C,0x3C,0x3C,
0x3E,0x7C,0x1F,0xF8,0x0F,0xF0,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: 1 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"1",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x03,0xC0,
0x07,0xC0,0x0F,0xC0,0x3F,0xC0,0x3F,0xC0,0x3B,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,
0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,
0x03,0xC0,0x03,0xC0,0x03,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: 2 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"2",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x1F,0xF0,0x3F,0xF8,
0x3E,0x7C,0x78,0x3C,0x78,0x3E,0x70,0x3E,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x78,
0x00,0xF8,0x00,0xF0,0x01,0xE0,0x03,0xC0,0x07,0xC0,0x0F,0x80,0x1F,0x00,0x3E,0x00,
0x3C,0x00,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: 3 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"3",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1F,0xF8,
0x3E,0x7C,0x7C,0x3C,0x78,0x3E,0x78,0x1E,0x00,0x3C,0x00,0x3C,0x00,0xF8,0x03,0xF0,
0x03,0xF8,0x00,0xFC,0x00,0x3C,0x00,0x3E,0x00,0x1E,0x70,0x1E,0x78,0x1E,0x78,0x3E,
0x7E,0x7C,0x3F,0xF8,0x1F,0xF0,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: 4 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"4",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x78,0x00,0x78,
0x00,0xF8,0x01,0xF8,0x03,0xF8,0x03,0xF8,0x07,0xF8,0x0F,0xF8,0x0F,0x78,0x1E,0x78,
0x3C,0x78,0x3C,0x78,0x78,0x78,0xF0,0x78,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x78,
0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: 5 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"5",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x3F,0xFC,
0x3F,0xFC,0x3C,0x00,0x3C,0x00,0x38,0x00,0x78,0x00,0x7F,0xF0,0x7F,0xF8,0x7F,0xFC,
0xF8,0x3C,0x00,0x3E,0x00,0x1E,0x00,0x1E,0x00,0x1E,0x70,0x1E,0xF0,0x3E,0xF0,0x3C,
0x78,0xFC,0x7F,0xF8,0x3F,0xF0,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: 6 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"6",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xF0,0x01,0xE0,
0x03,0xE0,0x03,0xC0,0x07,0x80,0x0F,0x80,0x0F,0x00,0x1F,0xE0,0x3F,0xF8,0x3F,0xFC,
0x7E,0x3E,0x78,0x1E,0x78,0x0F,0x78,0x0F,0xF8,0x0F,0x78,0x0F,0x78,0x1F,0x78,0x1E,
0x7E,0x3E,0x3F,0xFC,0x1F,0xF8,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: 7 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"7",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0x7F,0xFF,
0x7F,0xFE,0x00,0x1E,0x00,0x3C,0x00,0x3C,0x00,0x78,0x00,0x78,0x00,0xF0,0x00,0xF0,
0x01,0xE0,0x01,0xE0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x07,0x80,0x07,0x80,0x07,0x80,
0x0F,0x00,0x0F,0x00,0x0F,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: 8 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"8",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x1F,0xF0,0x3F,0xF8,
0x3C,0x7C,0x78,0x3C,0x78,0x3C,0x78,0x3C,0x78,0x3C,0x78,0x3C,0x3F,0xF8,0x1F,0xF0,
0x3F,0xF8,0x7F,0xFC,0x78,0x3E,0xF8,0x1E,0xF0,0x1E,0xF0,0x1E,0xF0,0x1E,0xF8,0x3E,
0x7C,0x7C,0x7F,0xFC,0x3F,0xF8,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: 9 --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"9",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x1F,0xF0,0x3F,0xF8,
0x7F,0xFC,0x78,0x3C,0xF8,0x3E,0xF0,0x1E,0xF0,0x1E,0xF0,0x3E,0xF0,0x3E,0xF8,0x3C,
0x7C,0xFC,0x7F,0xF8,0x3F,0xF8,0x07,0xF0,0x01,0xF0,0x01,0xE0,0x03,0xC0,0x03,0xC0,
0x07,0x80,0x0F,0x80,0x0F,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: : --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
":",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x07,0xC0,
0x07,0xC0,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0x80,0x07,0xC0,0x07,0xC0,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,/*-- 文字: / --*/
/*-- 楷体24; 此字体下对应的点阵为:宽x高=16x33 --*/
"/",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x0F,0x00,0x0E,0x00,0x1C,
0x00,0x1C,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0x70,0x00,0xE0,0x01,0xE0,0x01,0xC0,
0x03,0x80,0x03,0x80,0x07,0x00,0x07,0x00,0x0E,0x00,0x1E,0x00,0x1C,0x00,0x3C,0x00,
0x38,0x00,0x70,0x00,0x70,0x00,0xE0,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,
};
显示汉字同理,只需修改点阵数据结构体中的索引占两个字节,并将函数 LCD_ShowFont() 中的第14行取消注释即可;
函数中的 LCD_DrawFRONT_COLOR() 函数就是在指定坐标画指定颜色的点,需修改成所使用的对应函数。
参考资料:
普中STM32F407开发板相关资料
本文发布于:2024-02-01 06:22:58,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170673978034521.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |