0.99寸TFT圆屏 驱动程序更新

目录

前言

一、驱动问题简析

二、驱动程序解析

1、LCD_Address_Set函数

2、LCD_Init函数

①复位

②背光

③LCD显示方向

 ④然后就是初始化各种参数了

⑤显示开启

三、驱动程序更新

总结


前言

        上几篇介绍 STM32F103RCT6+0.99寸TFT圆屏 SPI显示 的各个方法,使用的屏是 黄保凯中景园0.99寸TFT LCD彩屏高清IPS显示屏液晶屏GC9107圆屏 ,2025年4月份购买的这个屏,显示正常,就是4月份后买的屏,有一大半屏显示出现很多彩点,一小部分显示正常。一开始以为是发送数据过快导致的,用软件SPI来运行,还是有很多彩点,然后就怀疑是不是屏坏了,拿那些显示出现彩点的屏寄给商家,程序也发给商家,商家处理了几天,才告知驱动程序已经更新了,之前的是旧的;关键是4月份之前买的屏显示都问题,估计是商家4月份后才更新了驱动芯片和驱动程序。

        如果你发现买的屏是新版屏且用旧驱动显示有彩点,那就可以看这篇文章,采用新驱动来显示能够解决彩点问题,不知道商家还会不会更新驱动芯片和驱动程序,如果以后你发现用这个新驱动显示还是有彩点,那就说明商家已经更新了驱动芯片和驱动程序,可以直接问商家或找商家要。


一、驱动问题简析

        4月份之后生产的屏幕,有一小部分屏幕支持旧驱动,大部分屏幕不支持,不支持旧驱动的屏,可以显示图片,但是会有很多彩点,如1图:

图1

        不知道4月份之前的屏幕支不支持新驱动,没试过,烧录新驱动到新屏中,就会消除绝大部分彩点,显示复杂的图片时,仔细一看还是会有一点点的彩点,想要完全没有彩点,就得改驱动,如果不知道怎么改,可以直接交给厂家改,毕竟术业有专攻。彩点消除如图2:

图2


二、驱动程序解析

那变更的内容不多,主要是集中在初始化参数那里,其他都不变,也就是只有lcd_init.c那里变更。

1、LCD_Address_Set函数

旧版本

	if(USE_HORIZONTAL==0)
	{
		LCD_WR_REG(0x2a);//列地址设置
		LCD_WR_DATA(x1);//列起始地址
		LCD_WR_DATA(x2);//列结束地址
		LCD_WR_REG(0x2b);//行地址设置
		LCD_WR_DATA(y1+45);//行起始地址
		LCD_WR_DATA(y2+45);//行结束地址
		LCD_WR_REG(0x2c);//储存器写
	}

设置横屏显示是在行地址设置那里加45,而新版本是加13

新版本

    if(USE_HORIZONTAL==0)
    {
        LCD_WR_REG(0x2a);//列地址设置
        LCD_WR_DATA(x1);
        LCD_WR_DATA(x2);
        LCD_WR_REG(0x2b);//行地址设置
        LCD_WR_DATA(y1+13);
        LCD_WR_DATA(y2+13);
        LCD_WR_REG(0x2c);//储存器写
    }

其他横屏竖屏、镜像等也是这样,只是加的数值不一样

2、LCD_Init函数

这里更改的内容就可多了,改了一大半。

①复位

旧版本

	LCD_GPIO_Init();//初始化GPIO
	
	LCD_RES_R_Clr();//复位
	delay_ms(100);
	LCD_RES_R_Set();//取消复位
	delay_ms(100);

复位方式不一样了,咱也不懂能不能换成旧版本的复位方式,毕竟咱也不是这方面的行家,大家可以去尝试一下。

新版本

    LCD_GPIO_Init();//初始化GPIO
    LCD_RES_Set();
    delay_ms(50);
    LCD_RES_Clr();
    delay_ms(50);
    LCD_RES_Set();
    delay_ms(120);
②背光

        旧版本需要设置开启背光,而新版本则取消了,问了商家,商家说背光是默认打开的。

背光跟液晶ic两个是独立的。我之前设置过旧版本屏,是默认关闭的,而且背光开启后关闭不了,发现新版本屏可以开,也可以关,也就是说可以通过PWM来调屏的亮度。调试过了,PWM频率只有在50Hz以上(也就是20ms以内),人的肉眼才不会感觉出屏闪,PWM频率越高,调亮度的效果越好,用硬件PWM或软件模拟PWM都可以,大家可以试一下。
③LCD显示方向

        设置LCD的显示方向的位置变了,旧版本是放在前面的,而新版本是放在后面

 ④然后就是初始化各种参数了

        这个可是重中之中,有一个参数设错,都有可能影响到显示效果,旧版本的备注是根据显示屏的手册+理解加上的,大家不理解,可以去看显示屏手册。

旧版本

