关于液晶刷新速度优化方法

  • Post author:
  • Post category:其他




关于液晶刷新速度优化方法

开发环境:keil5

处理器:stm32f103Rct6

打算用f1系列做一个摄像头拍摄的一个功能,但是用原来厂家给的液晶显示底层发现刷新速度实在是太慢了,液晶是240×240像素,RGB565格式显示格式。原来底层显示一幅240×240图像需要1秒多的时间无奈 之下只好修改底层。

源代码如下

void LCD_Writ_Bus(u8 dat) 
{ 
 u8 i;
for(i=0;i<8;i++)
{     
 	LCD_SCLK_Clr();
	if(dat&0x80)
  	{ 
    		LCD_MOSI_Set();
  	}
  	 else
  	{
  		 LCD_MOSI_Clr();
  	}
	LCD_SCLK_Set();
	 dat<<=1; 
}
}

可以看出这是一个将8位数据一位一位写入液晶的底层,这里LCD_SCLK_Clr()和LCD_MOSI_Clr()定义如下图所示,可以看出这里调用了stm32f10x_gpio.h里面的库函数,从而再次调用底层寄存器

在这里插入图片描述

这里可以进行第一步优化修改,我们直接操作寄存器从而避开调用库函数,修改如下

void LCD_Writ_Bus(u8 dat) 
{ 
 u8 i;
 for(i=0;i<8;i++)
 {     
  LCD_GPIO->BRR = SCLK;
  if(dat&0x80)
  {
   LCD_GPIO->BSRR = MOSI;
  }
  else
  {
   LCD_GPIO->BRR = MOSI;
  }
  LCD_GPIO->BSRR = SCLK;
  dat<<=1;
 } 
}

这里的LCD_GPIO、MOSI 和SCLK定义在这

在这里插入图片描述

确定读写端口既可以操作寄存器,优化后测试速度达到每秒两张图片左右。

然后继续思考,是不是已经优化到最佳了吗?答案当然是还没有,这还有一个for循环还有自加呢,方法当然是将for循环八次依次拆开,节省变量自加的时间,和for循环判断小于8的时间。这里有人可能会说,自加时间不多吧,字加一次时间是不多,我们来算一下,我们显示的是240

240像素的图片,一个像素点是16位数据,总共有240

x240x16 = 921600位数据每一位都自加一次,大约92万次,这次数是不是就不一样了?还有判断呢!

现在再次说明一下优化方法,代码如下

// An highlighted block
  LCD_GPIO->BRR = SCLK;
  if(dat&0x80)
  {
   LCD_GPIO->BSRR = MOSI;
  }
  else
  {
   LCD_GPIO->BRR = MOSI;
  }
   LCD_GPIO->BSRR = SCLK;
     if(dat&0x40)
  {
   LCD_GPIO->BSRR = MOSI;
  }
  else
  {
   LCD_GPIO->BRR = MOSI;
  }
  LCD_GPIO->BSRR = SCLK;

因为拆开写比较长这里就列了写两位,具体不想复制就下载一下文件吧

经过测试最终刷新速度可以达到每秒3幅图片左右。

最后结论:为了提升刷新速度,速度虽然快了,但是代码就变复杂了,具体选择哪种,根据实际需求吧,另外还有更好的优化方案欢迎指出,感谢大家观看~



版权声明:本文为qq_38857275原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。