1、TFT液晶屏工作原理
2、TFT液晶屏驱动开发
3、TFT人机界面开发
内容概要:
1、TFT液晶屏显示原理
2、1.44寸TFT液晶屏工作原理
3、1.44寸TFT液晶屏硬件设计
TFT液晶屏如何显示:
颜色深度:
Color 介绍 :
① R,G,B三基色组合形成各种颜色。
②能显示的颜色数由RGB的数字信号的位数来决定。(8bit 数字信号刚好能显示16.7M种颜色)
以3bit为例数字信号为例:
For 3 bit : 23(R) * 23(G) * 23(B) = 256 colors
For 6 bit : 26(R) * 26(G) * 26(B) = 262144 colors(242K)
For8 bit: 28(R) * 28(G) * 28(B) =16777216 colors(16.7M)
For10 bit: 210(R) * 210(G) * 210(B) =1073741824 colors(1 billion)
1.44寸TFT模块:
TFT驱动控制器:
1.44寸模块电路详解:
内容概要:
1、TFT液晶屏硬件接口驱动开发
2、TFT液晶屏取模方式
3、TFT液晶屏显示字符串
硬件接口初始化:
根据硬件设计,LoRa与LCD共用SPI总线,且LCD_MISO用于命令/数据模式切换控制。
需要修改gpio初始化源码,让片选接口拉高。
写指令:
写数据:
初始化:
设置显示区域:
设置行列起始地址,在此区域内写点数据自动换行
画点和清屏:
RGB565颜色对照表:(详细对照表可以百度搜索)
驱动源码移植:(源码下载链接:https://pan.baidu.com/s/1MLheOr6d3KDLRROalrPugg 密码:zdjg)
将源码中的三个文件按照如下位置放入相应的工程文件目录下:
打开工程文件,将lcd.c添加到工程中:
清除警告:
LoRa模块和LCD显示屏都是接到同一个SPI引脚,初始化时片选(NSS)引脚要修改为不使能(高电平):
上电后液晶屏显示黄色屏幕:
在main.c函数中添加如下代码:
1、添加头文件:
#include "lcd.h"
2、添加初始化函数和清屏函数:
Lcd_Init();//LCD初始化函数
Lcd_Clear(YELLOW);//全屏清屏函数,参数是清屏时填充的颜色(16位表示)
取模方式:
取模工具:(工具加载链接:https://pan.baidu.com/s/1jwRDjs69i0K9j6ctEFQvtg 密码:yedy)
文字取模软件(该工具在本项目中使用不到,可自行了解)
工程中新建一个.h文件,将生成的子模数据复制到该文件中,将数据修改成如下数组,并在lcd.c中添加显示文字的代码:
图片取模软件
将生成的.h文件复制到工程的相关目录中,并在lcd.c中添加显示图片的代码:
/*************************************************
函数名:showimage
功能:显示一副图片
入口参数:图片缓存
返回值:无
*************************************************/
//因为一副128*128的图片需要32768个8位数组成(数组元素有32768个),很显然数组太大,不能放到内存中,只能放在静态存储区,所以参数使用 const 修饰
void showimage(const unsigned char *p)
{
unsigned int i;
uint16_t HData,LData;
Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);
Lcd_WriteIndex(0x2C);
for(i = 0;i < 128*128;i++)//因为我们已经设置显示屏显示范围为128*128,所以写满一行会自动换行,不需单独写代码
{
LData = *(p+i*2);
HData = *(p+i*2+1);
LCD_WriteData_16Bit(HData<<8|LData);
}
}
将该函数申明添加到lcd.h中:
main.c函数中调用该函数,将图片显示到LCD
showimage_all(0,0,32768, gImage_world);//或者:showimage(gImage_world);
LCD显示字符串:
//lcd.c
/*************************************************
函数名:Gui_DrawFont_GBK16
功能:显示一个字符串
入口参数:列地址、行地址、字体颜色、背景颜色、要写入的字符串
返回值:无
*************************************************/
void Gui_DrawFont_GBK16(uint16_t x0, uint16_t y0, uint16_t fc, uint16_t bc, uint8_t *s)
{
int i,j,k,x,y,xx;
unsigned char qm;
long int ulOffset;
char ywbuf[32];
// char temp[2];
for(i = 0; i= 161)
{
// temp[0] = *(s+i);
// temp[1] = '\0';
return;
}
else
{
qm = *(s+i);
ulOffset = (long int)(qm) * 16;
for (j = 0; j < 16; j ++)
{
ywbuf[j]=Zk_ASCII8X16[ulOffset+j];
}
for(y = 0;y < 16;y++)
{
for(x=0;x<8;x++)
{
k=x % 8;
if(ywbuf[y]&(0x80 >> k))
{
xx=x0+x+i*8;
Gui_DrawPoint(xx,y+y0,fc);
}
else
{
xx=x0+x+i*8;
Gui_DrawPoint(xx,y+y0,bc);
}
}
}
}
}
}
开机界面设计:
略:讲图片取模软件时已经做过。。。
菜单界面设计:
lcd中添加如下函数:(注:必须将函数声明添加到lcd.h中)
void show_ssid(uint8_t *s)//将SSID数据显示到屏幕上
{
Gui_DrawFont_GBK16(60, 50, BLACK, YELLOW," ");
Gui_DrawFont_GBK16(60, 50, BLACK, YELLOW, s);
}
void show_rx(uint8_t *s)//将RX数据显示到屏幕上
{
Gui_DrawFont_GBK16(60, 77, BLACK, YELLOW," ");
Gui_DrawFont_GBK16(60, 77, BLACK, YELLOW, s);
}
void show_tx(uint8_t *s)//将TX数据显示到屏幕上
{
Gui_DrawFont_GBK16(60, 104, BLACK, YELLOW," ");
Gui_DrawFont_GBK16(60, 104, BLACK, YELLOW, s);
}
main.c中添加如下代码:
Lcd_Clear_xy(0,0,GREEN);
Lcd_Clear_xy(0,45,YELLOW);
Gui_DrawFont_GBK16(12, 10, RED, GREEN, "LoRa Topology");
Gui_DrawFont_GBK16(40, 26, RED, GREEN, "Master");
Gui_DrawFont_GBK16(12, 50, BLACK, YELLOW, "SSID:");
Gui_DrawFont_GBK16(12, 77, BLACK, YELLOW, "RX:");
Gui_DrawFont_GBK16(12, 104, BLACK, YELLOW, "TX:");
show_ssid("ERROR");
show_rx("ERROR");
show_tx("ERROR");
Lcd_WriteIndex(0x29);//Display on 打开LCD屏幕显示
实验结果:
#include "gpio.h"
#include "stdint.h"
#include "lcd.h"
#include "font_lcd.h"
#include "string.h"
#include "spi.h"
void Delay_ms(int time)
{
int i,j;
for(i=0;i