嵌入式Linux应用程序开发-(3)i.MX6UL LCD背光调节程序

2019-07-12 19:33发布

i.MX6UL LCD背光调节程序

目标:了解 i.MX6UL 如何调节显示屏的背光亮度。
功能:点击触摸屏对应的亮度按钮,实现不同的亮度设置,同时获取和显示当前的亮度值。 在进行应用软件开发前,先看一下 TQ-i.MX6UL 的 LCD 硬件接口原理图,如下所示:
在这里插入图片描述
在这里插入图片描述
从硬件原理图可以看出,TQ-i.MX6UL 的LCD支持背光调节,通过核心板的 GPIO1_IO08 引脚,连接到LCD的 Backlight 接口。应用程序可以通过系统提供的接口,对LCD的背光亮度进行调节。TQ-i.MX6UL 支持8级背光亮度调节。 对于TQ-i.MX6UL平台,内核已经封装好背光系统的驱动,并对外提供了系统接口,关于背光系统对外的接口,在以下目录:/sys/devices/platform/backlight/backlight/backlight
在这里插入图片描述
这里,我们关注三个节点:actual_brightness, brightness, max_brightness
actual_brightness:这个节点只读,可以通过读取这个节点,获取LCD实际的亮度值。
brightness:这个节点可读可写,向这个节点写入不同值(0-7),可调节LCD亮度。
max_brightness:这个节点只读,通过读取此节点,获取可以设置的最大亮度级别。 对于合法的亮度设置值,可以查看驱动的设备树文件:arch/arm/boot/dts/tq-imx6ul.dts
在这里插入图片描述
由上图可知,背光支持8级调节,因此,三个节点actual_brightness, brightness, max_brightness 对应的可调值范围为 0 - 7。 1、先用Qt Creator构建一个工程,命名为:003_backlight_pwm,关于如何构建工程,请参考“第一个嵌入式QT应用程序”的具体内容。 2、双击打开“widget.ui”文件,构建界面,构建后的界面如下图所示:
在这里插入图片描述 3、对于设置背光值和获取背光值,可以封装一个类Backlight_Ctrl,这个类包含了设置背光和获取背光这两个方法,类的具体内容如下所示: #define BACKLIGHT_BRIGHTNESS "/sys/devices/platform/backlight/backlight/backlight/brightness" #define BACKLIGHT_ACTUAL_BRIGHTNESS "/sys/devices/platform/backlight/backlight/backlight/actual_brightness" class Backlight_Ctrl : public QWidget { Q_OBJECT public: Backlight_Ctrl(); ~Backlight_Ctrl(); void set_brightness(char *level); char get_brightness(void); private slots: private: }; 4、set_brightness() 和 get_brightness() 这两个方法的具体实现如下所示: void Backlight_Ctrl::set_brightness(char* level) { QFile brightness_file(BACKLIGHT_BRIGHTNESS); brightness_file.open(QIODevice::ReadWrite); if(brightness_file.isOpen()) { brightness_file.write(level); } brightness_file.close(); } char Backlight_Ctrl::get_brightness(void) { char backlight_level; QFile brightness_file(BACKLIGHT_ACTUAL_BRIGHTNESS); brightness_file.open(QIODevice::ReadOnly); if(brightness_file.isOpen()) { brightness_file.read(&backlight_level,sizeof(backlight_level)); } brightness_file.close(); return backlight_level; } 5、在构建Widget对象的时候,我们可以同步构建一个backlight_ctrl对象,这样,就可以通过这个对象,调用里面的方法进行设置背光和背光获取,代码如下。 Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); backlight_ctrl = new Backlight_Ctrl(); //定义一个backlight_ctrl对象 ui->pushButton_backlight_3->click(); //默认以第4级亮度显示 timer = new QTimer(); //定义一个定时器,用来进行亮度0的超时 connect( timer, SIGNAL(timeout()), this, SLOT(timer_timeout_handler())); } 6、需要注意的是,由于我们设置了背光亮度为0后,显示屏背光关闭,导致看不到显示的按钮。因此,我们通过一个定时器,3秒后恢复到指定的亮度。定时器设置为单次触发的方式,3秒后触发。如下图所示。
在这里插入图片描述
7、至此,所有代码编写完成,下载到TQ-i.MX6UL,运行应用程序,可以看到如下效果。
点击这里,查看实验效果 点击这里,下载源码
点击这里,学习更多Embeded IoT Linux开发