//Inter_command设置为高电平,只有硬件或软件复位才能将其设置为低电平。
	LCD_WR_REG(0xFE);//Inter 寄存器使能 1命令			
	LCD_WR_REG(0xEF);//Inter寄存器使能 2 命令
		
	LCD_WR_REG(0xB0);		 //设置对比度数值命令
	LCD_WR_DATA8(0xC0); //对比度数值,这个要自己试验一下最佳效果。
//要访问“EAh”,需要将“B2h”的位 [2] 设置为 1
//要访问“E8h”,需要将“B2h”的位 [0] 设置为 1
//要访问“E9h”,需要将“B2h”的位 [1] 设置为 1
	LCD_WR_REG(0xB2);		
	LCD_WR_DATA8(0x2f); 
//要访问“F0h”,需要将“B3h”的位 [0] 设置为 1		
//要访问“F1h”,需要将“B3h”的位 [1] 设置为 1
	LCD_WR_REG(0xB3);		
	LCD_WR_DATA8(0x03);
		
	LCD_WR_REG(0xB7);		
	LCD_WR_DATA8(0x01);  
//要访问“ACh”,需要将“B6h”的位 [4] 设置为 1
//要访问“A8h”,需要将“B6h”的位 [0] 设置为 1
	LCD_WR_REG(0xB6);//显示功能控制命令	
	LCD_WR_DATA8(0x19); 
		
	LCD_WR_REG(0xAC);//RGB 565的补码原理
	LCD_WR_DATA8(0xDB);//R0=B0=G0
		
	LCD_WR_REG(0xAB);
	LCD_WR_DATA8(0x0f);

	LCD_WR_REG(0x3A);	//像素格式集命令	
	LCD_WR_DATA8(0x05); //设置 RGB 图像数据的像素格式:16位/像素
			
	LCD_WR_REG(0xB4);	
	LCD_WR_DATA8(0x04);

	LCD_WR_REG(0xA8);	//帧速率设置命令
	LCD_WR_DATA8(0x08);//帧速率:99HZ

	LCD_WR_REG(0xb8);
	LCD_WR_DATA8(0x08);
		
	LCD_WR_REG(0xea);
	LCD_WR_DATA8(0x94); 

	LCD_WR_REG(0xe8);
	LCD_WR_DATA8(0x22); 

	LCD_WR_REG(0xe9);
	LCD_WR_DATA8(0x43); 

	LCD_WR_REG(0xc6);
	LCD_WR_DATA8(0x21); 

	LCD_WR_REG(0xc7);	
	LCD_WR_DATA8(0x12); 


	LCD_WR_REG(0xF0);	//设置正电压以调整 TFT 面板的伽玛特性。
	LCD_WR_DATA8(0x1D);
	LCD_WR_DATA8(0x45);
	LCD_WR_DATA8(0x0a);
	LCD_WR_DATA8(0x54);
	LCD_WR_DATA8(0xB4);
	LCD_WR_DATA8(0x2F);
	LCD_WR_DATA8(0x35);
	LCD_WR_DATA8(0x52);
	LCD_WR_DATA8(0x1E);
	LCD_WR_DATA8(0x0e);
	LCD_WR_DATA8(0x08);
	LCD_WR_DATA8(0x18);
	LCD_WR_DATA8(0x1A);
	LCD_WR_DATA8(0x1F);

	LCD_WR_REG(0xF1);//设置负电压以调整 TFT 面板的伽玛特性。
	LCD_WR_DATA8(0x16);
	LCD_WR_DATA8(0x38);
	LCD_WR_DATA8(0x1A);
	LCD_WR_DATA8(0x56);
	LCD_WR_DATA8(0x97);
	LCD_WR_DATA8(0x2D);
	LCD_WR_DATA8(0x2E);
	LCD_WR_DATA8(0x56);
	LCD_WR_DATA8(0x10);
	LCD_WR_DATA8(0x07);
	LCD_WR_DATA8(0x06);
	LCD_WR_DATA8(0x16);
	LCD_WR_DATA8(0x12);
	LCD_WR_DATA8(0x1E);

