现在大部分液晶屏是不带字库的,需要吸入文字的时候,需要像画画那样,一个一个点的写,最简单的方法是需要写某个字符,就对某个字符取模,但这样灵活性太差了,下面介绍一种方法,自建字库以及驱动程式,前台应用时直接调用就好了。

首先是建立字库

字库的基本组成单元如下的结构体:

// ------------------  英文字模的数据结构定义 ------------------------ //
struct EnCharType                 // 英文字模数据结构
{unsigned char  Msk[12];             // 点阵码数据(12*8有12个数据) unsigned char  Index;            // 索引
};

取英文字模的方法说明:

从第一行开始向右每取8个点作为一个字节,如果最后不足8个点就补满8位。
 取模顺序是从高到低,即第一个点作为最高位。如*-------取为10000000

英文字符索引表就是一个由多个字符组成的结构体数组,注意最后一个字符一定要是空格,表示数组查询结束  如下:

struct EnCharType code en_char[] =
{
0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x18,0x00,0x00,'!',//0
0x00,0x12,0x24,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'"',//1
0x00,0x00,0x24,0x24,0xFE,0x48,0x48,0xFE,0x48,0x48,0x00,0x00,'#',//2
0x00,0x10,0x3C,0x54,0x50,0x30,0x18,0x14,0x54,0x78,0x10,0x00,'$',//3
0x00,0x00,0xE4,0xA4,0xA8,0xF0,0x1E,0x2A,0x2A,0x4E,0x00,0x00,'%',//4
0x00,0x00,0x30,0x48,0x48,0x7E,0xA4,0x94,0x88,0x77,0x00,0x00,'&',//5
0x00,0x60,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'\'',//6
0x00,0x02,0x0C,0x08,0x10,0x10,0x10,0x10,0x08,0x08,0x06,0x00,'(',//7
0x00,0x40,0x20,0x10,0x08,0x08,0x08,0x08,0x10,0x20,0x40,0x00,')',//8
0x00,0x00,0x00,0x10,0x92,0x7C,0x7C,0x92,0x10,0x00,0x00,0x00,'*',//9
0x00,0x00,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x00,0x00,0x00,'+',//10
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x20,0x40,',',//11
0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,'-',//12
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,'.',//13
0x00,0x01,0x02,0x06,0x04,0x08,0x08,0x10,0x20,0x20,0x40,0x00,'/',//14
0x00,0x00,0x3C,0x24,0x42,0x42,0x42,0x42,0x24,0x3C,0x00,0x00,'0',//15
0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,'1',//16
0x00,0x00,0x3C,0x42,0x42,0x04,0x08,0x10,0x62,0x7E,0x00,0x00,'2',//17
0x00,0x00,0x3C,0x42,0x02,0x1C,0x02,0x02,0x42,0x3C,0x00,0x00,'3',//18
0x00,0x00,0x0C,0x14,0x24,0x44,0x44,0x3C,0x04,0x0C,0x00,0x00,'4',//19
0x00,0x00,0x7E,0x40,0x40,0x7C,0x02,0x02,0x42,0x3C,0x00,0x00,'5',//20
0x00,0x00,0x1C,0x24,0x40,0x5C,0x62,0x42,0x62,0x3C,0x00,0x00,'6',//21
0x00,0x00,0x7E,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x00,0x00,'7',//22
0x00,0x00,0x3C,0x42,0x42,0x34,0x2C,0x42,0x42,0x3C,0x00,0x00,'8',//23
0x00,0x00,0x18,0x64,0x42,0x46,0x3A,0x02,0x24,0x3C,0x00,0x00,'9',//24
0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x18,0x00,0x00,':',//25
0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x10,0x00,';',//26
0x00,0x02,0x04,0x18,0x20,0x40,0x20,0x10,0x0C,0x02,0x00,0x00,'<',//27
0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,'=',//28
0x00,0x40,0x20,0x18,0x04,0x02,0x04,0x08,0x30,0x40,0x00,0x00,'>',//29
0x00,0x00,0x3C,0x42,0x62,0x02,0x0C,0x08,0x00,0x18,0x00,0x00,'?',//30
0x00,0x00,0x3C,0x46,0x9A,0xAA,0xAA,0xBC,0x40,0x3E,0x00,0x00,'@',//31
0x00,0x00,0x10,0x18,0x28,0x24,0x24,0x7C,0x42,0xE7,0x00,0x00,'A',//32
0x00,0x00,0xF8,0x44,0x44,0x78,0x46,0x42,0x42,0xFC,0x00,0x00,'B',//33
0x00,0x00,0x3E,0x42,0x80,0x80,0x80,0x80,0x42,0x3C,0x00,0x00,'C',//34
0x00,0x00,0xF8,0x44,0x42,0x42,0x42,0x42,0x44,0xF8,0x00,0x00,'D',//35
0x00,0x00,0xFC,0x42,0x48,0x78,0x48,0x40,0x42,0xFC,0x00,0x00,'E',//36
0x00,0x00,0xFC,0x42,0x48,0x78,0x48,0x40,0x40,0xE0,0x00,0x00,'F',//37
0x00,0x00,0x3C,0x44,0x80,0x80,0x8E,0x84,0x44,0x38,0x00,0x00,'G',//38
0x00,0x00,0xE7,0x42,0x42,0x7E,0x42,0x42,0x42,0xE7,0x00,0x00,'H',//39
0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,'I',//40
0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x88,0xF0,0x00,'J',//41
0x00,0x00,0xEE,0x44,0x48,0x70,0x50,0x48,0x44,0xEE,0x00,0x00,'K',//42
0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x42,0xFE,0x00,0x00,'L',//43
0x00,0x00,0xEE,0x6C,0x6C,0x6C,0x54,0x54,0x54,0xD6,0x00,0x00,'M',//44
0x00,0x00,0xC7,0x62,0x52,0x52,0x4A,0x46,0x46,0xE2,0x00,0x00,'N',//45
0x00,0x00,0x3C,0x44,0x82,0x82,0x82,0x82,0x44,0x38,0x00,0x00,'O',//46
0x00,0x00,0xFC,0x42,0x42,0x7C,0x40,0x40,0x40,0xE0,0x00,0x00,'P',//47
0x00,0x00,0x38,0x44,0x82,0x82,0x82,0xB2,0x4C,0x38,0x06,0x00,'Q',//48
0x00,0x00,0xFC,0x42,0x42,0x7C,0x48,0x44,0x46,0xE3,0x00,0x00,'R',//49
0x00,0x00,0x3E,0x42,0x40,0x38,0x04,0x02,0x42,0x7C,0x00,0x00,'S',//50
0x00,0x00,0xFE,0x92,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,'T',//51
0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,'U',//52
0x00,0x00,0xE7,0x42,0x44,0x24,0x2C,0x28,0x18,0x10,0x00,0x00,'V',//53
0x00,0x00,0xD6,0x92,0x92,0x92,0x9A,0x6C,0x64,0x44,0x00,0x00,'W',//54
0x00,0x00,0xE7,0x66,0x24,0x18,0x18,0x24,0x66,0xE7,0x00,0x00,'X',//55
0x00,0x00,0xEE,0x44,0x28,0x38,0x10,0x10,0x10,0x38,0x00,0x00,'Y',//56
0x00,0x00,0x7E,0x84,0x08,0x10,0x10,0x20,0x42,0xFC,0x00,0x00,'Z',//57
0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1E,0x00,'[',//58
0x00,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x00,'\\',//59
0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00,']',//60
0x00,0x1C,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'^',//61
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,'_',//62
0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'`',//63
0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x3E,0x42,0x3F,0x00,0x00,'a',//64
0x00,0x00,0xC0,0x40,0x40,0x5C,0x62,0x42,0x42,0x7C,0x00,0x00,'b',//65
0x00,0x00,0x00,0x00,0x00,0x3C,0x62,0x40,0x42,0x3C,0x00,0x00,'c',//66
0x00,0x00,0x06,0x02,0x02,0x1E,0x62,0x42,0x42,0x3F,0x00,0x00,'d',//67
0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x40,0x3E,0x00,0x00,'e',//68
0x00,0x00,0x0F,0x10,0x10,0x7E,0x10,0x10,0x10,0x7C,0x00,0x00,'f',//69
0x00,0x00,0x00,0x00,0x00,0x3E,0x44,0x38,0x40,0x7C,0x42,0x3C,'g',//70
0x00,0x00,0xC0,0x40,0x40,0x5C,0x62,0x42,0x42,0xE7,0x00,0x00,'h',//71
0x00,0x00,0x30,0x00,0x00,0x70,0x10,0x10,0x10,0x7C,0x00,0x00,'i',//72
0x00,0x00,0x0C,0x00,0x00,0x1C,0x04,0x04,0x04,0x04,0x04,0x78,'j',//73
0x00,0x00,0xC0,0x40,0x40,0x4E,0x58,0x70,0x48,0xEE,0x00,0x00,'k',//74
0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,'l',//75
0x00,0x00,0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0xED,0x00,0x00,'m',//76
0x00,0x00,0x00,0x00,0x00,0xD8,0x66,0x42,0x42,0xE7,0x00,0x00,'n',//77
0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00,'o',//78
0x00,0x00,0x00,0x00,0x00,0xF8,0x46,0x42,0x42,0x7C,0x40,0xE0,'p',//79
0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x42,0x42,0x3E,0x02,0x07,'q',//80
0x00,0x00,0x00,0x00,0x00,0xEE,0x30,0x20,0x20,0xF8,0x00,0x00,'r',//81
0x00,0x00,0x00,0x00,0x00,0x3E,0x40,0x3C,0x42,0x7C,0x00,0x00,'s',//82
0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x10,0x0C,0x00,0x00,'t',//83
0x00,0x00,0x00,0x00,0x00,0xC6,0x42,0x42,0x42,0x3F,0x00,0x00,'u',//84
0x00,0x00,0x00,0x00,0x00,0xE7,0x46,0x24,0x28,0x10,0x00,0x00,'v',//85
0x00,0x00,0x00,0x00,0x00,0xD7,0x92,0x9A,0x6A,0x44,0x00,0x00,'w',//86
0x00,0x00,0x00,0x00,0x00,0x6E,0x3C,0x18,0x3C,0x76,0x00,0x00,'x',//87
0x00,0x00,0x00,0x00,0x00,0xE7,0x46,0x24,0x18,0x18,0x10,0xE0,'y',//88
0x00,0x00,0x00,0x00,0x00,0x7E,0x44,0x18,0x32,0x7E,0x00,0x00,'z',//89
0x00,0x07,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x03,0x00,'{',//90
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,'|',//91
0x00,0x70,0x10,0x10,0x10,0x08,0x10,0x10,0x10,0x10,0x60,0x00,'}',//92
0x30,0x4C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'~',//93
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,' ',//94
};

