找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1597|回复: 2
打印 上一主题 下一主题
收起左侧

LCD_ShowChar字符显示函数影响系统的响应时间问题

[复制链接]
跳转到指定楼层
楼主
ID:997026 发表于 2022-7-21 22:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hxdby 于 2022-7-21 22:14 编辑

各位好,

我现在调一块3.5寸的TFT LCD,发现厂家提供的 void LCD_ShowChar()这个显示字符串的函数执行效率非常低下,我的程序中一使用这个函数,按键的反应就下降很多,按一下按键,LCD上几乎1s才有反应,只要注释掉这个函数,按键的响应几乎瞬间的,非常快!

这个函数如下:
void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t size,uint8_t mode, uint16_t pcolor, uint16_t bcolor)
{
    uint8_t temp,t1,t;
    uint16_t y0=y;
    uint8_t csize=(size/8+((size%8)?1:0))*(size/2);                //得到字体一个字符对应点阵集所占的字节数
    num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)

    //Address_set(x,y,x+size/2-1,y+size-1); //如果把坐标设置放在这里,不放循环中可以解决响应问题,但是商家给我的程序,这里被注释掉了,不知道为啥?我启用后,发送字符显示乱码------1
    for(t=0; t<csize; t++)
    {
        if(size==24)temp=asc2_2412[num][t];                  //调用1206字体
        else if(size==16)temp=asc2_1608[num][t];           //调用1608字体
         else if(size==38)temp=asc2_38x19[num][t];        //调用3216字体
        else if(size==48)temp=asc2_4824[num][t];        //调用4824字体
        //        else if(size==64)temp=asc2_6432[num][t];        //调用4824字体
        else return;                                                                //没有的字库
        for(t1=0; t1<8; t1++)
        {
            if(temp&0x80)LCD_DrawPoint(x,y,pcolor);  //发现问题在画点函数这里,画点函数带了坐标设置,导致每循环一次就会发一次坐标,而坐标是通过SPI发给LCD,SPI速度不高拖慢整个程序
            else if(mode==0)LCD_DrawPoint(x,y,bcolor);
            temp<<=1;
            y++;
            if(y>=240)return;                //超区域了
            if((y-y0)==size)
            {
                y=y0;
                x++;
                if(x>=320)return;        //超区域了
                break;
            }
        }
    }
}



后来我调了好久,发现并非是这整个函数问题,而是在这个函数中的循环里的画点函数带了坐标设置,每循环一次都会通过SPI发坐标给LCD,严重拖慢了整个系统。而发一次坐标SPI要发8次数据,所以导致系统变慢。
如果把发坐标的部分单独拿出来,放在上面代码都1处,系统就正常了,响应非常快,但是放在1处,字符显示不正常了,这个坐标设置函数Address_set(x,y,x+size/2-1,y+size-1); 也没看出来有什么问题啊,是哪里有问题呢?

各位有没有什么方法不要在循环里发坐标,循环里只发颜色数据,坐标放在外面设置,有什么写法可以分享,我自己在网上查了很多,发现很多都是这种循环带坐标的写法,难道坐标非得放在循环里吗。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:248705 发表于 2022-7-25 09:52 | 只看该作者
跟厂家要屏幕的数据手册,看看屏幕有没有连续写模式
回复

使用道具 举报

板凳
ID:997026 发表于 2022-7-29 00:22 | 只看该作者
祖国的花朵 发表于 2022-7-25 09:52
跟厂家要屏幕的数据手册,看看屏幕有没有连续写模式

这个问题我已经解决了!厂家提供的程序我全部研究过了,基本只能说是能实现最基础的功能,但是要用在项目中是不现实的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表