打开/关闭菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

【教程】中英文显示取模设置:修订间差异

来自LCD wiki
Lin留言 | 贡献
Lin留言 | 贡献
第158行: 第158行:
       unsigned char Index[2]; //存放汉字GBK码
       unsigned char Index[2]; //存放汉字GBK码
       char Msk[288]; //存放汉字取模数据
       char Msk[288]; //存放汉字取模数据
}typFNT_GB48;
}typFNT_GB48; //结构体名称可以自己定义
}}
}}



2020年3月11日 (三) 11:43的版本

语言选择

Languages

➤中文
➤EN



取模软件配置

测试示例所用的字体取模软件为PCtoLCD2002,关于它的详细使用说明见如下文档:

PCtoLCD2002使用说明

PCtoLCD2002软件具体设置如下:

  • 字体和尺寸选择
模式需要选择字符模式
字体可以根据需求选择,比如选择宋体
字宽和字高可以根据需求选择,中英文常用的字体尺寸如下:
中文(字宽x字高):16x16、24x24、32x32、48x48
英文(字库x字高):6x8、6x12、8x16、12x24、16x32、24x48(对应的字体尺寸需要分别设置为12x8、12x12、16x16、24x24、32x32、48x48)
修改点阵大小可以根据需求设置,一般设置为0
  • 字模选项设置
中文和英文字模选项设置有多种情况,不同的设置,代码处理方法不一样。这里就选取下面的设置为例,后续的函数代码都是基于此设置编写。
点阵格式选择阴码
取模方式选择逐行式
取模走向选择顺向(高位在前)
输出数制选择十六进制数
自定义格式选择C51格式

底层支撑函数

  • LCD_SetWindows
该函数实现因驱动IC而异(不同的驱动IC设置坐标值命令和原理有差异),但是原理基本一样,都是设置起始坐标和结束坐标,设置一块显示区域
举例如下(ILI9341为例)
void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd)
{	
	LCD_WR_REG(lcddev.setxcmd);	
	LCD_WR_DATA(xStar>>8);
	LCD_WR_DATA(0x00FF&xStar);		
	LCD_WR_DATA(xEnd>>8);
	LCD_WR_DATA(0x00FF&xEnd);

	LCD_WR_REG(lcddev.setycmd);	
	LCD_WR_DATA(yStar>>8);
	LCD_WR_DATA(0x00FF&yStar);		
	LCD_WR_DATA(yEnd>>8);
	LCD_WR_DATA(0x00FF&yEnd);

	LCD_WriteRAM_Prepare();	//开始写入GRAM		
}
  • Lcd_WriteData_16Bit
该函数就是往GRAM里面设置像素颜色值,然后显示出来
举例如下(ILI9341为例)
void Lcd_WriteData_16Bit(u16 Data)
{	
      LCD_CS_CLR;
      LCD_RS_SET;  
      SPI_WriteByte(SPI2,Data>>8);
      SPI_WriteByte(SPI2,Data);
      LCD_CS_SET;
}
  • LCD_DrawPoint
其实就是利用LCD_SetWindows函数和Lcd_WriteData_16Bit函数显示一个像素点
举例如下(ILI9341为例)
void LCD_DrawPoint(u16 x,u16 y)
{
	LCD_SetCursor(x,y);//设置光标位置 
	Lcd_WriteData_16Bit(POINT_COLOR); 
}

英文字符取模

1、因为在程序里是按照ASCII码偏移量搜索需要显示的英文字符的,所以需要将整套ASCII字符都取模。
2、如果不需要使用某个字符,可以将该字符的取模数据设置为{0},如以下例子所示(以6x8尺寸字符为例)
const unsigned char asc2_0806[95][8]={
   ...  //此例子省略,实际应用需要添加
{0},/*"2",18*/ 不使用数字2
{0x00,0x00,0x78,0xB0,0x08,0x88,0x70,0x00},/*"3",19*/
{0x00,0x00,0x30,0x50,0x90,0x78,0x10,0x00},/*"4",20*/
{0},/*"5",21*/ 不使用数字5
{0x00,0x00,0x70,0x80,0xF8,0x88,0x70,0x00},/*"6",22*/
{0},/*"7",23*/ 不使用数字7
{0x00,0x00,0xF8,0x88,0x70,0x88,0x78,0x00},/*"8",24*/
{0},/*"9",25*/ 不使用数字9
   ...  //此例子省略,实际应用需要添加

}
3、ASCII码字符如下所示(最前面的空格也要包含):
ASCII字符: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
4、英文取模说明的数据字体都为Default
  • 各尺寸英文字体取模说明

中文汉字取模

1、显示汉字时,是通过查询需要显示汉字的GBK码来获取取模数据的;
2、汉字取模成功后,通过一个结构体数组来保存汉字GBK码和取模数据的对应关系;
3、结构体定义如下:
//16x16中文字体结构体定义
typedef struct 
{
       unsigned char Index[2];	//存放汉字GBK码
       char Msk[32]; //存放汉字取模数据
}typFNT_GB16;  //结构体名称可以自己定义

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//24x24中文字体结构体定义
typedef struct 
{
       unsigned char Index[2];	//存放汉字GBK码
       char Msk[72]; //存放汉字取模数据
}typFNT_GB24;  //结构体名称可以自己定义

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//32x32中文字体结构体定义
typedef struct 
{
       unsigned char Index[2];	//存放汉字GBK码
       char Msk[128]; //存放汉字取模数据
}typFNT_GB32;  //结构体名称可以自己定义

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//48x48中文字体结构体定义
typedef struct 
{
       unsigned char Index[2];	//存放汉字GBK码
       char Msk[288]; //存放汉字取模数据
}typFNT_GB48; //结构体名称可以自己定义
  • 各尺寸汉字取模说明

BACK TO TOP