初中生
最后登录1970-1-1
在线时间 小时
注册时间2019-5-2
|
代码如下
__inline void ILI9806G_Write_Cmd ( uint16_t usCmd )
{
ILI9806G_CS_CLR;//开始片选
ILI9806G_DC_CLR;//写命令
ILI9806G_RD_SET;//禁止读
DATAOUT(usCmd);//输出命令
ILI9806G_WR_CLR;//写入开始
ILI9806G_WR_SET;//写入结束
ILI9806G_CS_SET;//结束片选
}
/**
* @brief 向ILI9806G写入数据
* @param usData :要写入的数据
* @retval 无
*/
__inline void ILI9806G_Write_Data ( uint16_t usData )
{
ILI9806G_CS_CLR;//开始片选
ILI9806G_DC_SET;//写数据
ILI9806G_RD_SET;//禁止读
DATAOUT(usData);//输出数据
ILI9806G_WR_CLR;//写入开始
ILI9806G_WR_SET;//写入结束
ILI9806G_CS_SET;//结束片选
}
/**
* @brief 从ILI9806G读取数据
* @param 无
* @retval 读取到的数据
*/
__inline uint16_t ILI9806G_Read_Data ( void )
{
uint16_t data;
ILI9806G_DATA_PORT->MODER= 0x00000000;//通用输入模式
//ILI9341_DATA_PORT->OTYPER= 0x0000; //推挽输出
ILI9806G_DATA_PORT->OSPEEDR= 0xFFFF; //速度50MHz
ILI9806G_DATA_PORT->PUPDR= 0x55555555;//上拉
ILI9806G_DATA_PORT->ODR= 0X0000; //全部输出0
ILI9806G_DC_SET;
ILI9806G_WR_SET;
ILI9806G_CS_CLR;
//读取数据
ILI9806G_RD_CLR;
data=DATAIN;
ILI9806G_RD_SET;
ILI9806G_CS_SET;
ILI9806G_DATA_PORT->MODER= 0x55555555;//通用输入模式
ILI9806G_DATA_PORT->OTYPER= 0x0000; //推挽输出
ILI9806G_DATA_PORT->OSPEEDR= 0xFFFF; //速度50MHz
ILI9806G_DATA_PORT->PUPDR= 0x55555555;//上拉
ILI9806G_DATA_PORT->ODR= 0XFFFF; //全部输出0
return data;
}
/**
* @brief 用于 ILI9806G 简单延时函数
* @param nCount :延时计数值
* @retval 无
*/
static void ILI9806G_Delay ( __IO uint32_t nCount )
{
for ( ; nCount != 0; nCount -- );
}
/**
* @brief 初始化ILI9806G的IO引脚
* @param 无
* @retval 无
*/
static void ILI9806G_GPIO_Config ( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能FSMC对应相应管脚时钟*/
RCC_AHB1PeriphClockCmd (
/*控制信号*/
ILI9806G_CS_CLK|ILI9806G_DC_CLK|ILI9806G_WR_CLK|
ILI9806G_RD_CLK |ILI9806G_BK_CLK|
/*数据信号*/
ILI9806G_DATA_CLK , ENABLE );
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = ILI9806G_DATA_PIN;
GPIO_Init ( ILI9806G_DATA_PORT, &GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = ILI9806G_RD_PIN;
GPIO_Init (ILI9806G_RD_PORT, & GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = ILI9806G_WR_PIN;
GPIO_Init (ILI9806G_WR_PORT, & GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = ILI9806G_CS_PIN;
GPIO_Init ( ILI9806G_CS_PORT, & GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = ILI9806G_DC_PIN;
GPIO_Init ( ILI9806G_DC_PORT, & GPIO_InitStructure );
/* 配置LCD背光控制管脚BK*/
GPIO_InitStructure.GPIO_Pin = ILI9806G_BK_PIN;
GPIO_Init ( ILI9806G_BK_PORT, &GPIO_InitStructure );
}
**
* @brief ILI9806G初始化函数,如果要用到lcd,一定要调用这个函数
* @param 无
* @retval 无
*/
void ILI9806G_Init ( void )
{
ILI9806G_GPIO_Config ();
ILI9806G_REG_Config ();
//设置默认扫描方向,其中 6 模式为大部分液晶例程的默认显示方向
ILI9806G_GramScan(LCD_SCAN_MODE);
ILI9806G_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); /* 清屏,显示全黑 */
ILI9806G_BackLed_Control ( ENABLE ); //点亮LCD背光灯
}
/**
* @brief ILI9806G背光LED控制
* @param enumState :决定是否使能背光LED
* 该参数为以下值之一:
* @arg ENABLE :使能背光LED
* @arg DISABLE :禁用背光LED
* @retval 无
*/
void ILI9806G_BackLed_Control ( FunctionalState enumState )
{
if ( enumState )
GPIO_ResetBits ( ILI9806G_BK_PORT, ILI9806G_BK_PIN );
else
GPIO_SetBits ( ILI9806G_BK_PORT, ILI9806G_BK_PIN );
}
/******************************* ILI9806G 显示屏8080通讯引脚定义 ***************************/
/******控制信号线******/
//片选
#define ILI9806G_CS_CLK RCC_AHB1Periph_GPIOC
#define ILI9806G_CS_PORT GPIOC
#define ILI9806G_CS_PIN GPIO_Pin_4
//DC引脚
#define ILI9806G_DC_CLK RCC_AHB1Periph_GPIOC
#define ILI9806G_DC_PORT GPIOC
#define ILI9806G_DC_PIN GPIO_Pin_7
//写使能
#define ILI9806G_WR_CLK RCC_AHB1Periph_GPIOC
#define ILI9806G_WR_PORT GPIOC
#define ILI9806G_WR_PIN GPIO_Pin_6
//读使能
#define ILI9806G_RD_CLK RCC_AHB1Periph_GPIOC
#define ILI9806G_RD_PORT GPIOC
#define ILI9806G_RD_PIN GPIO_Pin_5
//背光引脚
#define ILI9806G_BK_CLK RCC_AHB1Periph_GPIOD
#define ILI9806G_BK_PORT GPIOD
#define ILI9806G_BK_PIN GPIO_Pin_2
/********数据信号线***************/
#define ILI9806G_DATA_CLK RCC_AHB1Periph_GPIOE
#define ILI9806G_DATA_PORT GPIOE
#define ILI9806G_DATA_PIN GPIO_Pin_All
/********信号线控制相关的宏***************/
#define ILI9806G_CS_SET GPIO_SetBits(ILI9806G_CS_PORT,ILI9806G_CS_PIN) //片选端口
#define ILI9806G_DC_SET GPIO_SetBits(ILI9806G_DC_PORT,ILI9806G_DC_PIN) //数据/命令
#define ILI9806G_WR_SET GPIO_SetBits(ILI9806G_WR_PORT,ILI9806G_WR_PIN) //写数据
#define ILI9806G_RD_SET GPIO_SetBits(ILI9806G_RD_PORT,ILI9806G_RD_PIN) //读数据
#define ILI9806G_CS_CLR GPIO_ResetBits(ILI9806G_CS_PORT,ILI9806G_CS_PIN) //片选端口
#define ILI9806G_DC_CLR GPIO_ResetBits(ILI9806G_DC_PORT,ILI9806G_DC_PIN) //数据/命令
#define ILI9806G_WR_CLR GPIO_ResetBits(ILI9806G_WR_PORT,ILI9806G_WR_PIN) //写数据
#define ILI9806G_RD_CLR GPIO_ResetBits(ILI9806G_RD_PORT,ILI9806G_RD_PIN) //读数据
//数据线输入输出
#define DATAOUT(x) ILI9806G_DATA_PORT->ODR=x; //数据输出
#define DATAIN ILI9806G_DATA_PORT->IDR; //数据输入
/*************************************** 调试预用 ******************************************/
#define DEBUG_DELAY() ILI9806G_Delay(0x5000)
/***************************** ILI934 显示区域的起始坐标和总行列数 ***************************/
#define ILI9806G_DispWindow_X_Star 0 //起始点的X坐标
#define ILI9806G_DispWindow_Y_Star 0 //起始点的Y坐标
#define ILI9806G_LESS_PIXEL 480 //液晶屏较短方向的像素宽度
#define ILI9806G_MORE_PIXEL 854 //液晶屏较长方向的像素宽度
|
|