面向嵌入式字模液晶及显示字符原理-综合

398 阅读4分钟

1 从子模开始

1.1 GB2312 标准

  • 首先定义的是 GB2312 标准。它把 ASCII 码表 127 号之后的扩展字符集直接取消掉,并规定小于 127 的编码按原来 ASCII 标准解释字符。当 2 个大于 127 的字符连在一起时,就表示 1 个汉字,第 1 个字节使用 (0xA1-0xFE) 编码,第 2 个字节使用 (0xA1-0xFE) 编码,这样的编码组合起7000 多个符号,其中包含 6763 个汉字。 image.png
  • GB2312 编码对所收录字符进行了“分区”处理,共94个区,每区含有 94 个位,共 8836 个码位。而区位码实际是 GB2312编码的内部形式,它规定对收录的每个字符采用两个字节表示,第一个字节为“高字节”,对应94 个区;第二个字节为“低字节”,对应 94 个位。所以它的区位码范围是:0101-9494为兼容ASCII 码,区号和位号分别加上 0xA0 偏移就得到 GB2312 编码。在区位码上加上 0xA0 偏移,可求得 GB2312 编码范围:0xA1A1 - 0xFEFE,其中汉字的编码范围为 0xB0A1-0xF7FE,第一字节 0xB0-0xF7(对应区号:16 - 87),第二个字节 0xA1-0xFE(对应位号:01 - 94)。 image.png

1.2 子模寻址(若生成32*32大小子模)

  • 使用字模软件制作的字模数据一般会按照编码格式排列,利用软件生成的字模文件《GB2312_H3232.FON》中的数据,是根据 GB2312 的区位码表的顺序存储的,它存储了区位码为 0101-9494 的字符,
  • 每个字模的大小为 32x32/8=128 字节。其中第一个字符“空格”的区位码为0101,它是首个字符,所以文件的前 128 字节存储的是它的字模数据;
  • 同理,128-256 字节存储的则是 0102 字符“、”的字模数据。所以我们可以导出任意字符的寻址公式: image.png
  • 其中 Code H 和 Code L分别是 GB2312 编码的第一字节和第二字节;94 是指一个区中有 94 个位 (即94 个字符)。公式的实质是根据字符的 GB2312 编码,求出区位码,然后区位码乘以每个字符占据的字节数,求出地址偏移

2 液晶显示汉字及字符原理(类似于图像检测YOLO AI算法的输出矩阵7*7*30

  • 像素点用(0,1)表示显示与否,如分辨率:800*480个像素点。这也是字模的作用,0表示像素点灭,1表示像点亮,字模控制的就是像素点的亮和灭
  • 每个像素点纵深2个字节(如:RGB565))表示颜色

2.1 液晶控制器驱动NT35510

  • 根据液晶屏的要求,在发送显示数据前,需要先设置显示窗口确定后面发送的像素数据的显示区域
  • 水平显示区域 image.png
  • 垂直显示区域 image.png
  • 设置显示窗口 image.png image.png

2.2 对某一点以某种颜色进行填充

  • 设置像素 image.png
  • 设置颜色 image.png

2.3 显示一个英文字符

  • fonts.h image.png
  • fonts.c(子模一般为数组,对于 Font8x16 的字模表,每个ASCII字符的字模数据长度=8*16/8=16 字节) image.png 这个结构体类型定义了三个变量,第一个是指向字模数据的指针,即前面提到的 C 语言数 组,每二、三个变量存储了该字模单个字符的像素宽度和高度。利用这个类型定义了 Font8x16、 Font16x32 之类的变量,方便显示时寻址。 image.png
  • bsp_nt35510_lcd.h image.png
  • bsp_nt35510_lcd.c image.png 字符显示函数有 usX、usY 及 cChar 参数。其中 usX 和 usY 分别表示字符显示位 置的 (X,Y) 坐标;而输入参数 cChar 是要显示的英文字符,如字符’A’,字符’空格’ 等。 image.png

2.4 显示一个GBK2312汉字

  • fonts.c 子模存储判断 image.png 根据公式取出32*32/8个字节数据 image.png
  • bsp_nt35510_lcd.c image.png