更多操作
无编辑摘要 |
无编辑摘要 |
||
(未显示2个用户的77个中间版本) | |||
第1行: | 第1行: | ||
== | {{lan | ||
| | |||
cn=http://www.lcdwiki.com/zh/%E3%80%90%E6%95%99%E7%A8%8B%E3%80%91%E4%B8%AD%E8%8B%B1%E6%96%87%E6%98%BE%E7%A4%BA%E5%8F%96%E6%A8%A1%E8%AE%BE%E7%BD%AE | |||
| | |||
en=http://www.lcdwiki.com/Chinese_and_English_display_modulo_settings | |||
}} | |||
== <font color="blue">取模软件配置</font> == | |||
测试示例所用的字体取模软件为PCtoLCD2002,关于它的详细使用说明见如下文档: | |||
[http://www.lcdwiki.com/res/PublicFile/PCtoLCD2002_Use_Illustration_CN.pdf '''PCtoLCD2002使用说明'''] | |||
PCtoLCD2002软件具体设置如下: | |||
*'''字体和尺寸选择''' | |||
:[[File:MSP130W-002.jpg|750px]] | |||
:模式需要选择'''字符模式''' | |||
:字体可以根据需求选择,比如选择'''宋体''' | |||
:字宽和字高可以根据需求选择,中英文常用的字体尺寸如下: | |||
:中文(字宽x字高):'''16x16、24x24、32x32、48x48''' | |||
:英文(字库x字高):'''6x8、6x12、8x16、12x24、16x32、24x48('''对应的字体尺寸需要分别设置为'''12x8、12x12、16x16、24x24、32x32、48x48)''' | |||
:修改点阵大小可以根据需求设置,一般设置为'''0''' | |||
*'''字模选项设置''' | |||
:中文和英文字模选项设置有多种情况,不同的设置,代码处理方法不一样。这里就选取下面的设置为例,后续的函数代码都是基于此设置编写。 | |||
:[[File:MSP130W-001.jpg|750px]] | |||
:点阵格式选择'''阴码''' | |||
:取模方式选择'''逐行式''' | |||
:取模走向选择'''顺向(高位在前)''' | |||
:输出数制选择'''十六进制数''' | |||
:自定义格式选择'''C51格式''' | |||
== <font color="blue">底层支撑函数</font> == | |||
*'''LCD_SetWindows''' | |||
:该函数实现因驱动IC而异(不同的驱动IC设置坐标值命令和原理有差异),但是原理基本一样,都是设置起始坐标和结束坐标,设置一块显示区域 | |||
:举例如下(ILI9341为例) | |||
{{code|1= | {{code|1= | ||
void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd) | void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd) | ||
第48行: | 第56行: | ||
LCD_WriteRAM_Prepare(); //开始写入GRAM | LCD_WriteRAM_Prepare(); //开始写入GRAM | ||
} | <nowiki>}</nowiki> | ||
}} | }} | ||
''' | *'''Lcd_WriteData_16Bit''' | ||
:该函数就是往GRAM里面设置像素颜色值,然后显示出来 | |||
:举例如下(ILI9341为例) | |||
{{code|1= | {{code|1= | ||
void Lcd_WriteData_16Bit(u16 Data) | void Lcd_WriteData_16Bit(u16 Data) | ||
第65行: | 第72行: | ||
SPI_WriteByte(SPI2,Data); | SPI_WriteByte(SPI2,Data); | ||
LCD_CS_SET; | LCD_CS_SET; | ||
} | <nowiki>}</nowiki> | ||
}} | }} | ||
''' | *'''LCD_DrawPoint''' | ||
:其实就是利用LCD_SetWindows函数和Lcd_WriteData_16Bit函数显示一个像素点 | |||
:举例如下(ILI9341为例) | |||
{{code|1= | {{code|1= | ||
void LCD_DrawPoint(u16 x,u16 y) | void LCD_DrawPoint(u16 x,u16 y) | ||
第78行: | 第84行: | ||
LCD_SetCursor(x,y);//设置光标位置 | LCD_SetCursor(x,y);//设置光标位置 | ||
Lcd_WriteData_16Bit(POINT_COLOR); | Lcd_WriteData_16Bit(POINT_COLOR); | ||
} | <nowiki>}</nowiki> | ||
}} | }} | ||
== | == <font color="blue">英文字符取模</font> == | ||
*'''[[#英文字符取模|重要说明]]''' | |||
:1、因为在程序里是按照ASCII码偏移量搜索需要显示的英文字符的,所以需要将整套ASCII字符都取模。 | |||
:2、'''如果不需要使用某个字符,可以将该字符的取模数据设置为{0}''',如以下例子所示(以6x8尺寸字符为例) | |||
{{code|1= | {{code|1= | ||
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 | |||
... //此例子省略,实际应用需要添加 | |||
<nowiki>}</nowiki> | |||
} | |||
}} | }} | ||
:3、ASCII码字符如下所示(最前面的空格也要包含): | |||
::ASCII字符: '''!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~''' | |||
:4、英文取模说明的数据字体都为'''Default''' | |||
*'''各尺寸英文字体取模说明''' | |||
:*[http://www.lcdwiki.com/zh/6x8_English_font_modulo_description '''6x8英文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/6x12_English_font_modulo_description '''6x12英文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/8x16_English_font_modulo_description '''8x16英文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/12x24_English_font_modulo_description '''12x24英文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/16x32_English_font_modulo_description '''16x32英文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/24x48_English_font_modulo_description '''24x48英文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/32x64_English_font_modulo_description '''32x64英文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/48x96_English_font_modulo_description '''48x96英文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/64x128_English_font_modulo_description '''64x128英文字体取模说明'''] | |||
== | == <font color="blue">中文汉字取模</font> == | ||
''' | |||
*'''[[#中文汉字取模|重要说明]]''' | |||
:1、显示汉字时,是通过查询需要显示汉字的GBK码来获取取模数据的; | |||
:2、汉字取模成功后,通过一个结构体数组来保存汉字GBK码和取模数据的对应关系; | |||
:3、结构体定义如下: | |||
{{code|1= | {{code|1= | ||
//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; //结构体名称可以自己定义 | |||
}} | }} | ||
*'''各尺寸汉字取模说明''' | |||
:*[http://www.lcdwiki.com/zh/16x16_Chinese_font_modulo_description '''16x16中文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/24x24_Chinese_font_modulo_description '''24x24中文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/32x32_Chinese_font_modulo_description '''32x32中文字体取模说明'''] | |||
:*[http://www.lcdwiki.com/zh/48x48_Chinese_font_modulo_description '''48x48中文字体取模说明'''] | |||
== 数字变量显示 == | |||
[[#top|BACK TO TOP]] | [[#top|BACK TO TOP]] |
2023年6月12日 (一) 11:53的最新版本
取模软件配置
测试示例所用的字体取模软件为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; //结构体名称可以自己定义
- 各尺寸汉字取模说明