LTDC--液晶显示中英文

一、两种编码

     1、字符编码

         由于计算机只能识别 0 1 ,文字也只能以 0 1 的形式在计算机里存储,所以我们需要对文字 进行编码才能让计算机处理,编码的过程就是规定特定的 01 数字符串来表示特定的文字,最简单的字符编码例子是 ASCII 码。

      2、中文编码

      由于英文书写系统都是由 26 个基本字母组成,利用 26 个字母组可合出不同的单词,所以用 ASCII 码表就能表达整个英文书写系统。而中文书写系统中的汉字是独立的方块,若参考单词拆解成字 母的表示方式,汉字可以拆解成部首、笔画来表示,但这样会非常复杂 ( 可参考五笔输入法编码 ) , 所以中文编码直接对方块字进行编码,一个汉字使用一个号码。
由于汉字非常多,常用字就有 6000 多个,如果像 ASCII 编码表那样只使用 1 个字节最多只能表 示 256 个汉字,所以我们使用 2 个字节来编码。

二、字模

      1、字模构成

      已知字模是图形数据,而图形在计算机中是由一个个像素点组成的,所以字模实质是一个个像素 点数据。为方便处理,我们把字模定义成方块形的像素点阵,且每个像素点只有 0 1 这两种状 态 ( 可以理解为单色图像数据 ) 。见图 字模 ,这是两个宽、高为 16x16 的像素点阵组成的两个汉字 图形,其中的黑色像素点即为文字的笔迹。计算机要表示这样的图形,只需使用 16x16 个二进制 数据位,每个数据位记录一个像素点的状态,把黑色像素点以“1 ”表示,无色像素点以“ 0 ”表示即可。这样的一个汉字图形,使用 16x16/8=32 个字节来就可以记录下来。

 

16x16 的“字”的字模数据以 C 语言数组的方式表示,在这样的字模中,以两个字节表示一行像素点,16 行构成一个字模。

      2、字模原理

      如果使用 LCD 的画点函数,按位来扫描这些字模数据,把为 1 的位以黑色来显示 ( 也可以使用其它颜色) ,为 0 的数据位以白色来显示,即可把整个点阵还原出来,显示在液晶屏上。
为便于理解,我们编写了一个使用串口 printf 利用字模打印字符到串口上位机,见 代码清单 :LTDC-
2 中演示的字模显示原理。

 

 

main 函数中运行这段代码,连接好开发板到上位机,可以看到图 使用串口打印字模 中的现象。
该函数中利用 printf 函数对字模数据中为 1 的数据位打印“ * ”号,为 0 的数据位打印出“空格”,
从而在串口接收区域中使用“ * ”号表达出了一个“当”字。

 

 

三、通过LTDC液晶显示屏显示字模

       1、下载辅助软件PCtoLCD2002

 

        2、进入界面

 

     配置字模的解析顺序,解析顺序要和代码配套,否则会显示乱码。 

 

 

     3、代码设置

     3.1、将“lcd_show_zn”模块添加到工程中

 

    3.2、“lcd_show_zn”部分代码实例

#include "lcd_show_zn.h"
#include "bsp_lcd.h"

#define ITEM_BIT_NUM  8


unsigned char zm24x24_index[]="蜂鸣";

uint8_t ZN24x24_Table[] = {
0x00,0x00,0x00,0x00,0x20,0x00,0x60,0x60,0x00,0x20,0xE0,0x1F,0x20,0x30,0x08,0x20,
0x30,0x04,0x20,0x48,0x06,0xFC,0x87,0x02,0x24,0x01,0x01,0x24,0xC1,0x06,0x24,0x21,
0x79,0x24,0x19,0x31,0x24,0xFF,0x1F,0x24,0x01,0x01,0xFC,0x01,0x01,0x24,0xF9,0x1F,
0xA4,0x00,0x01,0x20,0x01,0x21,0xA0,0xFF,0x3F,0x7C,0x02,0x01,0x04,0x02,0x01,0x00,
0x00,0x01,0x00,0x80,0x01,0x00,0x00,0x00,/*"蜂",0*/

0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0xFC,0xF8,0x0F,0x84,
0x28,0x08,0x84,0x48,0x0C,0x84,0xC8,0x0C,0x84,0x88,0x0C,0x84,0x08,0x04,0x84,0x88,
0x04,0x84,0x08,0x07,0x84,0x08,0x01,0xFC,0xFC,0x3F,0x84,0x08,0x30,0x04,0x00,0x10,
0x04,0x00,0x12,0x80,0xFF,0x17,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x80,0x18,0x00,
0x00,0x0F,0x00,0x00,0x04,0x00,0x00,0x00,/*"鸣",1*/
};


