目录
1.3ALINETEK2.8寸 TFTLCD接口说明(16位80并口)
一、LDE液晶显示原理
1..1TFTLCD驱动原理-TFTLCD简介
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCDSTN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一一个薄膜晶体管( TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。
TFTLCD具有:亮度好、对比度高、层次感强、颜色鲜艳等特点。是目前最主流的LCD显示器。广泛应用于电视、手机、电脑、平板等各种电子产品。
1.2TFTLCD驱动原理模块
- 240*320分辨率
- 16位真彩显示(65536色)
- 自带电阻触摸屏
- 自带背光电路
1.3ALINETEK2.8寸 TFTLCD接口说明(16位80并口)
OLCD CS:LCD片选信号
LCD 写信号
LCD:WR
LCD RD:LCD读信号
DB[17
1]:16 位双向数据
LCD RST
硬复位LCD信号
LCD RS:命令/数据标志
(0:命令.1:数据)
OBLCTR:背光控制信号
T MISO/T MOSI/T PEN/T CS//T CLK. 触摸屏接口
1.4 ILI9341驱动时序
IL19341 驱动时序
下图为:ILI9341 8080并口时序
读 ID 低电平脉宽 (trdl)
读ID 高电平脉宽(trdh)
读 FM 低电平脉宽 (trdlfm)
读 FM 高电平脉宽(trdhfm)
写控制低电平脉宽(twrl)
~写控制高电平脉宽(twrh)
注意:ID指LCD的ID号
FM 指帧缓存,即:GRAM
1.5指令介绍
0XD3 指令
该指令为读 1D4 指令,用于读取LCD 控制器的:ID。因此,同一个代码
可以根据 1D 的不同,执行不同的LCD驱动初始化,以兼容不同的
LCD 屏幕
0x36指令
该指令为存储访问控制指令,可以控制儿19341存储器的读写方向,简单
的说,就是在连续写 GRAM的时候,可以控制GRAM:指针的增长方
向,从而控制显示方式(读GRAM 也是一样)。
0X2A 指令
该指令是列地址设置指令,在从左到右,从上到下的扫描方式(默认)下
面,该指令用于设置横坐标(x坐标)
在默认扫描方式时,该指令用于设置x坐标,该指令带有4个参数,实际上
是2个坐标值:SC和EC,即列地址的起始值和结束值,SC必须小于等
于EC:且0≤SC/EC≤239。一般在设置x坐标的时候,我们只需要带2
个参数即可
也就是设置 :SC即可,因为如果EC没有变化:我们只需要设
置一次即可:(在初始化儿19341的时候设置),从而提高速度。
0X2B 指令
该指令是页地址设置指令,在从左到右,从上到下的扫描方式(默认)下
面,该指令用于设置纵坐标(y坐标)
在默认扫描方式时,该指令用于设置,坐标,该指令带有4个参数,实际上
是2个坐标值:SP和EP,即页地址的起始值和结束值:SP必须小手等
于EP:且O≤SP/EP≤319。一般在设置y坐标的时候,我们需要带2
个参数即可,也就是设置SP 即可,因为如果EP没有变化,我们只需要设
置一次即可(在初始化I19341的时候设置),从而提高速度
0X2C指令
该指令是写 GRAM指令,在发送该指令之后,我们便可以往LCD的
GRAM 里面写入颜色数据了,该指令支持连续写(地址自动递增)
在收到指令 0X2℃之后,数据有效位宽变为16位、我们可以连续写入LCD
GRAM 值:而 GRAM 的地址将根据 MY/MX/MV 设置的扫描方向进行自增。
例如:假设设置的是从左到右,从上到下的扫描方式,那么设置好起始坐标
(通过 SC:SP设置)后,每写入一个颜色值:GRAM:地址将会自动自增
1(SC++
如果碰到 EC:则回到SC:同时SP++:一直到坐标:
EC:EP结束,其间无需再次设置的坐标,从而大大提高写入速度。
0X2E 指令
该指令是读 GRAM 指令,用于读取儿19341的显存(GRAM),同
0X2C指令,该指令支持连续读(地址自动递增)
IL19341在收到该指令后,第一次输出的是 dummy 数据(无效)
第三次
开始,读取到的才是有效的 GRAM 数据(从坐标:SC,SP开始)
,输出
规律为:每个颜色分量占8个位,一次输出2个颜色分量。比如:第一次输
出是 R1G1,随后的规律为:
B1R2>G2B2>R3G3>B3R4>G4B4>R5G5..以此类推
二、代码介绍
2.1屏幕初始化函数
void LCD_csh(void)
{
LCD_Init();
LCD_LayerInit();
LTDC_Cmd(ENABLE);
LCD_SetLayer(LCD_BACKGROUND_LAYER);
//清楚屏幕,并用黑色填充
LCD_Clear(LCD_COLOR_BLACK);
LCD_SetLayer(LCD_FOREGROUND_LAYER);
LCD_SetTransparency(0xFF);
//清楚屏幕,并用黑色填充
LCD_Clear(LCD_COLOR_BLACK);
//设置字体颜色及字体背景颜色;
LCD_SetColors(LCD_COLOR_WHITE,LCD_COLOR_BLACK);
//选择字体
LCD_SetFont(&Font16x24);
}
2.2显示内容函数
void ShowFont(void)
{
LCD_DisplayStringLineEx(65,70,48,48,"姓名",0); //在坐标点(210,220)显示“匠心柳职”四个中文字体
LCD_DisplayStringLineEx(215,70,48,48,"XXX",0);
LCD_DisplayStringLineEx(370,70,48,48,"XXX",0);
LCD_DisplayStringLineEx(65,140,48,48,"性别",0);
LCD_DisplayStringLineEx(325,140,48,48,"男",0);
LCD_DisplayStringLineEx(65,210,48,48,"专业",0);
LCD_DisplayStringLineEx(225,210,48,48,"物联网应用技术",0);
LCD_DisplayStringLineEx(65,280,48,48,"学号",0);
LCD_DisplayStringLineEx(65,350,48,48,"学号2",0);
LCD_DisplayStringLineEx(245,280,48,48,"XXXXXXXXXXX",0);
LCD_DisplayStringLineEx(245,355,48,48,"XXXXXXXXXXX",0);
LCD_DrawLine(50,120,530,LCD_DIR_HORIZONTAL);
LCD_DrawLine(50,190,530,LCD_DIR_HORIZONTAL);
LCD_DrawLine(50,260,530,LCD_DIR_HORIZONTAL);
LCD_DrawLine(50,330,530,LCD_DIR_HORIZONTAL);
LCD_DrawRect(50,50,530,400);
LCD_DrawRect(200,50,380,400);
}
2.3延时函数
#include "delay.h"
__IO int TimingDelay = 0;
void TimingDelay_Decrement(void)
{
if(TimingDelay !=0)
TimingDelay--;
}
void delay10_us(__IO int ms)
{
TimingDelay = ms;
while(TimingDelay !=0);
}
void delay_ms(__IO int ms)
{
delay10_us(ms*100);
}
void delay_init(void)
{
//设置每10us中断
SysTick_Config(SystemCoreClock/100000);
}
2.4LED函数
#include "led.h"
void LED_init(void)
{
GPIO_InitTypeDef gp_info;
//点灯
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//时钟初始化
gp_info.GPIO_Mode = GPIO_Mode_OUT;
gp_info.GPIO_OType = GPIO_OType_PP;
gp_info.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
gp_info.GPIO_PuPd = GPIO_PuPd_UP;
gp_info.GPIO_Speed = GPIO_Low_Speed;
GPIO_Init(GPIOH,&gp_info);//配置IO
//灯泡输出低电平
GPIO_SetBits(GPIOH,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);
}
void LED_Red_Ctrl(int state)
{
if(state == 1)
{
GPIO_ResetBits(GPIOH,LED_RED);
}
else
{
GPIO_SetBits(GPIOH,LED_RED);
}
}
void LED_green_Ctrl(int state)
{
if(state == 1)
{
GPIO_ResetBits(GPIOH,LED_GREEN);
}
else
{
GPIO_SetBits(GPIOH,LED_GREEN);
}
}
void LED_blue_Ctrl(int state)
{
if(state == 1)
{
GPIO_ResetBits(GPIOH,LED_BLUE);
}
else
{
GPIO_SetBits(GPIOH,LED_BLUE);
}
}