Stm32的TFT LCD显示器控制学习笔记
(1)stm32与ILI9320芯片管脚的初始化。
void LCD_Init(void); /*初始化LCD,也就是初始化LCD控制器ILI9320芯片与stm32控制器的管脚连接配置*/其中包括CS:TFTLCD片选信号,WR:向TFTLCD写入信号,RD:从TFTLCD读取信号,DB(15--0):16位双向数据线,RST:硬复位TFTLCD,RS:命令/数据标志(0 读写命令;1 读写数据),TFT模块有个控制器,名为ILI9320,该控制器自带显存,其显存总大小为172820,模块数据线与显存的对应关系位565方式
SGRAM (Synchronous Graphics Random-Access Memory),同步图形随机存储器,是一种专为显卡设计的显存、一种图形读写能力较强的显存,由SDRAM改良而成。SGRAM读写数据时不是一一读取,而是以“块”(Block)为单位,从而减少了内存整体读写的次数,提高了图形控制器的效率。同SDRAM一样,SGRAM也分普通SGRAM与DDR SGRAM两种。
R0,这个命令有两个功能,如果对它写,则最低位位OSC,用于开启或关闭振荡器,而如果对它读,返回控制器型号。我们知道了控制器型号,可以针对不同型号的控制器,进行不同对的初始化。
R3,入口模式命令。重点关注I/D0,I/D1,AM这三个位,因为这3个位控制了屏幕的显示方向。AM:控制GRAM更新方向,当AM=0的时候,地址以行方向更新,当为1的时候,地址以列方向更新。I/D[1:0]:当更新了一个数据之后,根据这两个位的设置来控制地址计数器自动增加/减少1,其关系图如下
R7,显示控制命令。该命令CL位用来控制是8位彩色,还是26万色。为0是26万色,为1时八位色。D1,D0,BASEE这三个位用来控制显示开关与否的。
当全部置1的时候开启显示,全0是关闭。我们一般通过该命令的设置来开启或关闭显示器,以降低功耗。
R22,(读/写)数据(到/从)GRAM。
R32,R33,设置GRAM的行地址和列地址。R32用于设置列地址(X坐标,0~239),R33用于设置行地址(Y坐标,0~319)。当我们要在某个指定点写入一个颜色的时候,先通过这两个命令设置到改点,然后写入颜色值就可以了。
R34,写数据到GRAM命令,当写入了这个命令之后,地址计数器才会自动的增加和减少。
R80~R83,行列GRAM地址位置设置。这几个命令用于设定你显示区域的大小,我们整个屏的大小240*320, 但是有时候我们只需要在其中一部分区域写入数据,如果用先写坐标,后写数据这样的方式来实现,则速度大打折扣。
此时我们可以通过这几个命令,在其中开辟一个区域,然后不停地丢数据,地址计数器就会根据R3的设置自动增加/减小,这样就不需要频繁的写地址了,大大提高了刷新的速度。
(2)具体TFTLCD模块功能程序
显示屏宽度参数定义
#define LCD_W 240
#define LCD_H 320
#define LCD_LED PCout()//LCD背光
#define LCD_CS PCout() //片选端口
#define LCD_RS PCout() //数据/命令
#define LCD_WR PCout() //写数据
#define LCD_RD PCout() //读数据
A. 写寄存器
首先根据英文版的ILI9320 datasheet 描述的关于写寄存器控制管脚的主要配置。下图所示:
图:写寄存器波形图
voidLCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)
{
/* Write 16-bit Index, thenWrite Reg */
ClrCs //片选复位
ClrRs //选择命令
ClrWr //写数据复位
LCD_Write(LCD_Reg); //写入操作指令代码
SetWr //写数据置位
/* 写16位的数据到指定寄存器*/
SetRs
ClrWr
LCD_Write(LCD_RegValue); //写数据
SetWr
SetCs
}
B. 读寄存器
图:读寄存器波形图
u16 LCD_ReadReg(u8 LCD_Reg)
{
u16data;
ClrCs
ClrRs
ClrWr
LCD_Write(LCD_Reg);
SetWr
SetRs
ClrRd
SetRd
data= LCD_Read();
SetCs
return data;
}
C. 写GRAM
图:写GRAM波形图
/*读GRAM准备过程*/
void LCD_WriteRAM_Prepare(void)
{
/*Write 16-bit Index, then Write Reg */
ClrCs
ClrRs
ClrWr
LCD_Write(0x22);
SetWr
SetCs
}
/*读GRAM*/
void LCD_WriteRAM(u16 RGB_Code)
{
/*Write 16-bit Index, then Write Reg */
ClrCs
SetRs
ClrWr
LCD_Write(RGB_Code);
SetWr
SetCs
}
D. 读GRAM
图:读GRAM波形图
u16 LCD_ReadRAM(void)
{
u16dummy;
u16data;
LCD_WriteRAM_Prepare();
LCD_DB_AS_InPut(); //将DB端口设置为输入模式
dummy= LCD_ReadSta();
dummy++;
data= LCD_ReadSta();
LCD_DB_AS_OutPut();
return data;
}
Stm32TFTLCD显示器控 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)