所使用的LCD为1.8寸128*160的TFT,采用SPI接口驱动,主要引脚有:
RESET:复位,高电平有效
CS:片选,低电平有效
A0:寄存器选择
SDA:数据接收
SCL:SPI总线时钟
LED+,LED-:背光电源
驱动芯片为ILI9163,控制模式为:4线8bit串行总线方式。如下图所示:
每次传输的8bit可以是命令,也可以是数据,通过A0线来选择:A0为低电平,则TB代表命令;A0为高电平,则TB代表数据。
这里用LPC54102的GPIO口模拟出上述SPI时序,驱动TFT屏,硬件接线为:
CS——P0.3
A0——P0.4
SDA——P0.10
SCL——P0.9
主要是改写MCU发送命令和数据的2个基本函数:
void write_command(uint_least8_t addr1)
{
uint_least8_tbit8;
TFT_A0_L;
TFT_CS_L;
for(bit8=0;bit8<8;bit8++)
{
TFT_SCL_L;
if((addr1&0x80)==0x80)
TFT_SDI_H;
else
TFT_SDI_L;
TFT_SCL_H;
addr1=(addr1<<1);
}
TFT_CS_H;
}
void write_para(uint_least8_t para1)
{
uint_least8_tbit8;
TFT_A0_H;
TFT_CS_L;
for(bit8=0;bit8<8;bit8++)
{
TFT_SCL_L;
if((para1&0x80)==0x80)
TFT_SDI_H;
else
TFT_SDI_L;
TFT_SCL_H;
para1=(para1<<1);
}
TFT_CS_H;
}
由于Board_Init()中已经使能了时钟、用Chip_GPIO_Init(LPC_GPIO)初始化了GPIO,所以接下来需要设定IO模式,并控制IO口的输出电平。
void Board_Init(void)
{
/*INMUX and IOCON are used by many apps, enable both INMUX and IOCON clock bitshere. */
Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_INPUTMUX);
Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_IOCON);
/*Sets up DEBUG UART */
DEBUGINIT();
/*Initialize GPIO */
Chip_GPIO_Init(LPC_GPIO);
/*Initialize the LEDs. Be careful with below routine, once it's called some ofthe I/O will be set to output. */
Board_LED_Init();
}
用到下面2个函数:
通过如下的宏定义实现:
在TFT LCD上显示出的彩虹条:
原文地址 http://bbs.eeworld.com.cn/thread-461864-1-1.html