如何使用PCtoLCD2002取模(汉字、ASCII字符集)?

很多是用我们用到LCD显示的时候都会用到LCD取模软件,但是对于这个软件的具体使用方法,我相信大家都会使用,但是有一些细节点还不是很清楚,可能只是跟着人家怎么取模,自己也怎么取模。这篇文章将详细讲解这个取模软件的使用,并通过串口模拟LCD显示的原理,将字模打印出来。
实验平台STM32F103+Keil5

下载地址:PCto2002工具

一、使用串口模拟LCD显示原理打印字模

首先,我们需要使用PCtoLCD,进行汉字取模
在这里插入图片描述
在这里插入图片描述
然后,我们想通过串口打印出我们取到的字模。

实现这一步我们需要:
1、配置好串口。
2、将取到的字模使用数组存储起来。
3、编写字模解析函数void Print_char_16X16(void)。

其中字模解析函数原理,根据取到汉字的方法为1616的字模。我们需要遍历1616个像素点,如果像素点为1,我们通过“ * ”号显示,否则显示为空格。通过定义两个变量row、column,表示我们要用到的行和列。先通过for循环显示16行像素点。然后将每一行(16像素点)分为两个字节(1B = 8bit)。这样就可以遍历到一个字符的每个像素点。

费话不多少,上代码

//16*16
//16*16
uint8_t charer[] = 
{
	0x08,0x20,0x04,0x40,0x7F,0xFC,0x01,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,
	0xFF,0xFE,0x01,0x00,0x01,0x00,0x7F,0xFC,0x02,0x80,0x04,0x40,0x18,0x30,0xE0,0x0E/*"美",0*/	
};



//16*16字模
void Print_char_16X16(void)
{
	uint16_t row,column;//定义行和列
	uint8_t ch = 0;
	 //1、16行字符
	for(row = 0; row <16 ; row++)
	{
		for(column = 0; column <8 ;column++)		//每行中第一个字节(每字节8bit)
		{
			ch = (charer[row*2+0]<<column);			//第一个字节对应字符
			if((ch & 0x80) == 0)					//如果相与为0 则打印空格表示无效数据 ,否则打印 * 表示有效数据
			{
				printf(" ");
			}else{
				printf("*");
			}
		}
		
		for(column = 0; column <8 ;column++)
		{
			ch = (charer[row*2+1]<<column);			//第二个字节对应字符
			if((ch & 0x80) == 0)					//如果相与为1 则打印*表示有效数据 ,否则打印空格 表示无效数据
			{
				printf(" ");
			}else{
				printf("*");
			}
			
		}
		printf("\r\n");							   //一行数据处理完成,换行
	}	
}
int main(void)
{	
  /*初始化USART 配置模式为 115200 8-N-1,中断接收*/
  USART_Config();
	
	printf("通过串口打印LCD取模显示原理\r\n");
	printf("\r\n");
	Print_char_16X16();
  	while(1)
	{	
		
	}	
}

实验效果:
在这里插入图片描述
家伙事都准备好了,接下来准备上才艺。
在这里插入图片描述

二、点阵格式(阴码与阳码)

在这里插入图片描述
点击界面选项(箭头1),会弹出第二界面的相关信息,我们找到点阵格式(箭头2)。
阴码、阳码:指字模点阵中有笔迹像素位的状态是“1”还是“0”。比如上面显示的美,使用的阴码取法,此时我们使用阳码取法,看看效果怎么样

//16*16
uint8_t charer[] = 
{

#if 0  //阴码
0x08,0x20,0x04,0x40,0x7F,0xFC,0x01,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,
0xFF,0xFE,0x01,0x00,0x01,0x00,0x7F,0xFC,0x02,0x80,0x04,0x40,0x18,0x30,0xE0,0x0E/*"美",0*/
#endif
//阳码
0xF7,0xDF,0xFB,0xBF,0x80,0x03,0xFE,0xFF,0xFE,0xFF,0xC0,0x07,0xFE,0xFF,0xFE,0xFF,
0x00,0x01,0xFE,0xFF,0xFE,0xFF,0x80,0x03,0xFD,0x7F,0xFB,0xBF,0xE7,0xCF,0x1F,0xF1/*"美",0*/
	
};