下面就是说明如何写软件驱动来直接写到TFT屏上,关键是如下几个函数:

1、ShowString 为接口函数,外面直接调用它就好了,支持自动换行

/*******************************************************************************
* 函 数 名 :ShowString
* 函数功能 :显示字符串,可以中英文混合写,根据ASCII码表
* 输    入 :x,y 坐标位置   str 要显示的字符串  dcolor前景色 bgcolor 背景色
* 输    出 :无
*******************************************************************************/
void ShowString(unsigned int x,unsigned int y,unsigned char *str,unsigned int dcolor,unsigned int bgcolor)
{  unsigned int x1,y1;x1=x;y1=y;while(*str!='\0'){ ShowEnChar(x1,y1,*str,dcolor,bgcolor);x1+=8;if(x1+8 >= 240)//换行{x1 = x;y1 = y1+12;}str++;}
}

2、ShowEnChar 在指定位置显示一个字符,通过要显示的字符来搜索字库,找到其对应的字库,注意以空格结尾,对找不到的也以空格替换

/*******************************************************************************
* 函 数 名 :ShowEnChar
* 函数功能 :在指定位置显示一个英文字符 8*12大小
* 输    入 :x,y 坐标  value 要显示的字符  dcolor前景色 bgcolor 背景色
* 输    出 :无
*******************************************************************************/
void ShowEnChar(unsigned int x,unsigned int y,unsigned char value,unsigned int dcolor,unsigned int bgcolor)
{  unsigned char i,j;int index; if(x+8 > 240) return ;if(y+12 > 320) return ;//超出范围,返回index = SearchEnPosition(value);AddressSet(x,y,x+7,y+11); //设置区域      for(j=0;j<12;j++){for(i=0;i<8;i++){            if((en_char[index].Msk[j] & (1<<(7-i)))!=0)//高位开始{LcdWriteData(dcolor>>8,dcolor);} else{LcdWriteData(bgcolor>>8,bgcolor);}   }}
}
/*******************************************************************************
* 函 数 名 :SearchEnPosition
* 函数功能 :查找英文字符索引
* 输    入 :value
* 输    出 :在en_char的位置
*******************************************************************************/
int SearchEnPosition(unsigned char value)
{
<span style="white-space:pre"> </span>int i=0;
<span style="white-space:pre"> </span>while(en_char[i].Index != ' ')
<span style="white-space:pre"> </span>{
<span style="white-space:pre">     </span>if(en_char[i].Index == value) return i;
<span style="white-space:pre">     </span>i++;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return i;
}

在实际使用,就只需要知道其实位置,然后调用ShowString 函数就好了,英文字符不想中文字符,可以把常用的英文字符建立到字库中,底层驱动也是很简单的,以后有空再把相关的工程上传上来

TFT液晶屏使用自建的英文字库相关推荐

  1. ZYNQ7020(黑金)纯verilog驱动4.3寸RGB接口TFT液晶屏(AN430)显示彩条

    ZYNQ7020(黑金)纯verilog驱动4.3寸RGB接口TFT液晶屏(AN430)显示彩条 简介 像素(Pixel):像素是指由图像的小方格组成的,这些小方快都有一个明确的位置和被分配的色彩数值 ...

  2. 全志H616开发板Orange Pi Zero2连接香橙派5寸TFT液晶屏的测试说明

    香橙派Zero2开发板采用全志H616 四核 64位处理器,拥有512MB/1GB 内存可选,集成千兆以太网卡.蓝牙5.0+双频WiFi(2.4GHz和5GHz).USB2.0.Micro-HDMI( ...

  3. fpga硬件驱动TFT液晶屏-小结

    最近折腾了一下fpga,发现还真是不好搞,硬件描述语言和顺序代码的真的是天差地别,还好电路的底子还在一些.通过发挥不怕效率低,只要能运行的精神,终于把ili9320的初始化和写操作调通了.最后跑了下时 ...

  4. ARDUINO:ESP32 + ILI9431 SPI TFT液晶屏静态展示图片

    折腾了半天,终于搞定ESP32开发板 + ILI9431 SPI TFT小液晶屏静态展示图片. 库:Arduino IDE的库管理中搜索 TFT_eSPI.或者从GITHUB手动下载:https:// ...

  5. 树莓派GPIO驱动ST7735S主控TFT液晶屏显示图片和文字

    本文使用1.8''128*160RGB_TFT ST7735S主控的液晶屏来操作 参考blog:http://blog.mangolovecarrot.net/2017/03/05/raspi-stu ...

  6. 关于配置tft液晶屏时,屏幕不显示遇到的问题

    问题描述: 本人新手小白,在使用单片机配置tft屏幕时,发现屏幕一直显示白屏(如下图).但是仔细检查多遍后都无法找到问题所在,于是在CSDN上搜索了很久都没有发现类似问题的解决方法.无奈只能重新回到代 ...

  7. HT68F30控制GPG96244QS1 TFT液晶屏

    资料上显示是SPI总线控制.在SPENB由高变底的时候起动传输.由低到高的时候停止转输.并且传送的时候先传高位的数据.现在没有效果出来(正在找问题) 没有效果的意思是: 1.LCD屏没有图像.只有背光 ...

  8. TFT液晶屏驱动移植

    1.打开 arch/arm/mach-s3c2440/mach-smdk2440.c,先删除之前的 LCD 设备平台代码 /* LCD driver info */ static struct s3c ...

  9. 简单明了操作——ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏)

    简单明了操作--ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏) 前言 准备材料 esp8266 NodeMCU(串口WiFi模块) 1.44inch SPI Arduin ...

  10. MCU驱动和RGB驱动的液晶屏的区别

    概况来讲,RGB驱动需要的硬件条件高,比如用STM32F429的LTDC+DMA2D模块,外加SDRAM作为显存.而MCU接口,STM32F407系列的控制器就整合了这个模块,包含6800和8080两 ...

最新文章

  1. [HAOI2010]订货
  2. 开启php的ssl,php怎么开启ssl?开启ssl的方法
  3. 虚拟主机域名访问yum服务器,虚拟主机域名访问yum服务器
  4. 卷积神经网络结构可视化工具PlotNeuralNet
  5. JVM系列之内存泄漏
  6. CPU中的程序是怎么运行起来的
  7. python:__new__()与__init__()
  8. .NET 指南:安全编码概览
  9. LaTeX youngtab包——组合数学中棋盘格的绘制
  10. ​微信Android版支持改微信号,淘宝硬核拒绝改名要求;5G 套餐价格松动;Kotlin 1.4 第二个预览版发布|极客头条...
  11. 【搜索】P1032 字串变换
  12. UE4 虚幻引擎,3D数学(一),3D坐标系,2D坐标系
  13. Mybatis CRUD操作和多表查询
  14. www 53ff com劫持IE,广告网页图标常驻桌面,删了又来
  15. 双目视觉焦距_双目视觉成像原理
  16. Win10系统无法启动的最终解决方案
  17. python中反斜线是什么意思_Python中正反斜杠(‘/’和‘’)的意义与用法
  18. 安装SQl Server Polybase 报错解决方法
  19. Permission denied (publickey)的解决方法
  20. 基于R语言进行热浪指数的计算_HWMid

热门文章

  1. Insecure Randomness引发对随机数生成器抵挡加密攻击的方法
  2. Java成员变量和局部变量
  3. Zigbee应用之搭建开发环境
  4. can总线短距离不用双绞线_CAN总线布线规范
  5. android系统怎么连不上wifi,为什么手机连接不上wifi wifi连不上怎么办
  6. 计算机网络拓扑星型结构应用,浅谈计算机网络拓扑结构及其应用.doc
  7. 阿里巴巴国际站统计国家来源小方法
  8. c语言头结点存放元素,【笔记】带头节点的单链表的C语言实现
  9. 2018最新win10激活密匙
  10. 激光雷达3D建模---读书笔记