znsFONT ZN_Font24x24 = {
  ZN24x24_Table,
  zm24x24_index,
  24, /* Width */
  24, /* Height */
};

 

unsigned char zm48x48_index[]="你好";

uint8_t ZN48x48_Table[] = {
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,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3C,0x00,0x0E,0x00,0x00,
0xC0,0x3F,0x00,0x0F,0x00,0x00,0xFE,0x3F,0x80,0x9F,0xFF,0x3F,0xFF,0x1F,0xC0,0xFF,
0xFF,0x7F,0xFF,0x0F,0xE0,0xFF,0xFF,0x7F,0xFF,0x07,0xF8,0xFF,0xFF,0x7F,0xFF,0x03,
0xFC,0x3F,0x00,0x78,0xFF,0x01,0xFF,0x03,0x00,0x78,0xFF,0xC1,0xFF,0x00,0x00,0x78,
0xFF,0x81,0x7F,0x80,0x01,0x1C,0xE0,0x01,0x0F,0x80,0x03,0x06,0xE0,0x01,0x00,0x80,
0x07,0x00,0xE0,0x01,0x00,0x80,0x03,0x00,0xE0,0x00,0xE0,0xC0,0x83,0x01,0xE0,0x00,
0xE0,0xC0,0x83,0x07,0xE0,0x00,0xF0,0xC0,0x83,0x07,0xE0,0x00,0xF0,0xC0,0x83,0x0F,
0xE0,0x00,0x78,0xC0,0x03,0x1F,0xE0,0x00,0x7C,0xC0,0x03,0x7F,0xE0,0x00,0x7E,0xC0,
0x03,0x7F,0xE0,0x00,0x3F,0xC0,0x03,0x7F,0xF0,0x80,0x3F,0xC0,0x03,0x7E,0xF0,0xE0,
0x1F,0xC0,0x03,0x7E,0x70,0xF8,0x1F,0xC0,0x03,0x7C,0x70,0xE0,0x0F,0xC0,0x03,0x7C,
0x70,0x80,0x07,0xE0,0x03,0x78,0x70,0x00,0x00,0xE0,0x03,0x00,0x70,0x00,0x00,0xE0,
0x03,0x00,0x70,0x00,0x00,0xE0,0x03,0x00,0x60,0x00,0x00,0xE0,0x01,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,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"你",0*/

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,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0xFE,0x1F,
0x38,0x80,0x1F,0xFF,0xFF,0x7F,0x38,0xE0,0x1F,0xFF,0xFF,0x7F,0x38,0x00,0x0E,0xFF,
0xFF,0x7F,0x38,0x00,0x0E,0xFE,0x03,0x7F,0x38,0x00,0x0E,0xFC,0x01,0x7F,0x38,0xC0,
0x0F,0xC0,0x03,0x1F,0xFC,0xFF,0x07,0x80,0x8F,0x07,0xFF,0xFF,0x07,0x00,0xDF,0x03,
0xFF,0xFF,0x07,0x00,0xFE,0x01,0xFF,0xFF,0x07,0x00,0xFE,0x00,0xFF,0xE3,0x03,0x00,
0xFC,0x00,0x7F,0xE0,0x03,0xF8,0xFF,0x7F,0x38,0xE0,0xF1,0xFF,0xFF,0x7F,0x38,0xF0,
0xF1,0xFF,0xFF,0x7F,0x78,0xF8,0xF0,0xFF,0xFF,0x7F,0x78,0x7C,0xF0,0x07,0xF0,0x79,
0xF8,0x3E,0x00,0x00,0xF0,0x00,0xF8,0x3F,0x00,0x00,0xF0,0x00,0xF0,0x7F,0x00,0x00,
0xF0,0x00,0xF8,0xFF,0x7F,0x00,0xF8,0x00,0xFF,0xFF,0x3F,0x00,0xF8,0x00,0xFF,0xFF,
0x1F,0x00,0xFC,0x00,0x7F,0xF8,0x07,0x00,0xFE,0x00,0x0F,0x00,0x00,0xC0,0x7F,0x00,
0x00,0x00,0x00,0xFE,0x7F,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0xE0,0xFF,
0x1F,0x00,0x00,0x00,0x00,0xFE,0x01,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,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,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"好",1*/

};