在这里插入图片描述在这里插入图片描述
是不是太美了,难以直视。我们可以看到,有汉字笔迹的地方为空(我们想显示的),根据选择的阴码、阳码不同,所取的字模像素位状态也不同。

三、取模方式

在这里插入图片描述
取模方式:指字模图形的扫描方向,对此部分进行修改后,会在右侧取模演示中,有相应的动画演示。动画显示其实很详细,把它的原理体现的淋漓尽致。
为了体验取模方式到底如何,我们其他参数不变(“美”,“16*16“,”阴码“,“顺向”),分别取不同的取模方式,然后通过串口打印出来,看看效果如何。
在这里插入图片描述在这里插入图片描述
这四种方式的“美”,我简称天涯四美。
其实上面的工程是串口以逐行式进行编写的。对于逐列,行列式、列行式显示是不正常的。需要重新编写对应的解析函数。如果使用LCD的话,可以通过设置液晶LCD的参数去设置对应的扫描方向显示。

四、取模走向

在这里插入图片描述
逆向:低位在前,如果是逐行式取模方式,是一行一行的以最低位开始,向最高位进行扫描(可对应取模软件的动画显示理解)
顺向:高位在前。
对于本工程的串口打印函数。如果使用逆向,即低位在前,需要将解析函数中修改为 字符数组右移,对0x01相与。

	for(row = 0; row <16 ; row++)
	{
		for(column = 0; column <8 ;column++)	     //每行中第一个字节(每字节8bit)
		{
			ch = (charer[row*2+0]>>column);			//第一个字节对应字符,没处理完一位,需要右移处理下一位
			if((ch & 0x01) == 0)					//逆向,低位在前,所以与0x01 (0000 0001)相与						/
			{
				printf(" ");
			}else{
				printf("*");
			}
			
		}
		
		for(column = 0; column <8 ;column++)
		{
			ch = (charer[row*2+1]>>column);			//第二个字节对应字符
			if((ch & 0x01) == 0)					//逆向,低位在前,所以与0x01 (0000 0001)相与						
			{
				printf(" ");
			}else{
				printf("*");
			}
			
		}
		printf("\r\n");								//一行数据处理完成,换行
	}

五、字模大小设置

我们要设置88、1616、2424的字模大小时,需要设置三个地方,如下图:
在这里插入图片描述
比如我们设置16
16字体大小。对应箭头1、2、3处就要设置为16

六、自定义格式输出

在这里插入图片描述
我们可以根据自己想要的格式,对字模输出部分进行自定义。
1、段前缀、段后缀。
我们设置段前缀:a。段后缀:b。
显示如下:

a
0x10,0x04,0x20,0x02,0xFE,0x3F,0x80,0x00,0x80,0x00,0xFC,0x1F,0x80,0x00,0x80,0x00
0xFF,0x7F,0x80,0x00,0x80,0x00,0xFE,0x3F,0x40,0x01,0x20,0x02,0x18,0x0C,0x07,0x70/*"美",0*/
b

2、注释前缀、注释后缀
我们设置 注释前缀:/*" 注释后缀 ",

a
0x10,0x04,0x20,0x02,0xFE,0x3F,0x80,0x00,0x80,0x00,0xFC,0x1F,0x80,0x00,0x80,0x00
0xFF,0x7F,0x80,0x00,0x80,0x00,0xFE,0x3F,0x40,0x01,0x20,0x02,0x18,0x0C,0x07,0x70 c美d0*/
b

