ILI9341驱动的LCD屏刷屏很慢要什么解决?

2019-07-14 19:02发布

第一次用彩屏,用IO口模拟16位的8080时序。写了个清屏函数测试下,差不多300ms这样才刷完一次。不是说16位并口速度很快吗??网上有人说用SPI都能30帧/s怎么做到的???
还有那个时序函数也有点问题,为什么那些例程里,放上数据后都不需要延时,我这个没延时就出问题了???

  1. void LCD_Clear(u16 color)//填充的颜 {MOD}
  2. {
  3.         u32 i;
  4.         
  5.         LCD_WR_CMD(LCD_CMD_COLADDR);//设置列地址
  6.         LCD_WR_DAT(0x00);       //列开始地址0(0x0000),先写高8位
  7.         LCD_WR_DAT(0x00);                //后写低8位
  8.         LCD_WR_DAT(0x00);                //列结束地址239(0x00ef),先写高8位
  9.         LCD_WR_DAT(0xef);                //后写低8位
  10.         
  11.         LCD_WR_CMD(LCD_CMD_ROWADDR);//设置行地址
  12.         LCD_WR_DAT(0x00);       //行开始地址0(0x0000),先写高8位
  13.         LCD_WR_DAT(0x00);                //后写低8位
  14.         LCD_WR_DAT(0x01);                //行结束地址319(0x013f),先写高8位
  15.         LCD_WR_DAT(0x3f);                //后写低8位
  16.         
  17.         LCD_WR_CMD(LCD_CMD_GRAM);//开始写显示数据
  18.         
  19.         for(i=0;i<76800;i++) LCD_WR_DAT(color);
复制代码





补充内容 (2018-1-15 12:27):
/*------- 写命令时序 ----------*/
void LCD_WR_CMD(unsigned short dat)
{
        LCD_CS_0;//片选拉低
        LCD_RS_0;//RS为0是写命令
        LCD_WR_0;//写操作,先拉低以便产生上升沿
        LCD_RD_1;//写操作时,RD要拉高
       
        DATAOUT(dat)//往数据口放数据
       
        delay_ns(1);//延时,不然会白屏或花屏
       
        LCD_WR_1;//拉高产生上升沿
        LCD_CS_1;//片选拉高
}

/*------- 写数据时序 --------*/
void LCD_WR_DAT(unsigned short dat)
{
        LCD_CS_0;
        LCD_RS_1;//RS为1是写数据
        LCD_WR_0;//写操作,先拉低以便产生上升沿
        LCD_RD_1;//写操作时,RD要拉高
       
        DATAOUT(dat)
       
        delay_ns(1);//延时,不然会白屏或花屏
       
        LCD_WR_1;
        LCD_CS_1;
}

/*-------- 读数据时序 -----------*/
unsigned short LCD_RD_DAT(void)
{
        u16 dat = 0;
        Input_mode();//IO口模式设置为输入模式以便接收数据
       
        LCD_CS_0;
        LCD_RS_1;//数据
        LCD_WR_1;//读操作时,WR要拉高
        LCD_RD_0;//读操作,先拉低以便产生上升沿
        delay_us(5);
       
        dat = DATAIN//取出IDR里的数据
       
       
        LCD_RD_1;
        LCD_CS_1;
       
        Output_mode();//IO口模式换回输出模式
       
        return dat;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
feier567
1楼-- · 2019-07-16 12:51
人中狼 发表于 2018-1-30 20:09
不知道你的程序改了没有,不过下面的代码应该是8位的,16位的接口,数据不需要写两次
LCD_WR_CMD(LCD_CMD_COLADDR);//设置列地址
        LCD_WR_DAT(0x00);       //列开始地址0(0x0000),先写高8位

不是吧?彩屏的数据手册上说了每个16位地址要分两次写入,先写高8位再写低8位。而颜 {MOD}数据才是16位整个写入。 111111111111111111.png
22222222222222222222.png
那个所谓的高8位低8位只是对液晶的寄存器而言的,和单片机IO口的8位16位没关系吧,
人中狼
2楼-- · 2019-07-16 15:39
 精彩回答 2  元偷偷看……
feier567
3楼-- · 2019-07-16 17:53
人中狼 发表于 2018-1-30 22:12
不好意思,那部分我没注意看,9341的基础控制方面我是直接从例程修改过来的,我的写命令和写数据部分直接贴给你,这部分代码里我的都没有延时,所以你可能需要查一下端口操作部分的程序,16位端口我用的是C端口
void TFT_9341_Write_data(u16 TFT_9341_DATA)
{

写时序没问题的了。。
花屏感觉是并口线信号干扰的问题,我用杜邦线连接的,有时候动一下线就正常,有时候就花屏,已经用临时的办法解决了,到时候用FSMC看看还花不花屏。
一般IO模拟时序的刷屏帧率有多少,我用定时器测了下有14-18帧正常吧?
idianze
4楼-- · 2019-07-16 17:57
我只是路过打酱油的,嘿嘿

一周热门 更多>