初级会员
积分 134
金钱 134
注册时间 2013-10-6
在线时间 15 小时
5 金钱
各位坛友好,又来麻烦大家了,我买了一块ILI9486的液晶屏,采用8080的8位接口通讯,现在出现的问题是花屏,我硬件调试的时候命令数据都是发送正常的,各个控制信号也是正常,下面是我的初始化程序(我用的是GPIOB的高8位)
#include"ili9486.h"
#include"stm32f10x_conf.h"
//外部引脚定义
//背光控制引脚
#define LCD9468_ON GPIO_SetBits(GPIOA,GPIO_Pin_0);
#define LCD9468_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_0);
//片选,低有效
#define LCD9468_Cs_1 GPIO_SetBits(GPIOA,GPIO_Pin_1);
#define LCD9468_Cs_0 GPIO_ResetBits(GPIOA,GPIO_Pin_1);
//数据命令,
#define LCD9468_Set_Rs GPIO_SetBits(GPIOA,GPIO_Pin_2);
#define LCD9468_Clr_Rs GPIO_ResetBits(GPIOA,GPIO_Pin_2);
//写数据 低状态写数据,上升沿ili9486读取数据
#define LCD9468_Set_Wr GPIO_SetBits(GPIOA,GPIO_Pin_3);
#define LCD9468_Clr_Wr GPIO_ResetBits(GPIOA,GPIO_Pin_3);
//读数据,低有效
#define LCD9468_Set_Rd GPIO_SetBits(GPIOA,GPIO_Pin_4);
#define LCD9468_Clr_Rd GPIO_ResetBits(GPIOA,GPIO_Pin_4);
//复位
#define LCD9468_Set_rest GPIO_SetBits(GPIOA,GPIO_Pin_5);
#define LCD9468_Clr_rest GPIO_ResetBits(GPIOA,GPIO_Pin_5);
#define LCD9468_DATAIN GPIO_ReadInputData(GPIOB);
#define LCD9468_DATAOUT(X) GPIO_Write(GPIOB,X);
extern void delay_ms(u32 timer);
void Delay(u32 value)
{
delay_ms(value);
}
void LCD_delay(u32 time)
{
delay_ms(time);
}
//将端口B设置成输出模式
GPIO_InitTypeDef GPIOB_IN;
void SET_GPIOB_OUT()
{
GPIOB_IN.GPIO_Pin=GPIO_Pin_All; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GPIOB_IN.GPIO_Speed=GPIO_Speed_50MHz; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOB_IN.GPIO_Mode=GPIO_Mode_Out_PP; /*!< Specifies the operating mode for the selected pins.
*/
GPIO_Init(GPIOB,&GPIOB_IN);
}
void SET_GPIOIN()
{
GPIOB_IN.GPIO_Pin=GPIO_Pin_All; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GPIOB_IN.GPIO_Speed=GPIO_Speed_50MHz; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOB_IN.GPIO_Mode=GPIO_Mode_IN_FLOATING; /*!< Specifies the operating mode for the selected pins.
*/
GPIO_Init(GPIOB,&GPIOB_IN);
}
void WriteComm(unsigned int i)
{
LCD9468_Cs_0; //CS0=0;
LCD9468_Set_Rd; //RD0=1;
LCD9468_Clr_Rs; //RS=0;
SET_GPIOB_OUT();
LCD9468_Clr_Wr; //WR0=0;
LCD9468_DATAOUT(i<<8); //DBL=i;用B口的高8位
LCD9468_Set_Wr; //WR0=1;
LCD9468_Cs_1; //CS0=1;
}
//写命令参数
void WriteData(unsigned int i)
{
LCD9468_Cs_0; //CS0=0;
LCD9468_Set_Rd; //RD0=1;
LCD9468_Set_Rs; //RS=1;
//DBH=i>>8;
//WR0=0;
//WR0=1;
SET_GPIOB_OUT();
LCD9468_Clr_Wr; //WR0=0;
LCD9468_DATAOUT(i<<8); //DBL=i;
LCD9468_Set_Wr; //WR0=1;
LCD9468_Cs_1; //CS0=1;
}
void WriteDispData(unsigned int data)
{
LCD9468_Cs_0; //CS0=0;
LCD9468_Set_Rd; //RD0=1;
LCD9468_Set_Rs; //RS=1;
SET_GPIOB_OUT();
LCD9468_Clr_Wr; //WR0=0;
LCD9468_DATAOUT(data); //DBL=DataH;写高8位
LCD9468_Set_Wr; //WR0=1;
LCD9468_Clr_Wr; //WR0=0;
LCD9468_DATAOUT(data<<8); //DBL=DataL; 写低8位
LCD9468_Set_Wr; //WR0=1;
LCD9468_Cs_1; //CS0=1;
}
void WriteInitData(unsigned int data)
{
LCD9468_Cs_0; //CS0=0;
LCD9468_Set_Rd; //RD0=1;
LCD9468_Set_Rs; //RS=1;
SET_GPIOB_OUT();
LCD9468_Clr_Wr; //WR0=0;
LCD9468_DATAOUT(data); //DBL=DataH;写高8位
LCD9468_Set_Wr; //WR0=1;
LCD9468_Clr_Wr; //WR0=0;
LCD9468_DATAOUT(data<<8); //DBL=DataL; 写低8位
LCD9468_Set_Wr; //WR0=1;
LCD9468_Cs_1; // CS0=1;
}
void WriteOneDot(unsigned int color)
{
LCD9468_Cs_0; //CS0=0;
LCD9468_Set_Rd; //RD0=1;
LCD9468_Set_Rs; //RS=1;
SET_GPIOB_OUT();
LCD9468_Clr_Wr; //WR0=0;
LCD9468_DATAOUT(color);//DBL=color<<8;
LCD9468_Set_Wr; //WR0=1;
LCD9468_Clr_Wr; //WR0=0;
LCD9468_DATAOUT(color<<8);//DBL=color;
LCD9468_Set_Wr; //WR0=1;
LCD9468_Cs_1; //CS0=1;
}
u16 Read_data(u16 rag)
{
u16 k;
WriteComm(rag);
SET_GPIOIN();
LCD9468_Cs_0;
LCD9468_Set_Wr;
LCD9468_Clr_Rd;
k=GPIO_ReadInputData(GPIOB);
LCD9468_Set_Rd;
LCD9468_Cs_1;
return k;
}
// 用的是GPIO的高8位
void LCD_Init(void)
{
GPIO_InitTypeDef GpioAinit;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);
GpioAinit.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GpioAinit.GPIO_Speed=GPIO_Speed_50MHz; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GpioAinit.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GpioAinit);
LCD9468_Set_rest; //RST=1;
Delay(200);
LCD9468_Clr_rest; //RST=0;
Delay(800);
LCD9468_Set_rest; //RST=1;
Delay(800);
WriteComm(0x00B0);
WriteData(0x0000);
WriteComm(0x0011);
Delay(30);
WriteComm(0x00B3);
WriteData(0x0002);
WriteData(0x0000);
WriteData(0x0000);
WriteData(0x0000);
WriteComm(0x00C0);
WriteData(0x0010);
WriteData(0x003B);
WriteData(0x0000);
WriteData(0x0002);
WriteData(0x0000);
WriteData(0x0001);
WriteData(0x0000);
WriteData(0x0043);
WriteComm(0x00C1);
WriteData(0x0010);
WriteData(0x0010);
WriteData(0x0008);
WriteData(0x0008);
// WriteComm(0x00B6);
// WriteData(0x0000);
// WriteData(0x0062);
// WriteData(0x003B);
WriteComm(0x00C4);
WriteData(0x0011);
WriteData(0x0007);
WriteData(0x0003);
WriteData(0x0003);
WriteComm(0x00C6);
WriteData(0x0000);
WriteComm(0x00C8); //Gamma
WriteData(0x0003);
WriteData(0x0003);
WriteData(0x0013);
WriteData(0x005c);
WriteData(0x0003);
WriteData(0x0007);
WriteData(0x0014);
WriteData(0x0008);
WriteData(0x0000);
WriteData(0x0021);
WriteData(0x0008);
WriteData(0x0014);
WriteData(0x0007);
WriteData(0x0053);
WriteData(0x000c);
WriteData(0x0013);
WriteData(0x0003);
WriteData(0x0003);
WriteData(0x0021);
WriteData(0x0000);
WriteComm(0x0035);
WriteData(0x0000);
WriteComm(0x0036);
WriteData(0x0008);
WriteComm(0x003A);
WriteData(0x0055);
WriteComm(0x0044);
WriteData(0x0000);
WriteData(0x0001);
WriteComm(0x00B6);
WriteData(0x0000);
WriteData(0x0022);
WriteData(0x003B);
WriteComm(0x00D0);
WriteData(0x0007);
WriteData(0x0007);
WriteData(0x001D);
WriteComm(0x00D1);
WriteData(0x0000);
WriteData(0x0003);
WriteData(0x0000);
WriteComm(0x00D2);
WriteData(0x0003);
WriteData(0x0014);
WriteData(0x0004);
WriteComm(0x0029);
Delay(500);
}
void LCD_clear(u16 color)
{
u16 k=0;
WriteComm(0x002);
WriteData(0); // Xstart>>8
WriteData(0); //Xstart&0xff
WriteData(271); //Xend>>8
WriteData(271<<8); //Xend&0xff
WriteComm(0x002b);
WriteData(0); //Ystart>>8
WriteData(0); // Ystart&0xff
WriteData(479); //Yend>>8
WriteData(479<<8); // Yend&0xff
SET_GPIOB_OUT();
WriteComm(0x002c);
for(k=0;k<240*480;k++)
{
LCD9468_DATAOUT(color); // DBL=color>>8;
LCD9468_Clr_Wr; //WR0=0;
LCD9468_Set_Wr; //WR0=1;
LCD9468_DATAOUT(color<<8); //DBL=color;
LCD9468_Clr_Wr; //WR0=0;
LCD9468_Set_Wr; //WR0=1;
}
搞了一周多了,还是这样,看了很多人的初始化函数,也也尝试了横多初始化函数,现在还是这样,真不知道是什么问题,求教啊
我来回答