米尔电子
直播中

华仔stm32

3年用户 2977经验值
擅长:嵌入式技术
私信 关注
[技术]

【米尔-芯驰D9360商显板试用评测】3、LED闪起来

【目的】
显示屏上创建LED图标,并这现他的定时闪烁。
【实现步骤】
1、新建QT5工程。
2、在桌面添加两个图标,一个图标对象名称设置为lable_led1。

image.png
3、实现图标的转换,先在mainwindow.cpp创建一个函数,实现工功能为:将label控件变成一个圆形指示灯,需要指定颜色color以及直径size
具体内容如下:

// 该函数将label控件变成一个圆形指示灯,需要指定颜色color以及直径size
// color 0:grey 1:red 2:green 3:yellow
// size  单位是像素
void MainWindow::setLED(QLabel *label, int color, int size)
{
    // 将label中的文字清空
    label->setText("");
    // 先设置矩形大小
    // 如果ui界面设置的label大小比最小宽度和高度小,矩形将被设置为最小宽度和最小高度;
    // 如果ui界面设置的label大小比最小宽度和高度大,矩形将被设置为最大宽度和最大高度;
    QString min_width = QString("min-width: %1px;").arg(size);              // 最小宽度:size
    QString min_height = QString("min-height: %1px;").arg(size);            // 最小高度:size
    QString max_width = QString("max-width: %1px;").arg(size);              // 最小宽度:size
    QString max_height = QString("max-height: %1px;").arg(size);            // 最小高度:size
    // 再设置边界形状及边框
    QString border_radius = QString("border-radius: %1px;").arg(size/2);    // 边框是圆角,半径为size/2
    QString border = QString("border:1px solid black;");                    // 边框为1px黑色
    // 最后设置背景颜色
    QString background = "background-color:";
    switch (color) {
    case 0:
        // 灰色
        background += "rgb(190,190,190)";
        break;
    case 1:
        // 红色
        background += "rgb(255,0,0)";
        break;
    case 2:
        // 绿色
        background += "rgb(0,255,0)";
        break;
    case 3:
        // 黄色
        background += "rgb(255,255,0)";
        break;
    default:
        break;
    }

    const QString SheetStyle = min_width + min_height + max_width + max_height + border_radius + border + background;
    label->setStyleSheet(SheetStyle);
}

并在mainwindow.h中声明:
void setLED(QLabel* label, int color, int size);
4、上面的函数可以实现指定函数颜色、大小,我们再创建一个定时器函数,来定时改变这个led标签的颜色,那就可以实现灯的闪烁了。
我先在mainwindow.h中创建一个定时器
void timerEvent(QTimerEvent *e);
同时定义一个变量:
int timerid1;
5、在mainwindow.cpp中,实现定时器的回调函数,回调函数中,我们先判断是不是timerid1的回调,如果是,则颜色返转一下。这样就可以实现我所需要的功能了。

void MainWindow::timerEvent(QTimerEvent *e)
{
    static bool ledstate = 0;
    if(e->timerId()==timerid1)
    {
        ledstate = !ledstate;
         setLED(ui->label_led1, ledstate, 16);
    }
}

6、在main.cpp中,我开启定时:
timerid1 = startTimer(1000);
然后编译,并把编译好的程序上传给开发板,就得到了一个闪烁的LED的效果了:
【总结】
本次实验,实现了QT定时器在米尔-芯驰D9360商显板上的运行,相比MCU开发板,有了QT的界入,在程序开发上面要简单很多,同时移植也会方便许多。

其效果如底部视频展示

米尔-芯驰D9360商显板闪灯

更多回帖

发帖
×
20
完善资料,
赚取积分