proteus论坛|仿真论坛
直播中

471300734

12年用户 51经验值
擅长:嵌入式技术
私信 关注
[问答]

ILI9340 16位总线模式无法显示

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


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:要清屏的填充色
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;  
}

`
ili9340 proteus + Keil.rar (1.41 MB)
(下载次数: 82, 2019-2-21 15:16 上传)
QQ截图20190221151748.jpg

回帖(3)

471300734

2019-2-22 15:57:03
问题已解决,proteus 中ili9341 IM0不起作用,虽然连接到高电平,但是模式仍然为8位BUS模式。所以不支持8080 -16BUS模式。程序另一个问题是void LCD_WR_DATA(u16 data)   LCD_WR_REG(u16 data) 中少延时程序,程序改完后完美解决。
2 1 举报
  • 邓海星: IM0不起作用,请问是在哪看到的呢?
  • 471300734 回复 邓海星: proteus仿真模型中IM0不起作用。我自己测试的。连和不连跑一模一样的8位程序都有效。所以得出结论不起作用。如果你测出来起作用,可以告诉我怎么配置的,有可能是我自己配置的问题。

李勇俊

2019-2-21 15:22:22

最佳答案

感觉是连线的问题
1 1 举报

小陈888

2022-7-17 23:18:48
驱动lc中的lmo-lm4都是有模式选择的。你的产品要求用16位的就选择16位相应的接脚模式。这个是不会错的因为lc都是经过实验才会大量量产的!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分