/*
*********************************************************************************************************
*
* 模块名称 : TFT液晶显示器驱动模块
* 文件名称 : LCD_ILI9488.c
* 版 本 : V1.0
* 说 明 : ILI9488 显示器分辨率为 480 * 320, 3.5寸普通比例4:3
* 修改记录 :
* 版本号 日期 作者 说明
* v1.0 2014-07-26 armfly 首版
*
* Copyright (C), 2014-2015, 安富莱电子 www.armfly.com
*
*********************************************************************************************************
*/
#include "bsp.h"
#include "fonts.h"
#define ILI9488_BASE ((uint32_t)(0x6C000000 | 0x00000000))
#define ILI9488_REG *(__IO uint16_t *)(ILI9488_BASE)
#define ILI9488_RAM *(__IO uint16_t *)(ILI9488_BASE + (1 << (18 + 1))) /* FSMC 16位总线模式下,FSMC_A18口线对应物理地址A19 */
static __IO uint8_t s_RGBChgEn = 0; /* RGB转换使能, 4001屏写显存后读会的RGB格式和写入的不同 */
static void Init_9488(void);
static void ILI9488_SetDispWin(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth);
static void ILI9488_QuitWinMode(void);
static void ILI9488_SetCursor(uint16_t _usX, uint16_t _usY);
static void ILI9488_WriteCmd(uint8_t _ucCmd);
static void ILI9488_WriteParam(uint8_t _ucParam);
/*
*********************************************************************************************************
* 函 数 名: ILI9488_InitHard
* 功能说明: 初始化LCD
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void ILI9488_InitHard(void)
{
uint32_t id;
id = ILI9488_ReadID();
if (id == 0x548066)
{
Init_9488(); /* 初始化5420和4001屏硬件 */
//ILI9488_WriteCmd(0x23);
//ILI9488_WriteCmd(0x22);
s_RGBChgEn = 0;
ILI9488_PutPixel(1,1, 0x12);
g_ChipID = ILI9488_GetPixel(1,1);
ILI9488_PutPixel(1,1, 0x34);
g_ChipID = ILI9488_GetPixel(1,1);
ILI9488_PutPixel(1,1, 0x56);
g_ChipID = ILI9488_GetPixel(1,1);
g_ChipID = IC_9488;
}
}
/*
*********************************************************************************************************
* 函 数 名: ILI9488_SetDirection
* 功能说明: 设置显示方向。
* 形 参: _ucDir : 显示方向代码 0 横屏正常, 1=横屏180度翻转, 2=竖屏, 3=竖屏180度翻转
* 返 回 值: 无
*********************************************************************************************************
*/
void ILI9488_SetDirection(uint8_t _ucDir)
{
/*
Memory Access Control (36h)
This command defines read/write scanning direction of the frame memory.
These 3 bits control the direction from the MPU to memory write/read.
Bit Symbol Name Description
D7 MY Row Address Order
D6 MX Column Address Order
D5 MV Row/Column Exchange
D4 ML Vertical Refresh Order LCD vertical refresh direction control. 、
D3 BGR RGB-BGR Order Color selector switch control
(0 = RGB color filter panel, 1 = BGR color filter panel )
D2 MH Horizontal Refresh ORDER LCD horizontal refreshing direction control.
D1 X Reserved Reserved
D0 X Reserved Reserved
*/
ILI9488_WriteCmd(0x36);
/* 0 表示竖屏(排线在下),1表示竖屏(排线在上), 2表示横屏(排线在左边) 3表示横屏 (排线在右边) */
if (_ucDir == 0)
{
ILI9488_WriteParam(0xA8); /* 横屏(排线在左边) */
g_LcdHeight = 320;
g_LcdWidth = 480;
}
else if (_ucDir == 1)
{
ILI9488_WriteParam(0x68); /* 横屏 (排线在右边) */
g_LcdHeight = 320;
g_LcdWidth = 480;
}
else if (_ucDir == 2)
{
ILI9488_WriteParam(0xC8); /* 竖屏(排线在上) */
g_LcdHeight = 480;
g_LcdWidth = 320;
}
else if (_ucDir == 3)
{
ILI9488_WriteParam(0x08); /* 竖屏(排线在下) */
g_LcdHeight = 480;
g_LcdWidth = 320;
}
}
/*
*********************************************************************************************************
* 函 数 名: Init_9488
* 功能说明: 初始化ILI9488驱动器
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
static void Init_9488(void)
{
/* 初始化LCD,写LCD寄存器进行配置 */
#if 0
// VCI=2.8V
//************* Reset LCD Driver ****************//
LCD_nRESET = 1;
Delayms(1); // Delay 1ms
LCD_nRESET = 0;
Delayms(10); // Delay 10ms // This delay time is necessary
LCD_nRESET = 1;
Delayms(120); // Delay 100 ms
#endif
//************* Start Initial Sequence **********//
/* Adjust Control 3 (F7h) */
ILI9488_WriteCmd(0XF7);
ILI9488_WriteParam(0xA9);
ILI9488_WriteParam(0x51);
ILI9488_WriteParam(0x2C);
ILI9488_WriteParam(0x82); /* DSI write DCS command, use loose packet RGB 666 */
/* Power Control 1 (C0h) */
ILI9488_WriteCmd(0xC0);
ILI9488_WriteParam(0x11);
ILI9488_WriteParam(0x09);
/* Power Control 2 (C1h) */
ILI9488_WriteCmd(0xC1);
ILI9488_WriteParam(0x41);
/* VCOM Control (C5h) */
ILI9488_WriteCmd(0XC5);
ILI9488_WriteParam(0x00);
ILI9488_WriteParam(0x0A);
ILI9488_WriteParam(0x80);
/* Frame Rate Control (In Normal Mode/Full Colors) (B1h) */
ILI9488_WriteCmd(0xB1);
ILI9488_WriteParam(0xB0);
ILI9488_WriteParam(0x11);
/* Display Inversion Control (B4h) */
ILI9488_WriteCmd(0xB4);
ILI9488_WriteParam(0x02);
/* Display Function Control (B6h) */
ILI9488_WriteCmd(0xB6);
ILI9488_WriteParam(0x02);
ILI9488_WriteParam(0x22);
/* Entry Mode Set (B7h) */
ILI9488_WriteCmd(0xB7);
ILI9488_WriteParam(0xc6);
/* HS Lanes Control (BEh) */
ILI9488_WriteCmd(0xBE);
ILI9488_WriteParam(0x00);
ILI9488_WriteParam(0x04);
/* Set Image Function (E9h) */
ILI9488_WriteCmd(0xE9);
ILI9488_WriteParam(0x00);
ILI9488_SetDirection(0); /* 横屏(排线在左边) */
/* Interface Pixel Format (3Ah) */
ILI9488_WriteCmd(0x3A);
ILI9488_WriteParam(0x55); /* 0x55 : 16 bits/pixel */
/* PGAMCTRL (Positive Gamma Control) (E0h) */
ILI9488_WriteCmd(0xE0);
ILI9488_WriteParam(0x00);
ILI9488_WriteParam(0x07);
ILI9488_WriteParam(0x10);
ILI9488_WriteParam(0x09);
ILI9488_WriteParam(0x17);
ILI9488_WriteParam(0x0B);
ILI9488_WriteParam(0x41);
ILI9488_WriteParam(0x89);
ILI9488_WriteParam(0x4B);
ILI9488_WriteParam(0x0A);
ILI9488_WriteParam(0x0C);
ILI9488_WriteParam(0x0E);
ILI9488_WriteParam(0x18);
ILI9488_WriteParam(0x1B);
ILI9488_WriteParam(0x0F);
/* NGAMCTRL (Negative Gamma Control) (E1h) */
ILI9488_WriteCmd(0XE1);
ILI9488_WriteParam(0x00);
ILI9488_WriteParam(0x17);
ILI9488_WriteParam(0x1A);
ILI9488_WriteParam(0x04);
ILI9488_WriteParam(0x0E);
ILI9488_WriteParam(0x06);
ILI9488_WriteParam(0x2F);
ILI9488_WriteParam(0x45);
ILI9488_WriteParam(0x43);
ILI9488_WriteParam(0x02);
ILI9488_WriteParam(0x0A);
ILI9488_WriteParam(0x09);
ILI9488_WriteParam(0x32);
ILI9488_WriteParam(0x36);
ILI9488_WriteParam(0x0F);
/* Sleep Out (11h */
ILI9488_WriteCmd(0x11);
bsp_DelayMS(120);
ILI9488_WriteCmd(0x29); /* Display ON (29h) */
#if 1
/* 设置显示窗口 */
ILI9488_SetDispWin(0, 0, g_LcdHeight, g_LcdWidth);
#endif
}
/*
*********************************************************************************************************
* 函 数 名: ILI9488_WriteCmd
* 功能说明: 向LCD控制器芯片发送命令
* 形 参: _ucCmd : 命令代码
* 返 回 值: 无
*********************************************************************************************************
*/
static void ILI9488_WriteCmd(uint8_t _ucCmd)
{
ILI9488_REG = _ucCmd; /* 发送CMD */
}
/*
*********************************************************************************************************
* 函 数 名: ILI9488_WriteParam
* 功能说明: 向LCD控制器芯片发送参数(data)
* 形 参: _ucParam : 参数数据
* 返 回 值: 无
*********************************************************************************************************
*/
static void ILI9488_WriteParam(uint8_t _ucParam)
{
ILI9488_RAM = _ucParam;
}
/*
***************************************************************
评论5