新版本

    LCD_WR_REG(0x11);
    delay_ms(120);

    LCD_WR_REG(0xFE);
    LCD_WR_REG(0xEF);

    LCD_WR_REG(0xB0);
    LCD_WR_DATA8(0xC0);

    LCD_WR_REG(0xB1);
    LCD_WR_DATA8(0x80);

    LCD_WR_REG(0xB2);
    LCD_WR_DATA8(0x27);

    LCD_WR_REG(0xB3);
    LCD_WR_DATA8(0x13);

    LCD_WR_REG(0xB6);
    LCD_WR_DATA8(0x19);

    LCD_WR_REG(0xB7);
    LCD_WR_DATA8(0x05);

    LCD_WR_REG(0xAC);
    LCD_WR_DATA8(0xC8);

    LCD_WR_REG(0xAB);
    LCD_WR_DATA8(0x0f);

    LCD_WR_REG(0x3A);
    LCD_WR_DATA8(0x05);

    LCD_WR_REG(0xB4);
    LCD_WR_DATA8(0x04);

    LCD_WR_REG(0xA8);
    LCD_WR_DATA8(0x08);

    LCD_WR_REG(0xB8);
    LCD_WR_DATA8(0x08);

    LCD_WR_REG(0xEA);
    LCD_WR_DATA8(0x02);

    LCD_WR_REG(0xE8);
    LCD_WR_DATA8(0x2A);

    LCD_WR_REG(0xE9);
    LCD_WR_DATA8(0x47);

    LCD_WR_REG(0xE7);
    LCD_WR_DATA8(0x5F);

    LCD_WR_REG(0xC6);
    LCD_WR_DATA8(0x21);

    LCD_WR_REG(0xC7);
    LCD_WR_DATA8(0x15);

    LCD_WR_REG(0xF0);
    LCD_WR_DATA8(0x1D);
    LCD_WR_DATA8(0x38);
    LCD_WR_DATA8(0x09);
    LCD_WR_DATA8(0x4D);
    LCD_WR_DATA8(0x92);
    LCD_WR_DATA8(0x2F);
    LCD_WR_DATA8(0x35);
    LCD_WR_DATA8(0x52);
    LCD_WR_DATA8(0x1E);
    LCD_WR_DATA8(0x0C);
    LCD_WR_DATA8(0x04);
    LCD_WR_DATA8(0x12);
    LCD_WR_DATA8(0x14);
    LCD_WR_DATA8(0x1F);

    LCD_WR_REG(0xF1);
    LCD_WR_DATA8(0x16);
    LCD_WR_DATA8(0x40);
    LCD_WR_DATA8(0x1C);
    LCD_WR_DATA8(0x54);
    LCD_WR_DATA8(0xA9);
    LCD_WR_DATA8(0x2D);
    LCD_WR_DATA8(0x2E);
    LCD_WR_DATA8(0x56);
    LCD_WR_DATA8(0x10);
    LCD_WR_DATA8(0x0D);
    LCD_WR_DATA8(0x0C);
    LCD_WR_DATA8(0x1A);
    LCD_WR_DATA8(0x14);
    LCD_WR_DATA8(0x1E);

    LCD_WR_REG(0xF4);
    LCD_WR_DATA8(0x00);
    LCD_WR_DATA8(0x00);
    LCD_WR_DATA8(0xFF);

    LCD_WR_REG(0xBA);
    LCD_WR_DATA8(0xFF);
    LCD_WR_DATA8(0xFF);
⑤显示开启

设置完初始化参数,就可以开启显示屏显示了

旧版本

//此命令关闭睡眠模式。使能DC/DC转换器,启动内部振荡器,面板扫描已开始。
	LCD_WR_REG(0x11);//退出睡眠模式命令
	delay_ms(120);//发送“睡眠”命令后需要等待 120 毫秒(“睡眠”时Out 模式),然后才能发送 Sleep Out 命令
	LCD_WR_REG(0x29);//显示开启
	delay_ms(120);

新版本

    LCD_WR_REG(0x11);
    delay_ms(120);
    LCD_WR_REG(0x29);

三、驱动程序更新

        如果以前的文章的程序烧录进去,显示屏有彩点,可以换成新驱动,每个文章的新驱动程序都改好了(之所以不把旧程序替换成新程序,是因为显示屏的驱动可能后续还会更新,具体什么时候更新,主要看厂家,在这里不改旧程序,就是为了告诉大家,显示驱动可能)

STM32F103RCT6+0.99寸TFT圆屏 软件SPI显示(初级)_gc9107屏幕例程-CSDN博客

STM32F103RCT6+0.99寸TFT圆屏 硬件SPI+DMA显示(中级)_stm32f103 spi dma-CSDN博客

STM32F103RCT6+0.99寸TFT圆屏 硬件SPI+DMA+外部FLASH显示(高级)(一)-CSDN博客

文章对应的程序一一对应,大家选择对应的资源下载

STM32F103RCT6+0.99寸TFT原屏显示(初级)(新驱动)资源-CSDN文库

STM32F103RCT6+0.99寸TFT圆屏硬件SPI+DMA显示(中级)(新驱动)资源-CSDN文库

STM32F103RCT6+0.99寸TFT圆屏硬件SPI+DMA+外部FLASH显示(高级)(新驱动)资源-CSDN文库


总结

         由于今年厂家更改了显示屏的驱动,新屏需要更新驱动程序,特在此篇文章说明和提醒,如果以后发现显示屏显示所有图片都有彩点,那就说明需要更改驱动程序了,可以直接跟厂家要新驱动程序。

        各位如果觉得有不足之处或者有疑问,可以在评论上提建议和讨论,有空的话,会解答和修改不足之处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值