这部分我们一般不更改,默认注释前缀:/*" 注释后缀 ",

3、数据前缀、数据后缀
如果我们需要输出十六进制数,假如为0xFF。则数据前缀:0x (修饰数据格式) 数据后缀:,(将每一个数据隔开)

4、行前缀、行后缀、行尾缀
我们设置行前缀:eee 行后缀:fff 行尾缀:ggg 便于观察

a
eee0x10,0x04,0x20,0x02,0xFE,0x3F,0x80,0x00,0x80,0x00,0xFC,0x1F,0x80,0x00,0x80,0x00fff
eee0xFF,0x7F,0x80,0x00,0x80,0x00,0xFE,0x3F,0x40,0x01,0x20,0x02,0x18,0x0C,0x07,0x70fff/*" 美 ",0ggg
b

我们一般将行前缀设置为空,行后缀设置为空,行尾缀设置为*/

//-------------------------------------------------未完待续:2020.05.17----------------------------------------------------

续:
2021.01.06
今天做了一个stm8驱动IIC OLED0.96的小物件,需要用到字符集,上面介绍的是汉字取模,并没有提到生成ASCII字符点阵集。看了原子哥的oled,只有字符集,没有取模过程(我也想白嫖,想直接知道方法,然后生成就完事了,找了文档教程,木得,又找了视频,原子哥居然说涉及版权,不多做介绍,淦,小丑竟是我)只能默默自己再回忆一下怎么使用PCtoLCD2002,然后生成字符集。在这里插入图片描述
首先我想生成这样的:在这里插入图片描述

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

记住,!之前是空格)。这些都是常用的ASCII字符。

方法一:在字符输入处,输入要生成的字符集
不要超过100个字符:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
生成一致。

方法二:通过txt文档,导入生成字模(可超过100个字符限制)
1、在txt文档中输入要生成的字符集
在这里插入图片描述
2、导入TXT文档。

