嵌入式系统开发与应用--交通灯系统

题目:交通灯系统

1  系统设计

1.1 设计要求

1.1.1 设计任务 

利用Qt-Creator编程实现各个路口红绿灯及时间显示,设计一个交通灯控制系统。

1.1.2 性能指标要求 

(1)按照题目要求使用Qt编程,独立设计系统所需界面。实现交通灯计时显示、按钮控制交通灯启动和停止。

(2)在十字交叉路口,东南西北各方向都设置红、黄、绿色信号灯,红灯亮表示禁止通行,绿灯亮表示可以通行,红灯灭之前5秒钟黄灯开始闪烁直到绿灯亮起后黄灯熄灭。其中东西方向为主干道,南北方向为次干道,各个方向分别设置两位数码管,用来显示红灯和绿灯倒计时间,东西方向时间一致,南北方向时间一致。

(3)启动时主干道为60秒倒计时,次干道为40秒倒计时。

(4)单独设计人行道指示灯标志,当禁止行走时为红灯,当可以横穿马路时,绿灯亮起,在禁止通行之前10秒钟绿灯开始闪烁(以警示行人),最终红灯亮起绿灯熄灭。

(5)通过按键可随意设定主干道与次干道时间。 

(6)真实场景仿真展示等。

1.2 设计思路及设计框图

1.2.1设计思路

交通灯倒计时设计的系统框图。

1.2.2总体设计框图


交通灯界面设计图。

2  各个模块程序的设计


设置初试时间:

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    setWindowTitle("Traffic Light");

    m_nClickCnt = 0;

    //设置默认时间

    ui->lineEdit_mainTime->setText("60");

    ui->lineEdit_secondTime->setText("40");

    //获取初始时间

    m_nmainTime = ui->lineEdit_mainTime->text().toInt();

    m_nsecondTime = ui->lineEdit_secondTime->text().toInt();

    Init();

    LightTime();

    ui->car_up->setPixmap(QPixmap("://new/prefix1/tu/up.png"));//添加资源

    //ui->car_up->setPixmap(QPixmap("://new/prefix1/picture/up.png"));//添加资源

    ui->car_up->setScaledContents(true);//图片自动适应label大小

}



界面规则设定:

MainWindow::~MainWindow()

{

    delete ui;

}

// 该函数将label控件变成一个圆形指示灯,需要指定颜色color以及直径 
l->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;                 // 边框为1px黑色
    // 最后设置背景颜色
    QString background = "background-color:";
    switch (color) {
    case 0:
        // 灰色
        if(type == 1)
            border = QString("border:2px solid rgb(255,0,0);");
        else if(type ==2)
            border = QString("border:2px solid rgb(0,255,0);");
        else if(type ==3)
            border = QString("border:2px solid rgb(255,255,0);");
        break;
    case 1:
        // 红色
        background += "rgb(255,0,0)";
        border = QString("border:1px solid red;");
        break;
    case 2:
        // 绿色
        background += "rgb(0,255,0)";
        border = QString("border:1px solid green;");
        break;
    case 3:
        // 黄色
        background += "rgb(255,255,0)";
        border = QString("border:1px solid yellow;");
        break;
    case 4:
        // 黄色
        background += "rgb(255,255,255)";
        break;
    default:
        break;
    }
    const QString SheetStyle = min_width + min_height + max_width + max_height + border_radius + border + background;
    label->setStyleSheet(SheetStyle);
}

界面绘制:
void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen;
    pen.setColor(Qt::black);
    pen.setWidth(3);
    painter.setPen(pen);
    painter.drawLine(370,50,370,190);//画直线
    painter.drawLine(230,190,370,190);//画直线
    int n = 390;
    for(int i = 0; i < 8 ;i ++)
    {
        painter.drawLine(n,50,n,80);//画直线
        n+=20;
    }
    n = 210;
    for(int i = 0; i < 8 ;i ++)
    {
        painter.drawLine(230,n,260,n);//画直线
        n+=20;

文章借鉴于此纷传

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值