lcd显示错位/异常/花屏,一次写入整张图片显示会异常解决办法

适配lcd屏幕后发现个奇怪的bug,那就是,仅显示<4/5width*length的图像或者任何内容都不会有问题,但当显示整张图片时,就会出现最后1/5图片会重复显示前1/5内容而不是应当显示的内容,如图所示

全部显示
原图
实际显示效果
然后就开始着手寻找问题出在哪里,这里尝试了只显示上半部分。
在这里插入图片描述
请添加图片描述
只显示下半部分
在这里插入图片描述
请添加图片描述
都能正常显示,看来数据没问题,指令也没问题,就在思考是不是数据传输过快了,屏幕处理不过来?
然后试了简单粗暴的慢速加载
在这里插入图片描述
结果问题依旧,看来不是速率的原因。
那么就猜测可能是一次指令不可同时写入太多的原因,这里就将显示图片函数切割为两次指令分步显示

/******************************************************************************
      函数说明:显示图片
      入口数据:x,y起点坐标
                length 图片长度
                width  图片宽度
                pic[]  图片数组
      返回值:  无
******************************************************************************/
void LCD_ShowPicture(uint16_t x, uint16_t y, uint16_t length, uint16_t width, const uint8_t pic[])
{
    if(length * width >= LCD_W * LCD_H / 2)
    {
        Lcd_ShowPicture_lite(x, y, length, width / 2, pic);
        Lcd_ShowPicture_lite(x, y + width / 2, length, width / 2, pic + length * width);
    }
    else
    {
        Lcd_ShowPicture_lite(x, y, length, width, pic);
    }
}
void Lcd_ShowPicture_lite(uint16_t x, uint16_t y, uint16_t length, uint16_t width, const uint8_t pic[])
{
    uint16_t num = 0;
    uint16_t i, j, k = 0;
    LCD_Address_Set(x, y, x + length - 1, y + width - 1);
    for(i = 0; i < length; i++)
    {
        for(j = 0; j < width; j++)
        {
            LCD_WR_DATA8(pic[k * 2]);
            LCD_WR_DATA8(pic[k * 2 + 1]);
            k++;
        }
    }
}


将原来的LCD_ShowPicture()改名为Lcd_ShowPicture_lite(),新增一个判断并分割步骤的LCD_ShowPicture(),完美解决问题,如果遇到类似的问题可以尝试一下分两步、四步等尝试尝试,对于lcd运作原理其实不太清楚,如果有知道这个具体原因的欢迎讨论
在这里插入图片描述
请添加图片描述

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值