<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=LCD_%E5%8F%96%E6%A8%A1</id>
	<title>LCD 取模 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=LCD_%E5%8F%96%E6%A8%A1"/>
	<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=LCD_%E5%8F%96%E6%A8%A1&amp;action=history"/>
	<updated>2026-06-04T22:52:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.2</generator>
	<entry>
		<id>https://w.electrodragon.com/w/index.php?title=LCD_%E5%8F%96%E6%A8%A1&amp;diff=24842&amp;oldid=prev</id>
		<title>Chao at 12:46, 3 February 2020</title>
		<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=LCD_%E5%8F%96%E6%A8%A1&amp;diff=24842&amp;oldid=prev"/>
		<updated>2020-02-03T12:46:52Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{lan&lt;br /&gt;
     |&lt;br /&gt;
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&lt;br /&gt;
     |&lt;br /&gt;
en=http://www.lcdwiki.com/Chinese_and_English_display_modulo_settings&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;取模软件配置&amp;lt;/font&amp;gt; ==&lt;br /&gt;
测试示例所用的字体取模软件为PCtoLCD2002，关于它的详细使用说明见如下文档：&lt;br /&gt;
&lt;br /&gt;
[https://www.electrodragon.com/w/File:PCtoLCD2002_Use_Illustration_CN.pdf '''PCtoLCD2002使用说明''']&lt;br /&gt;
&lt;br /&gt;
PCtoLCD2002软件具体设置如下：&lt;br /&gt;
&lt;br /&gt;
*'''字体和尺寸选择'''&lt;br /&gt;
&lt;br /&gt;
:[[File:MSP130W-002.jpg|750px]]&lt;br /&gt;
:模式需要选择'''字符模式'''&lt;br /&gt;
:字体可以根据需求选择，比如选择'''宋体'''   &lt;br /&gt;
:字宽和字高可以根据需求选择，中英文常用的字体尺寸如下：&lt;br /&gt;
:中文（字宽x字高）：'''16x16、24x24、32x32'''&lt;br /&gt;
:英文（字库x字高）：'''6x8、6x12、8x16、12x24、16x32（'''对应的字体尺寸需要分别设置为'''12x8、12x12、16x16、24x24、32x32）'''&lt;br /&gt;
:修改点阵大小可以根据需求设置，一般设置为'''0'''&lt;br /&gt;
&lt;br /&gt;
*'''字模选项设置'''&lt;br /&gt;
&lt;br /&gt;
:字模选项设置有多种情况，不同的设置，代码处理方法不一样。这里就选取下面的设置为例，后续的函数代码都是基于此设置编写。&lt;br /&gt;
:[[File:MSP130W-001.jpg|750px]]&lt;br /&gt;
:点阵格式选择'''阴码'''&lt;br /&gt;
:取模方式选择'''逐行式'''&lt;br /&gt;
:取模走向选择'''顺向（高位在前）'''&lt;br /&gt;
:输出数制选择'''十六进制数'''&lt;br /&gt;
:自定义格式选择'''C51格式'''&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;底层支撑函数&amp;lt;/font&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
*'''LCD_SetWindows'''&lt;br /&gt;
&lt;br /&gt;
:该函数实现因驱动IC而异（不同的驱动IC设置坐标值命令和原理有差异），但是原理基本一样，都是设置起始坐标和结束坐标，设置一块显示区域&lt;br /&gt;
:举例如下（ILI9341为例）&lt;br /&gt;
{{code|1=&lt;br /&gt;
void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd)&lt;br /&gt;
{	&lt;br /&gt;
	LCD_WR_REG(lcddev.setxcmd);	&lt;br /&gt;
	LCD_WR_DATA(xStar&amp;gt;&amp;gt;8);&lt;br /&gt;
	LCD_WR_DATA(0x00FF&amp;amp;xStar);		&lt;br /&gt;
	LCD_WR_DATA(xEnd&amp;gt;&amp;gt;8);&lt;br /&gt;
	LCD_WR_DATA(0x00FF&amp;amp;xEnd);&lt;br /&gt;
&lt;br /&gt;
	LCD_WR_REG(lcddev.setycmd);	&lt;br /&gt;
	LCD_WR_DATA(yStar&amp;gt;&amp;gt;8);&lt;br /&gt;
	LCD_WR_DATA(0x00FF&amp;amp;yStar);		&lt;br /&gt;
	LCD_WR_DATA(yEnd&amp;gt;&amp;gt;8);&lt;br /&gt;
	LCD_WR_DATA(0x00FF&amp;amp;yEnd);&lt;br /&gt;
&lt;br /&gt;
	LCD_WriteRAM_Prepare();	//开始写入GRAM		&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
*'''Lcd_WriteData_16Bit'''&lt;br /&gt;
&lt;br /&gt;
:该函数就是往GRAM里面设置像素颜色值，然后显示出来&lt;br /&gt;
:举例如下（ILI9341为例）&lt;br /&gt;
{{code|1=&lt;br /&gt;
void Lcd_WriteData_16Bit(u16 Data)&lt;br /&gt;
{	&lt;br /&gt;
      LCD_CS_CLR;&lt;br /&gt;
      LCD_RS_SET;  &lt;br /&gt;
      SPI_WriteByte(SPI2,Data&amp;gt;&amp;gt;8);&lt;br /&gt;
      SPI_WriteByte(SPI2,Data);&lt;br /&gt;
      LCD_CS_SET;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
*'''LCD_DrawPoint'''&lt;br /&gt;
&lt;br /&gt;
:其实就是利用LCD_SetWindows函数和Lcd_WriteData_16Bit函数显示一个像素点&lt;br /&gt;
:举例如下（ILI9341为例）&lt;br /&gt;
{{code|1=&lt;br /&gt;
void LCD_DrawPoint(u16 x,u16 y)&lt;br /&gt;
{&lt;br /&gt;
	LCD_SetCursor(x,y);//设置光标位置 &lt;br /&gt;
	Lcd_WriteData_16Bit(POINT_COLOR); &lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;英文字符取模&amp;lt;/font&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
*'''[[重要说明]]'''&lt;br /&gt;
&lt;br /&gt;
:1、因为在程序里是按照ASCII码偏移量搜索需要显示的英文字符的，所以需要将整套ASCII字符都取模。&lt;br /&gt;
:2、'''如果不需要使用某个字符，可以将该字符的取模数据设置为{0}'''，如以下例子所示（以6x8尺寸字符为例）&lt;br /&gt;
{{code|1=&lt;br /&gt;
const unsigned char asc2_0806[95][8]={&lt;br /&gt;
   ...  //此例子省略，实际应用需要添加&lt;br /&gt;
{0},/*&amp;quot;2&amp;quot;,18*/ 不使用数字2&lt;br /&gt;
{0x00,0x00,0x78,0xB0,0x08,0x88,0x70,0x00},/*&amp;quot;3&amp;quot;,19*/&lt;br /&gt;
{0x00,0x00,0x30,0x50,0x90,0x78,0x10,0x00},/*&amp;quot;4&amp;quot;,20*/&lt;br /&gt;
{0},/*&amp;quot;5&amp;quot;,21*/ 不使用数字5&lt;br /&gt;
{0x00,0x00,0x70,0x80,0xF8,0x88,0x70,0x00},/*&amp;quot;6&amp;quot;,22*/&lt;br /&gt;
{0},/*&amp;quot;7&amp;quot;,23*/ 不使用数字7&lt;br /&gt;
{0x00,0x00,0xF8,0x88,0x70,0x88,0x78,0x00},/*&amp;quot;8&amp;quot;,24*/&lt;br /&gt;
{0},/*&amp;quot;9&amp;quot;,25*/ 不使用数字9&lt;br /&gt;
   ...  //此例子省略，实际应用需要添加&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:3、ASCII码字符如下所示（最前面的空格也要包含）：&lt;br /&gt;
::ASCII字符： '''!&amp;quot;#$%&amp;amp;'()*+,-./0123456789:;&amp;lt;=&amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'''&lt;br /&gt;
:4、以下取模数据字体都为'''Default'''&lt;br /&gt;
&lt;br /&gt;
*'''6x8英文字体取模说明'''&lt;br /&gt;
&lt;br /&gt;
:尺寸设置如下图所示：&lt;br /&gt;
:[[File:Module-001.jpg|750px]]&lt;br /&gt;
:取模数据如下（点击打开）：&lt;br /&gt;
::[https://www.electrodragon.com/w/File:6x8_ASCII_data.zip '''6x8英文ASCII取模数据''']&lt;br /&gt;
&lt;br /&gt;
:函数定义如下：&lt;br /&gt;
{{code|1=&lt;br /&gt;
static void LCD_Show_0806_char(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 mode)&lt;br /&gt;
{&lt;br /&gt;
    u8 temp;&lt;br /&gt;
    u8 pos,t;&lt;br /&gt;
    u16 colortemp=POINT_COLOR;      		   &lt;br /&gt;
    num=num-' ';//得到偏移后的值&lt;br /&gt;
    LCD_SetWindows(x,y,x+6-1,y+8-1);//设置单个文字显示窗口&lt;br /&gt;
    if(!mode) //非叠加方式：字体带有背景色，显示时会将原来显示的内容覆盖掉&lt;br /&gt;
    {		&lt;br /&gt;
        for(pos=0;pos&amp;lt;8;pos++)&lt;br /&gt;
	{&lt;br /&gt;
	    temp = asc2_0806[num][pos];//调用0806字体，需要自己取模定义&lt;br /&gt;
	    for(t=0;t&amp;lt;6;t++)&lt;br /&gt;
            {                 &lt;br /&gt;
	        if(temp&amp;amp;0x80)&lt;br /&gt;
	        {&lt;br /&gt;
		    Lcd_WriteData_16Bit(fc);&lt;br /&gt;
		}&lt;br /&gt;
		else &lt;br /&gt;
		{&lt;br /&gt;
		    Lcd_WriteData_16Bit(bc); &lt;br /&gt;
		}&lt;br /&gt;
		temp&amp;lt;&amp;lt;=1;&lt;br /&gt;
	    }&lt;br /&gt;
			&lt;br /&gt;
	}	&lt;br /&gt;
    }&lt;br /&gt;
    else//叠加方式：字体不带背景色，直接叠加显示到原来显示的内容上&lt;br /&gt;
    {&lt;br /&gt;
	for(pos=0;pos&amp;lt;8;pos++)&lt;br /&gt;
	{&lt;br /&gt;
	    temp = asc2_0806[num][pos];//调用0806字体，需要自己取模定义&lt;br /&gt;
	    for(t=0;t&amp;lt;6;t++)&lt;br /&gt;
            {   &lt;br /&gt;
		POINT_COLOR=fc;              &lt;br /&gt;
		if(temp&amp;amp;0x80)&lt;br /&gt;
		{&lt;br /&gt;
		    LCD_DrawPoint(x+t,y+pos);//画一个点    &lt;br /&gt;
		}&lt;br /&gt;
		temp&amp;lt;&amp;lt;=1;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    POINT_COLOR=colortemp;	&lt;br /&gt;
    LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏     	   &lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
*'''6x12英文字体取模说明'''&lt;br /&gt;
&lt;br /&gt;
:尺寸设置如下图所示：&lt;br /&gt;
:[[File:Module-002.jpg|750px]]&lt;br /&gt;
:取模数据如下（点击打开）：&lt;br /&gt;
::[https://www.electrodragon.com/w/File:6x12_ASCII_data.zip '''6x12英文ASCII取模数据''']&lt;br /&gt;
:函数定义如下：&lt;br /&gt;
{{code|1=&lt;br /&gt;
static void LCD_Show_1206_char(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 mode)&lt;br /&gt;
{&lt;br /&gt;
    u8 temp;&lt;br /&gt;
    u8 pos,t;&lt;br /&gt;
    u16 colortemp=POINT_COLOR;      		   &lt;br /&gt;
    num=num-' ';//得到偏移后的值&lt;br /&gt;
    LCD_SetWindows(x,y,x+6-1,y+12-1);//设置单个文字显示窗口&lt;br /&gt;
    if(!mode) //非叠加方式：字体带有背景色，显示时会将原来显示的内容覆盖掉&lt;br /&gt;
    {		&lt;br /&gt;
        for(pos=0;pos&amp;lt;12;pos++)&lt;br /&gt;
	{&lt;br /&gt;
	    temp = asc2_1206[num][pos];//调用1206字体，需要自己取模定义&lt;br /&gt;
	    for(t=0;t&amp;lt;6;t++)&lt;br /&gt;
            {                 &lt;br /&gt;
		if(temp&amp;amp;0x80)&lt;br /&gt;
		{&lt;br /&gt;
		    Lcd_WriteData_16Bit(fc);&lt;br /&gt;
		}&lt;br /&gt;
		else &lt;br /&gt;
		{&lt;br /&gt;
		    Lcd_WriteData_16Bit(bc); &lt;br /&gt;
		}&lt;br /&gt;
		temp&amp;lt;&amp;lt;=1;&lt;br /&gt;
	    }&lt;br /&gt;
			&lt;br /&gt;
	}	&lt;br /&gt;
    }&lt;br /&gt;
    else//叠加方式：字体不带背景色，直接叠加显示到原来显示的内容上&lt;br /&gt;
    {&lt;br /&gt;
	for(pos=0;pos&amp;lt;12;pos++)&lt;br /&gt;
	{&lt;br /&gt;
	    temp = asc2_1206[num][pos];//调用1206字体，需要自己取模定义&lt;br /&gt;
	    for(t=0;t&amp;lt;6;t++)&lt;br /&gt;
	    {   &lt;br /&gt;
		POINT_COLOR=fc;              &lt;br /&gt;
		if(temp&amp;amp;0x80)&lt;br /&gt;
		{&lt;br /&gt;
		    LCD_DrawPoint(x+t,y+pos);//画一个点    &lt;br /&gt;
		}&lt;br /&gt;
		temp&amp;lt;&amp;lt;=1;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    POINT_COLOR=colortemp;	&lt;br /&gt;
    LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏         	   &lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
*'''8x16英文字体取模说明'''&lt;br /&gt;
&lt;br /&gt;
:尺寸设置如下图所示：&lt;br /&gt;
:[[File:Module-003.jpg|750px]]&lt;br /&gt;
:取模数据如下（点击打开）：&lt;br /&gt;
::[https://www.electrodragon.com/w/File:8x16_ASCII_data.zip '''8x16英文ASCII取模数据''']&lt;br /&gt;
:函数定义如下：&lt;br /&gt;
{{code|1=&lt;br /&gt;
static void LCD_Show_1608_char(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 mode)&lt;br /&gt;
{&lt;br /&gt;
    u8 temp;&lt;br /&gt;
    u8 pos,t;&lt;br /&gt;
    u16 colortemp=POINT_COLOR;      		   &lt;br /&gt;
    num=num-' ';//得到偏移后的值&lt;br /&gt;
    LCD_SetWindows(x,y,x+8-1,y+16-1);//设置单个文字显示窗口&lt;br /&gt;
    if(!mode) //非叠加方式：字体带有背景色，显示时会将原来显示的内容覆盖掉&lt;br /&gt;
    {		&lt;br /&gt;
	for(pos=0;pos&amp;lt;16;pos++)&lt;br /&gt;
	{&lt;br /&gt;
	    temp = asc2_1608[num][pos];//调用1608字体，需要自己取模定义&lt;br /&gt;
	    for(t=0;t&amp;lt;8;t++)&lt;br /&gt;
            {                 &lt;br /&gt;
		if(temp&amp;amp;0x80)&lt;br /&gt;
	        {&lt;br /&gt;
		    Lcd_WriteData_16Bit(fc);&lt;br /&gt;
		}&lt;br /&gt;
		else &lt;br /&gt;
		{&lt;br /&gt;
		    Lcd_WriteData_16Bit(bc); &lt;br /&gt;
		}&lt;br /&gt;
		temp&amp;lt;&amp;lt;=1;&lt;br /&gt;
	    }&lt;br /&gt;
	}	&lt;br /&gt;
    }&lt;br /&gt;
    else//叠加方式：字体不带背景色，直接叠加显示到原来显示的内容上&lt;br /&gt;
    {&lt;br /&gt;
	for(pos=0;pos&amp;lt;16;pos++)&lt;br /&gt;
	{&lt;br /&gt;
	    temp = asc2_1608[num][pos];//调用1608字体，需要自己取模定义&lt;br /&gt;
	    for(t=0;t&amp;lt;8;t++)&lt;br /&gt;
	    {   &lt;br /&gt;
		POINT_COLOR=fc;              &lt;br /&gt;
		if(temp&amp;amp;0x80)&lt;br /&gt;
		{&lt;br /&gt;
		    LCD_DrawPoint(x+t,y+pos);//画一个点    &lt;br /&gt;
		}&lt;br /&gt;
		temp&amp;lt;&amp;lt;=1;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    POINT_COLOR=colortemp;	&lt;br /&gt;
    LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏         	   &lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
*'''12x24英文字体取模说明'''&lt;br /&gt;
&lt;br /&gt;
:尺寸设置如下图所示：&lt;br /&gt;
:[[File:Module-004.jpg|750px]]&lt;br /&gt;
:取模数据如下（点击打开）：&lt;br /&gt;
::[https://www.electrodragon.com/w/File:12x24_ASCII_data.zip '''12x24英文ASCII取模数据''']&lt;br /&gt;
&lt;br /&gt;
:函数定义如下：&lt;br /&gt;
{{code|1=&lt;br /&gt;
static void LCD_Show_2412_char(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 mode)&lt;br /&gt;
{&lt;br /&gt;
    u16 temp;&lt;br /&gt;
    u8 pos,t;&lt;br /&gt;
    u16 colortemp=POINT_COLOR;      		   &lt;br /&gt;
    num=num-' ';//得到偏移后的值&lt;br /&gt;
    LCD_SetWindows(x,y,x+12-1,y+24-1);//设置单个文字显示窗口&lt;br /&gt;
    if(!mode) //非叠加方式：字体带有背景色，显示时会将原来显示的内容覆盖掉&lt;br /&gt;
    {		&lt;br /&gt;
	for(pos=0;pos&amp;lt;24;pos++)&lt;br /&gt;
	{&lt;br /&gt;
	    temp = (asc2_2412[num][pos*2]&amp;lt;&amp;lt;8)&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;asc2_2412[num][pos*2+1];//调用2412字体，需要自己取模定义&lt;br /&gt;
	    for(t=0;t&amp;lt;12;t++)&lt;br /&gt;
	    {                 &lt;br /&gt;
	        if(temp&amp;amp;0x8000)&lt;br /&gt;
		{&lt;br /&gt;
		    Lcd_WriteData_16Bit(fc);&lt;br /&gt;
		}&lt;br /&gt;
		else &lt;br /&gt;
		{&lt;br /&gt;
		    Lcd_WriteData_16Bit(bc); &lt;br /&gt;
		}&lt;br /&gt;
		temp&amp;lt;&amp;lt;=1;&lt;br /&gt;
	    }&lt;br /&gt;
	}	&lt;br /&gt;
    }&lt;br /&gt;
    else//叠加方式：字体不带背景色，直接叠加显示到原来显示的内容上&lt;br /&gt;
    {&lt;br /&gt;
	for(pos=0;pos&amp;lt;24;pos++)&lt;br /&gt;
        {&lt;br /&gt;
	    temp = (asc2_2412[num][pos*2]&amp;lt;&amp;lt;8)&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;asc2_2412[num][pos*2+1];//调用2412字体，需要自己取模定义&lt;br /&gt;
	    for(t=0;t&amp;lt;12;t++)&lt;br /&gt;
	    {   &lt;br /&gt;
		POINT_COLOR=fc;              &lt;br /&gt;
		if(temp&amp;amp;0x8000)&lt;br /&gt;
		{&lt;br /&gt;
		    LCD_DrawPoint(x+t,y+pos);//画一个点    &lt;br /&gt;
		}&lt;br /&gt;
		temp&amp;lt;&amp;lt;=1;&lt;br /&gt;
	    }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    POINT_COLOR=colortemp;	&lt;br /&gt;
    LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏       	   &lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
*'''16x32英文字体取模说明'''&lt;br /&gt;
&lt;br /&gt;
:尺寸设置如下图所示：&lt;br /&gt;
:[[File:Module-005.jpg|750px]]&lt;br /&gt;
:取模数据如下（点击打开）：&lt;br /&gt;
::[https://www.electrodragon.com/w/File:16x32_ASCII_data.zip '''16x32英文ASCII取模数据''']&lt;br /&gt;
&lt;br /&gt;
:函数定义如下：&lt;br /&gt;
{{code|1=&lt;br /&gt;
static void LCD_Show_3216_char(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 mode)&lt;br /&gt;
{&lt;br /&gt;
    u16 temp;&lt;br /&gt;
    u8 pos,t;&lt;br /&gt;
    u16 colortemp=POINT_COLOR;      		   &lt;br /&gt;
    num=num-' ';//得到偏移后的值&lt;br /&gt;
    LCD_SetWindows(x,y,x+16-1,y+32-1);//设置单个文字显示窗口&lt;br /&gt;
    if(!mode) //非叠加方式：字体带有背景色，显示时会将原来显示的内容覆盖掉&lt;br /&gt;
    {		&lt;br /&gt;
	for(pos=0;pos&amp;lt;32;pos++)&lt;br /&gt;
	{&lt;br /&gt;
	    temp = (asc2_3216[num][pos*2]&amp;lt;&amp;lt;8)&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;asc2_3216[num][pos*2+1];//调用3216字体，需要自己取模定义&lt;br /&gt;
	    for(t=0;t&amp;lt;16;t++)&lt;br /&gt;
	    {                 &lt;br /&gt;
		if(temp&amp;amp;0x8000)&lt;br /&gt;
		{&lt;br /&gt;
		    Lcd_WriteData_16Bit(fc);&lt;br /&gt;
		}&lt;br /&gt;
		else &lt;br /&gt;
		{&lt;br /&gt;
		    Lcd_WriteData_16Bit(bc); &lt;br /&gt;
		}&lt;br /&gt;
		temp&amp;lt;&amp;lt;=1;&lt;br /&gt;
	    }&lt;br /&gt;
			&lt;br /&gt;
	}	&lt;br /&gt;
    }&lt;br /&gt;
    else//叠加方式：字体不带背景色，直接叠加显示到原来显示的内容上&lt;br /&gt;
    {&lt;br /&gt;
        for(pos=0;pos&amp;lt;32;pos++)&lt;br /&gt;
	{&lt;br /&gt;
	    temp = (asc2_3216[num][pos*2]&amp;lt;&amp;lt;8)&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;asc2_3216[num][pos*2+1];//调用3216字体，需要自己取模定义&lt;br /&gt;
	    for(t=0;t&amp;lt;16;t++)&lt;br /&gt;
	    {   &lt;br /&gt;
		POINT_COLOR=fc;              &lt;br /&gt;
		if(temp&amp;amp;(0x8000))&lt;br /&gt;
		{&lt;br /&gt;
		    LCD_DrawPoint(x+t,y+pos);//画一个点    &lt;br /&gt;
		}&lt;br /&gt;
		temp&amp;lt;&amp;lt;=1;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    POINT_COLOR=colortemp;	&lt;br /&gt;
    LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏      	   &lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;中文汉字取模&amp;lt;/font&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
*'''[[#中文汉字取模|重要说明]]'''&lt;br /&gt;
&lt;br /&gt;
:1、显示汉字时，是通过查询需要显示汉字的GBK码来获取取模数据的；&lt;br /&gt;
:2、汉字取模成功后，通过一个结构体数组来保存汉字GBK码和取模数据的对应关系；&lt;br /&gt;
:3、结构体定义如下：&lt;br /&gt;
{{code|1=&lt;br /&gt;
//16x16中文字体结构体定义&lt;br /&gt;
typedef struct &lt;br /&gt;
{&lt;br /&gt;
       unsigned char Index[2];	//存放汉字GBK码&lt;br /&gt;
       char Msk[32]; //存放汉字取模数据&lt;br /&gt;
}typFNT_GB16;  //结构体名称可以自己定义&lt;br /&gt;
&lt;br /&gt;
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\&lt;br /&gt;
//24x24中文字体结构体定义&lt;br /&gt;
typedef struct &lt;br /&gt;
{&lt;br /&gt;
       unsigned char Index[2];	//存放汉字GBK码&lt;br /&gt;
       char Msk[72]; //存放汉字取模数据&lt;br /&gt;
}typFNT_GB24;  //结构体名称可以自己定义&lt;br /&gt;
&lt;br /&gt;
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\&lt;br /&gt;
//32x32中文字体结构体定义&lt;br /&gt;
typedef struct &lt;br /&gt;
{&lt;br /&gt;
       unsigned char Index[2];	//存放汉字GBK码&lt;br /&gt;
       char Msk[128]; //存放汉字取模数据&lt;br /&gt;
}typFNT_GB32;  //结构体名称可以自己定义&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:4、结构体数组定义见以下各个尺寸汉字取模说明；&lt;br /&gt;
&lt;br /&gt;
*'''16x16中文字体取模说明'''&lt;br /&gt;
&lt;br /&gt;
:尺寸设置如下图所示：&lt;br /&gt;
:[[File:Module-006.jpg|750px]]&lt;br /&gt;
:取模成功后需要定义以下结构体数组存放取模数据（结构体定义见以上'''[[#中文汉字取模|重要说明]]'''）：&lt;br /&gt;
{{code|1=&lt;br /&gt;
const typFNT_GB16 tfont16[]=   &lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;中&amp;quot;,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,&lt;br /&gt;
  0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:函数定义如下：&lt;br /&gt;
{{code|1=&lt;br /&gt;
void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)&lt;br /&gt;
{&lt;br /&gt;
   u8 i,j;&lt;br /&gt;
   u16 k;&lt;br /&gt;
   u16 HZnum;&lt;br /&gt;
   u16 x0=x;&lt;br /&gt;
   HZnum=sizeof(tfont16)/sizeof(typFNT_GB16);	//自动统计汉字数目&lt;br /&gt;
   for (k=0;k&amp;lt;HZnum;k++) &lt;br /&gt;
   {&lt;br /&gt;
       if((tfont16[k].Index[0]==*(s))&amp;amp;&amp;amp;(tfont16[k].Index[1]==*(s+1)))&lt;br /&gt;
       { 	&lt;br /&gt;
           LCD_SetWindows(x,y,x+16-1,y+16-1);&lt;br /&gt;
	   for(i=0;i&amp;lt;16*2;i++)&lt;br /&gt;
           {&lt;br /&gt;
		for(j=0;j&amp;lt;8;j++)&lt;br /&gt;
		{	&lt;br /&gt;
		     if(!mode) //非叠加模式：字体带有背景色，显示时会将原来显示的内容覆盖掉&lt;br /&gt;
		     {&lt;br /&gt;
			  if(tfont16[k].Msk[i]&amp;amp;(0x80&amp;gt;&amp;gt;j))&lt;br /&gt;
                          {	&lt;br /&gt;
                               Lcd_WriteData_16Bit(fc);&lt;br /&gt;
                          }			  &lt;br /&gt;
                          else &lt;br /&gt;
                          {&lt;br /&gt;
                               Lcd_WriteData_16Bit(bc);&lt;br /&gt;
			  }&lt;br /&gt;
		     }&lt;br /&gt;
		     else //叠加模式：字体不带背景色，直接叠加显示到原来显示的内容上&lt;br /&gt;
		     {&lt;br /&gt;
			  POINT_COLOR=fc;&lt;br /&gt;
			  if(tfont16[k].Msk[i]&amp;amp;(0x80&amp;gt;&amp;gt;j))						&lt;br /&gt;
                          {&lt;br /&gt;
                               LCD_DrawPoint(x,y);//画一个点&lt;br /&gt;
			  }&lt;br /&gt;
			  x++;&lt;br /&gt;
			  if((x-x0)==16)&lt;br /&gt;
			  {&lt;br /&gt;
			       x=x0;&lt;br /&gt;
			       y++;&lt;br /&gt;
			       break;&lt;br /&gt;
			  }&lt;br /&gt;
		     }&lt;br /&gt;
	        }&lt;br /&gt;
	    }&lt;br /&gt;
	 }				  	&lt;br /&gt;
	 continue;  //找到对应点阵字库立即退出，防止多个汉字重复取模带来影响&lt;br /&gt;
    }&lt;br /&gt;
    LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏 &lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
*'''24x24中文字体取模说明'''&lt;br /&gt;
&lt;br /&gt;
:尺寸设置如下图所示：&lt;br /&gt;
:[[File:Module-007.jpg|750px]]&lt;br /&gt;
:取模成功后需要定义以下结构体数组存放取模数据（结构体定义见以上'''[[#中文汉字取模|重要说明]]'''）：&lt;br /&gt;
{{code|1=&lt;br /&gt;
const typFNT_GB24 tfont24[]=&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;中&amp;quot;,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,&lt;br /&gt;
  0x10,0x00,0x10,0x10,0x18,0x1F,0xFF,0xF8,0x18,0x10,0x18,0x18,0x10,0x18,0x18,0x10,&lt;br /&gt;
  0x18,0x18,0x10,0x18,0x18,0x10,0x18,0x18,0x10,0x18,0x1F,0xFF,0xF8,0x10,0x10,0x10,&lt;br /&gt;
  0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x18,0x00,0x00,&lt;br /&gt;
  0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:函数定义如下：&lt;br /&gt;
{{code|1=&lt;br /&gt;
void GUI_DrawFont24(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)&lt;br /&gt;
{&lt;br /&gt;
    u8 i,j;&lt;br /&gt;
    u16 k;&lt;br /&gt;
    u16 HZnum;&lt;br /&gt;
    u16 x0=x;&lt;br /&gt;
    HZnum=sizeof(tfont24)/sizeof(typFNT_GB24);	//自动统计汉字数目&lt;br /&gt;
    for (k=0;k&amp;lt;HZnum;k++) &lt;br /&gt;
    {&lt;br /&gt;
        if((tfont24[k].Index[0]==*(s))&amp;amp;&amp;amp;(tfont24[k].Index[1]==*(s+1)))&lt;br /&gt;
        { 	&lt;br /&gt;
             LCD_SetWindows(x,y,x+24-1,y+24-1);&lt;br /&gt;
	     for(i=0;i&amp;lt;24*3;i++)&lt;br /&gt;
	     {&lt;br /&gt;
		  for(j=0;j&amp;lt;8;j++)&lt;br /&gt;
		  {&lt;br /&gt;
			if(!mode) //非叠加模式：字体带有背景色，显示时会将原来显示的内容覆盖掉&lt;br /&gt;
			{&lt;br /&gt;
                              if(tfont24[k].Msk[i]&amp;amp;(0x80&amp;gt;&amp;gt;j))&lt;br /&gt;
                              {	 &lt;br /&gt;
                                   Lcd_WriteData_16Bit(fc);&lt;br /&gt;
			      }						&lt;br /&gt;
                              else &lt;br /&gt;
                              {&lt;br /&gt;
                                   Lcd_WriteData_16Bit(bc);&lt;br /&gt;
			      }					&lt;br /&gt;
                        }&lt;br /&gt;
		        else //叠加模式：字体不带背景色，直接叠加显示到原来显示的内容上&lt;br /&gt;
		        {&lt;br /&gt;
			      POINT_COLOR=fc;&lt;br /&gt;
			      if(tfont24[k].Msk[i]&amp;amp;(0x80&amp;gt;&amp;gt;j))&lt;br /&gt;
                              { &lt;br /&gt;
                                   LCD_DrawPoint(x,y);// 画一个点&lt;br /&gt;
			      }					&lt;br /&gt;
                              x++;&lt;br /&gt;
			      if((x-x0)==24)&lt;br /&gt;
			      {&lt;br /&gt;
				   x=x0;&lt;br /&gt;
				   y++;&lt;br /&gt;
				   break;&lt;br /&gt;
			      }&lt;br /&gt;
		         }&lt;br /&gt;
		   }&lt;br /&gt;
	      }&lt;br /&gt;
	 }				  	&lt;br /&gt;
	 continue;  //找到对应点阵字库立即退出，防止多个汉字重复取模带来影响&lt;br /&gt;
    }&lt;br /&gt;
    LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);// 恢复窗口为全屏&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
*'''32x32中文字体取模说明'''&lt;br /&gt;
&lt;br /&gt;
:尺寸设置如下图所示：&lt;br /&gt;
:[[File:Module-008.jpg|750px]]&lt;br /&gt;
:取模成功后需要定义以下结构体数组存放取模数据（结构体定义见以上'''[[#中文汉字取模|重要说明]]'''）：&lt;br /&gt;
{{code|1=&lt;br /&gt;
const typFNT_GB32 tfont32[]=&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;中&amp;quot;,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x80,0x00,&lt;br /&gt;
  0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,&lt;br /&gt;
  0x08,0x01,0x80,0x30,0x0F,0xFF,0xFF,0xF0,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,&lt;br /&gt;
  0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,&lt;br /&gt;
  0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0F,0xFF,0xFF,0xE0,0x0C,0x01,0x80,0x20,&lt;br /&gt;
  0x0C,0x01,0x80,0x20,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,&lt;br /&gt;
  0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,&lt;br /&gt;
  0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:函数定义如下：&lt;br /&gt;
{{code|1=&lt;br /&gt;
void GUI_DrawFont32(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)&lt;br /&gt;
{&lt;br /&gt;
    u8 i,j;&lt;br /&gt;
    u16 k;&lt;br /&gt;
    u16 HZnum;&lt;br /&gt;
    u16 x0=x;&lt;br /&gt;
    HZnum=sizeof(tfont32)/sizeof(typFNT_GB32);	//自动统计汉字数目&lt;br /&gt;
    for (k=0;k&amp;lt;HZnum;k++) &lt;br /&gt;
    {&lt;br /&gt;
	 if ((tfont32[k].Index[0]==*(s))&amp;amp;&amp;amp;(tfont32[k].Index[1]==*(s+1)))&lt;br /&gt;
	 { 	&lt;br /&gt;
               LCD_SetWindows(x,y,x+32-1,y+32-1);&lt;br /&gt;
	       for(i=0;i&amp;lt;32*4;i++)&lt;br /&gt;
	       {&lt;br /&gt;
		     for(j=0;j&amp;lt;8;j++)&lt;br /&gt;
	             {&lt;br /&gt;
			   if(!mode) //非叠加模式：字体带有背景色，显示时会将原来显示的内容覆盖掉&lt;br /&gt;
			   {&lt;br /&gt;
				if(tfont32[k].Msk[i]&amp;amp;(0x80&amp;gt;&amp;gt;j))&lt;br /&gt;
                                {&lt;br /&gt;
				      Lcd_WriteData_16Bit(fc);&lt;br /&gt;
                                }				&lt;br /&gt;
				else &lt;br /&gt;
                                {&lt;br /&gt;
                                      Lcd_WriteData_16Bit(bc);&lt;br /&gt;
				}			&lt;br /&gt;
                           }&lt;br /&gt;
			   else //叠加模式：字体不带背景色，直接叠加显示到原来显示的内容上&lt;br /&gt;
			   {&lt;br /&gt;
				POINT_COLOR=fc;&lt;br /&gt;
			        if(tfont32[k].Msk[i]&amp;amp;(0x80&amp;gt;&amp;gt;j))&lt;br /&gt;
                                {&lt;br /&gt;
                                      LCD_DrawPoint(x,y);// 画一个点&lt;br /&gt;
				}		&lt;br /&gt;
		                x++;&lt;br /&gt;
				if((x-x0)==32)&lt;br /&gt;
				{&lt;br /&gt;
				      x=x0;&lt;br /&gt;
				      y++;&lt;br /&gt;
				      break;&lt;br /&gt;
				}&lt;br /&gt;
			   }&lt;br /&gt;
		      }&lt;br /&gt;
		}&lt;br /&gt;
	  }				  	&lt;br /&gt;
	  continue;  //找到对应点阵字库立即退出，防止多个汉字重复取模带来影响&lt;br /&gt;
     }&lt;br /&gt;
     LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);// 恢复窗口为全屏&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[category: LCDs]]&lt;/div&gt;</summary>
		<author><name>Chao</name></author>
	</entry>
</feed>