znsFONT ZN_Font48x48 = {
  ZN48x48_Table,
  zm48x48_index,
  48, /* Width */
  48, /* Height */
};

     3.3、 main主函数代码

#include "stm32F4xx.h"
#include "stm32f4xx_conf.h"
#include "stdio.h"
#include "bsp_lcd.h"
#include "lcd_show_zn.h"


int16_t select_index = 0; 
uint8_t  beep_state = 0;    
uint8_t  led_state = 0;   

void EXTI0_IRQHandler()
{
    if(EXTI_GetITStatus(EXTI_Line0) != RESET)  
    {
    
        select_index++;
        if(select_index>=6)
        {
           select_index = 0;
        }

        EXTI_ClearITPendingBit(EXTI_Line0);
    }
}


void EXTI15_10_IRQHandler()
{
    if(EXTI_GetITStatus(EXTI_Line13) != RESET)  
    {

	switch(select_index)
	{
	
	case 0:
		if(beep_state == 0)
		{
			GPIO_SetBits(GPIOI,GPIO_Pin_11);
			beep_state = 1;
		}
		else
		{
			GPIO_ResetBits(GPIOI,GPIO_Pin_11);
			beep_state = 0;
		}
	break;
	
	case 1:
		if(led_state == 0)
		{
			LED_Red_Ctrl(LED_ON);
			led_state = 1;
		}
		else
		{
			LED_Red_Ctrl(LED_OFF);
			led_state = 0;
		break;
			
		case 2:
			
			LCD_DrawRect(300,200,100,100);
		break;
		
		case 3:
			
			LCD_DrawCircle(400,200,50);
		break;
		
		case 4:
		
			LCD_FillTriangle(100,200,250,200,220,300);
		break;
		
		case 5:
			
			LCD_Clear(LCD_COLOR_BLACK);
		break;
	}    
      
     EXTI_ClearITPendingBit(EXTI_Line13);
    }
}

int main(void)
{
    GPIO_InitTypeDef gpio_info;

    Delay_init();
    UART_init(115200);
    Adc_init();
    key1_init();
    key2_init();
    LED_init();
  
    
    LCD_Init();
  
    LCD_LayerInit();
    
    LTDC_Cmd(ENABLE);
    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);
    
    gpio_info.GPIO_Mode = GPIO_Mode_OUT;
    gpio_info.GPIO_OType = GPIO_OType_PP;
    gpio_info.GPIO_Pin = GPIO_Pin_11;
    gpio_info.GPIO_PuPd = GPIO_PuPd_UP;
    gpio_info.GPIO_Speed = GPIO_Low_Speed;
    GPIO_Init(GPIOI,&gpio_info);

    LCD_SetZNFont(&ZN_Font16x16);
	
    while(1)
    {
       
		LCD_DrawCharCN(340,300,"你好");  
				
    }
}

 以上即可在液晶显示屏显示自己所想要得字模。

四、补充如何使用  PCtoLCD2002 生成字模字体

        4.1、字模软件配置

    4.2、设置字体

 

     4.3、生成字体 

生成的字体文件保存在工程文件夹中,然后在工程中添加进去引用即可。 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值