ILI9340 16位总线模式无法显示

2019-07-18 08:29发布

proteus仿真ILI9341液晶屏,但是无法显示。 LCD_Init初始化中清屏程序将屏清为红 {MOD},但是无反应。请各位看看哪里有问题。


void LCD_Init(void)

{
        GPIO_InitTypeDef  GPIO_InitStructure;
            
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE );
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);        //JTAG-DP 失能 + SW-DP使能
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                                            
        GPIO_Write(GPIOA,0XFF);
        
        //LCDBL,RD,WR,RS,CS
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_SetBits(GPIOB, GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_2); //CS RS WR RD
  
//        //LCDRESET
//        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6;
//        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输LCDRESET
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//        GPIO_Init(GPIOB, &GPIO_InitStructure);
//        GPIO_SetBits(GPIOB, GPIO_Pin_6);                                                                                                                             
        
        LCDBKON;//点亮LCD背光


        //***************************RESET LCD Driver******************************
        LCD_RESET_SET;       //reset-->1
        delayms(1);         //Delay 1ms
        LCD_RESET_CLR;       //reset-->0
        delayms(10);        //Delay 10ms
        LCD_RESET_SET;       //reset-->1
        delayms(120);       //Delay 200ms
        //************************Start initial sequence***************************
                                delayms(500);
                                LCD_WR_REG(0x01);
                                delayms(200);
                                
                                LCD_WR_REG(0xCF);  
                                LCD_WR_DATA(0x00);
                                LCD_WR_DATA(0x8B);
                                LCD_WR_DATA(0X30);
                                
                                LCD_WR_REG(0xED);  
                                LCD_WR_DATA(0x67);
                                LCD_WR_DATA(0x03);
                                LCD_WR_DATA(0X12);
                                LCD_WR_DATA(0X81);
                                
                                LCD_WR_REG(0xE8);  
                                LCD_WR_DATA(0x85);
                                LCD_WR_DATA(0x10);
                                LCD_WR_DATA(0x7A);
                                
                                LCD_WR_REG(0xCB);  
                                LCD_WR_DATA(0x39);
                                LCD_WR_DATA(0x2C);
                                LCD_WR_DATA(0x00);
                                LCD_WR_DATA(0x34);
                                LCD_WR_DATA(0x02);
                                
                                LCD_WR_REG(0xF7);  
                                LCD_WR_DATA(0x20);
                                
                                LCD_WR_REG(0xEA);  
                                LCD_WR_DATA(0x00);
                                LCD_WR_DATA(0x00);
                                
                                LCD_WR_REG(0xC0);    //Power control
                                LCD_WR_DATA(0x1B);   //VRH[5:0]
                                
                                LCD_WR_REG(0xC1);    //Power control
                                LCD_WR_DATA(0x10);   //SAP[2:0];BT[3:0]
                                
                                LCD_WR_REG(0xC5);    //VCM control
                                LCD_WR_DATA(0x3F);          //3F
                                LCD_WR_DATA(0x3C);          //3C
                                
                                LCD_WR_REG(0xC7);    //VCM control2
                                LCD_WR_DATA(0XB7);
                                
                                LCD_WR_REG(0x36);    // Memory Access Control
                                LCD_WR_DATA(0x08);
                                
                                LCD_WR_REG(0x3A);   
                                LCD_WR_DATA(0x55);
                                
                                LCD_WR_REG(0xB1);   
                                LCD_WR_DATA(0x00);   
                                LCD_WR_DATA(0x1B);
                                
                                LCD_WR_REG(0xB6);    // Display Function Control
                                LCD_WR_DATA(0x0A);
                                LCD_WR_DATA(0xA2);
                                
                                LCD_WR_REG(0xF2);    // 3Gamma Function Disable
                                LCD_WR_DATA(0x00);
                                
                                LCD_WR_REG(0x26);    //Gamma curve selected
                                LCD_WR_DATA(0x01);
                                
                                LCD_WR_REG(0xE0);    //Set Gamma
                                LCD_WR_DATA(0x0F);
                                LCD_WR_DATA(0x2A);
                                LCD_WR_DATA(0x28);
                                LCD_WR_DATA(0x08);
                                LCD_WR_DATA(0x0E);
                                LCD_WR_DATA(0x08);
                                LCD_WR_DATA(0x54);
                                LCD_WR_DATA(0XA9);
                                LCD_WR_DATA(0x43);
                                LCD_WR_DATA(0x0A);
                                LCD_WR_DATA(0x0F);
                                LCD_WR_DATA(0x00);
                                LCD_WR_DATA(0x00);
                                LCD_WR_DATA(0x00);
                                LCD_WR_DATA(0x00);
                                
                                LCD_WR_REG(0XE1);    //Set Gamma
                                LCD_WR_DATA(0x00);
                                LCD_WR_DATA(0x15);
                                LCD_WR_DATA(0x17);
                                LCD_WR_DATA(0x07);
                                LCD_WR_DATA(0x11);
                                LCD_WR_DATA(0x06);
                                LCD_WR_DATA(0x2B);
                                LCD_WR_DATA(0x56);
                                LCD_WR_DATA(0x3C);
                                LCD_WR_DATA(0x05);
                                LCD_WR_DATA(0x10);
                                LCD_WR_DATA(0x0F);
                                LCD_WR_DATA(0x3F);
                                LCD_WR_DATA(0x3F);
                                LCD_WR_DATA(0x0F);
                                


                                
                                LCD_WR_REG(0x11); //Exit Sleep
                                delayms(120);
                                LCD_WR_REG(0x29); //display on        




        LCD_WR_REG(0x2A);
                        LCD_WR_DATA(0x00);
                        LCD_WR_DATA(0x00);
                        LCD_WR_DATA(0x00);
                        LCD_WR_DATA(0xEF);
        LCD_WR_REG(0x2B);
                        LCD_WR_DATA(0x00);
                        LCD_WR_DATA(0x00);
                        LCD_WR_DATA(0x01);
                        LCD_WR_DATA(0x3F);


