STM32+LCD任意字符显示

阅读: 评论:0

STM32+LCD任意字符显示

STM32+LCD任意字符显示

适用于少量显示;

以下是代码,下面会简要的说明如何显示任意字符,包括但不限于汉字、英文、数字;

/* 显示索引占一个字节的字符* 参数:【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小时内删除。

标签:字符   LCD
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23