有图有真相:
如果我的代码没问题的话,应该就是这个速度了,
把原子哥提供的LCD例程进行了些改动,还没完全消化成自己的,
现在只能刷屏和填充矩形,
把一些支持其它我没见过的型号的屏的代码给删了,虽然这些对效率影响不大,
为了提高刷屏速度,我把编译器的优化开到了最大,
还有其它改动,这里简单说明,
void finline LCD_WriteData(u16 data){
WriteDataPort(data);
LCD_WriteTrig();
}
原本有 CS 和 RS 的设置,但是这个函数是在刷屏的循环中的,对刷屏速度的影响至关重要,所以CS把抽出来交给用户处理,而RS默认就是高电平就行了,因为设置LCD的内部index的频率比较小。
//清屏函数
//Color:要清屏的填充 {MOD}
void LCD_ClearScreen(u16 Color)
{
LCD_SetCursor(0x00,0x0000);//设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM
for(u32 index=width*height;index;index--) {
LCD_WriteData(Color);
}
}
这里的
for(u32 index=width*height;index;index--)
递增式循环和递减式循环的效率是不一样的,递减式循环把速度从78帧/s提升到了85帧/s
另外我还把读延时去掉了,不知会不会导致以后出现问题
不过我的LCD屏怪怪的,现在要把开始板以特殊的姿势放着才能正常显示,怀疑是接触不良,又好像是速度太快造成的。。。
while(a8--)
{
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
LCD_WR_DATA(*p++);
}
a8=dis_lenth%16u;
switch(a8)
{
case 15: LCD_WR_DATA(*p++);
case 14: LCD_WR_DATA(*p++);
case 13: LCD_WR_DATA(*p++);
case 12: LCD_WR_DATA(*p++);
case 11: LCD_WR_DATA(*p++);
case 10: LCD_WR_DATA(*p++);
case 9: LCD_WR_DATA(*p++);
case 8: LCD_WR_DATA(*p++);
case 7: LCD_WR_DATA(*p++);
case 6: LCD_WR_DATA(*p++);
case 5: LCD_WR_DATA(*p++);
case 4: LCD_WR_DATA(*p++);
case 3: LCD_WR_DATA(*p++);
case 2: LCD_WR_DATA(*p++);
case 1: LCD_WR_DATA(*p++);
break;
}
这样效率呢?
一周热门 更多>