//        LCD_WR_REG(0x2C);  //往存储器写数据


        delayms(10);


        LCD_Clear(RED);
}
  
//清屏函数
//Color:要清屏的填充 {MOD}
void LCD_Clear(u16 Color)
{
        u32 index=0;      
//        LCD_SetCursor(0x00,0x0000);//设置光标位置
        LCD_WriteRAM_Prepare();     //开始写入GRAM                  
        for(index=0;index<76800;index++)
        {
                LCD_WR_DATA(Color);   
        }
}  





void LCD_WR_DATA(u16 data)
{
                          LCD_CS_CLR;
                                LCD_RS_SET;                        
                                LCD_RD_SET;
                                
                                DATAOUT(data);
                                LCD_WR_CLR;
                                
                                LCD_WR_SET;

                                LCD_CS_SET;
}
//写寄存器函数
void LCD_WR_REG(u8 data)
{

                                LCD_CS_CLR;
              LCD_RS_CLR;//写地址  
              DATAOUT(data);
        LCD_WR_CLR;         
        LCD_RD_SET;        
        LCD_WR_SET;

        LCD_RS_SET;
        LCD_CS_SET;  
}

QQ截图20190221151748.jpg
ili9340 proteus + Keil.rar 下载积分: 积分 -1 分
1.41 MB, 下载次数: 7, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
471300734
2019-07-18 11:50
问题已解决,proteus 中ili9341 IM0不起作用,虽然连接到高电平,但是模式仍然为8位BUS模式。所以不支持8080 -16BUS模式。程序另一个问题是void LCD_WR_DATA(u16 data)   LCD_WR_REG(u16 data) 中少延时程序,程序改完后完美解决。

一周热门 更多>