在这里插入图片描述
在这里插入图片描述
//-------------------------------------------------未完待续:2021.01.06----------------------------------------------------

  • 72
    点赞
  • 292
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
5月1日凌晨发布第一测试版 功能介绍: 1.生成中英文数字混合的字符串的字模数据. 2.可选择字体,大小,并且可独立调整文字的长和宽,生成任意形状的字符。 3.各种旋转,翻转文字功能 4.任意调整输出点阵大小,并任意调整字符在点阵中的位置。 5.字模数据输出可自定义各种格式,系统预设了C语言和汇编语言两种格式,并且可自己 定义出新的数据输出格式;每行输出数据个数可调。 6.支持四种取模方式:逐行(就是横向逐行取点),逐列(纵向逐列取点),行列(先 横向取第一行的8个点作为第一个字节,然后纵向取第二行的8个点作为第二个字节……), 列行(先纵向取第一列的前8个点作为第一个字节,然后横向取第二列的前8个点作为第二个 字节……) 7.支持阴码(亮点为1),阳码(亮点为0)取模 8.支持纵向(第一位为低位)(,倒向第一位为高位)取模 9.输出数制可选16进制或10进制 10.可生成索引文件,用于在生成的大量字库中可快速检索到需要的汉字 11.动态液晶面板彷真,可调节彷真面板象素点大小和颜色 12.图形模式下可任意用鼠标作画,左键画图,右键擦图。 12.旋转,翻转,平移等字符模式下的功能也可用与对BMP图象的处理 版本为pctolcd1.94 5月1日晚上发布第二测试版 更新如下: 1.增加锁定点阵大小功能,例如可锁定24X24点阵大小,然后调节独立调节字点阵的大小 2.增加热键功能,可用光标配合Ctrl,Shift对文字大小和位置修改 3.增加精简输出格式选项 4.把文字输入框换成了文字输入组合框,这样就可以保存历史纪录。 5.输出数据会自动清除以前的数据 6.可隐藏自定义格式,简化操作 7.一些小的BUG修正。 版本为pctolcd2.03 5月3日凌晨发布第三测试版 更新如下: 1.增加了一些小东西,例如演示动画一类的,我懒的一一写了 2.改掉一些可恶的小BUG,例如点阵输入框的自动完成。 3.增加大量文字处理和导入TXT文本文件功能,并且可以去除文本中的空白和重复字符, 可以对文本进行排序,适合于生成小字库。我这里测试是3万多字的TXT文件在2分钟内转成16X16点阵的字库文件。 版本号为pctolcd2.53 由于本软件侧重于对字符的处理,所以在图象方面功能较弱,请见晾。 5月8日发布正式版 正式版已经开始朝着液晶字库生成软件的方向进化了,我在后来的更新中把主要精力也放 在这部分,由于我目前还没有发现有同类的软件具备这个功能,也无法得到任何的参考,只能 自己摸索前进,所以如果还有不方便的地方请大家多提意见. 具体更新如下: 1.重写大部分的内核代码以配合汉字库生成的功能,目前这个内核已经进行了反复的测试, 相信稳定性和速度较前一版本有了巨大的提高. 2.去掉那个比较愚蠢的热键区了,因为用处不大 3.增加汉字库生成功能,这是最重要的改进之处,下文将详细介绍. 4.修正许多小BUG,使软件更加成熟些. 5月12日发布完美版 这次发布的PCtoLCD2002完美版与前一版本相比没有增加太多的功能,因为我觉得现有的这些功能已经足够用于生成各种字模的需要了,所以完美版的主要工作是反复测试,精心去除各种BUG,以及调节一些细微之处,目的当然就是追求完美!不过世上不会有真正完美的东西,这个软件也不例外,而且这个软件从头至尾全部是我一个人编写完成,精力有限,难免会顾此失彼,如果大家发现了这个版本中存在的BUG,请及时告诉我。 更新说明: 1。界面采用新的字体,不会再有那种难看的黑色粗体字,比以前的要漂亮多了。 2。加入全面的提示帮助,尽量减少普通用户的各种疑惑。 3。修正生成文件的扩展名的一些BUG,不会总是加上FON的扩展名了。 4。修正生成字模数据的一些格式BUG,现在生成的C51格式字模数据基本上可以直接粘贴到源程序中使用而不需要修改了 5。加入新的字模数据格式调整项,允许用户更自由的定制自己需要的数据格式 6。最重要的更新:全面支持保存当前设置功能,用户设置的字模格式,主窗口状态和字库生成窗口选项信息均可保存,下一次打开窗口时不用重新设置。 7。修正了新建图象时会自动跳到图形模式的BUG 8。增加输出紧凑格式数据选项,可以生成不包含空白行的字模数据。 9。完善了每行数据显示个数的功能,可以任意设置每行显示的数据个数,并同时可以设置每行索引数据显示个数。 10。修正了取模说明的一些错误,并改动了格式。 11。现在当用户选择10进制输出时,会自动去掉生成字模数据前的“0x",或后面的“H”,选择16进制时则会自动加上。 12。对各个窗体重新设计以全面适应最大化的需要,如果您觉得当前窗口不够大,可以最大化使用。 13。增加生成英文点阵字库功能,可自动生成ASCII码从0-127的任意点阵字库,使用方法同生成国标点阵字库功能。 14。再次优化代码,去掉各种调试信息,使程序速度再快一些。 15。还有许多细微的调整我记不清了…… 需要注意的地方: 在测试的过程中我发现了一个问题:在WIN98或WINME下当用户直接生成特大点阵的字模时(例如320*320,1024*768的汉字字模),此时由于数据量非常庞大,而WIN98/WINME会有64K的数据容量限制,所以在主窗口中是无法得到全部的字模数据的,这时您需要使用字库生成功能,通过形成一个数据文件才能得到完整的字模数据。 我认为到现在这个软件功能已经很完善了,但可能使用上有点不方便,如果你有什么不明白 的地方,可以发帖子或发MAIL询问

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Terry.Z_1009

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值