QT 控制LED实验

1、实验准备

在PC 机D:盘下创建文件夹qt-led,将光盘qt_led_exp 文件夹下的images 文件夹拷贝到E:盘下qt-led 文件夹qt-led 内

2、新建工程

新建一个Empty QT4 Project 工程,如下:

点击:File >>> New File >>> Empty Qt4 xxx

保存到D:盘下,起名叫qt-led,如下所示:

3、添加资源文件(图像)

右键点击工程文件qt_led->add new…->Qt Resource File,如下所示:

指定保存位置D:\qt-led 及文件名images,如下所示:(我的一不小心弄错了目录,成了D:\qt-led\\qt-led)

选择添加到工程,确定会出现如下界面:

点击下方的Add->Add Prefix,添加前缀,将默认值/new/prefix1 改为/,如下:

点击下方的Add->Add Prefix,添加文件,选择images 文件夹下的所有文件,如下:

添加完成后,如下显示:

然后执行”ctrl+s”进行保存。

4、创建UI界面

新建一个UI Add New…->Qt Designer Form,如下所示:

选择widget 模板,如下所示:

设置FORM 的名称为led.ui,保存位置D:\qt-led,如下:

点击窗体,设定大小为800*480,窗体名称更改为Led,如下所示:

添加标签,文本为:led 灯控制实例,objectName 为label;

添加标签,清空文本,objectName 为led1_lb,设置大小为128*128,如下所示:

为标签添加背景图片,右键点击标签,选择Change styleSheet…,如下所示:

选择添加背景图片,如下所示:

选中off.png 图像文件,如下所示:

添加完成以后,标签背景已经改变,如下:

复制另外3 个标签,起名分别为led2_lb 和led3_lb,如下所示:

添加group Box 控件,文本:开关控制,大小600*200,摆放在标签的下方,如下:

添加一个Push Button 按钮控件,文本为点亮,objectName 为led1_on,大小为90*45,
点中按钮,在右侧属性设置中找到icon 项,添加图标文件为on.png,添加后如下显
示:

同样复制另外两个led 控制点亮按钮,objectName 分别为led2_on 和led3_on,如下:

添加一个Push Button 按钮控件,文本为熄灭,objectName 为led1_off,大小为90*45,
点中按钮,在右侧属性设置中找到icon 项,添加图标文件为off.png,添加后如下显
示:

同样复制另外两个led 控制熄灭按钮,objectName 分别为led2_off 和led3_off,如下:

图标下方添加三个标签,起名分别为status_lb1、status_lb2 和status_lb3,如下:

界面设计完成,”ctrl+s”保存:

5、添加头文件

添加一个c++头文件,如下:

起名led.h,保存到D:\qt-led,如下:

编辑内容如下:

#include "led.h"
#include "ui_led.h"
MyLed::MyLed(QWidget *parent) :
QWidget(parent),ui(new Ui::Led)
{
ui->setupUi(this);
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
connect(ui->led1_on,SIGNAL(clicked()),this,SLOT(on_led1_on_clicked()));
connect(ui->led1_off,SIGNAL(clicked()),this,SLOT(on_led1_off_clicked()));
connect(ui->led2_on,SIGNAL(clicked()),this,SLOT(on_led2_on_clicked()));
connect(ui->led2_off,SIGNAL(clicked()),this,SLOT(on_led2_off_clicked()));
connect(ui->led3_on,SIGNAL(clicked()),this,SLOT(on_led3_on_clicked()));
connect(ui->led3_off,SIGNAL(clicked()),this,SLOT(on_led3_off_clicked()));
fd = open("/dev/leds", 0);
if (fd < 0) {
qDebug("open device /dev/leds");
//exit(1);
}
}
MyLed::~MyLed()
{
delete ui;
::close(fd);
}
void MyLed::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void MyLed::on_led1_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, 1);
ui->status_lb1->setText("LED1 ON");
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led1.jpg);"));
}
void MyLed::on_led1_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, 1);
ui->status_lb1->setText("LED1 OFF");
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}
void MyLed::on_led2_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, 2);
ui->status_lb2->setText("LED2_ON");
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led2.jpg);"));
}
void MyLed::on_led2_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, 2);
ui->status_lb2->setText("LED2 OFF");
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}
void MyLed::on_led3_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, 3);
ui->status_lb3->setText("LED3 ON");
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led3.jpg);"));
}
void MyLed::on_led3_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, 3);
ui->status_lb3->setText("LED3 OFF");
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}

完成,”ctrl+s”保存

6、添加源文件

添加一个c++源文件,如下:

起名led.cpp,保存到D:\qt-led,如下:

编辑文本如下:

#include "led.h"
#include "ui_led.h"
MyLed::MyLed(QWidget *parent) :
QWidget(parent),ui(new Ui::Led)
{
ui->setupUi(this);
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
connect(ui->led1_on,SIGNAL(clicked()),this,SLOT(on_led1_on_clicked()));
connect(ui->led1_off,SIGNAL(clicked()),this,SLOT(on_led1_off_clicked()));
connect(ui->led2_on,SIGNAL(clicked()),this,SLOT(on_led2_on_clicked()));
connect(ui->led2_off,SIGNAL(clicked()),this,SLOT(on_led2_off_clicked()));
connect(ui->led3_on,SIGNAL(clicked()),this,SLOT(on_led3_on_clicked()));
connect(ui->led3_off,SIGNAL(clicked()),this,SLOT(on_led3_off_clicked()));
fd = open("/dev/leds", 0);
if (fd < 0) {
qDebug("open device /dev/leds");
//exit(1);
}
}
MyLed::~MyLed()
{
delete ui;
::close(fd);
}
void MyLed::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void MyLed::on_led1_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, 1);
ui->status_lb1->setText("LED1 ON");
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led1.jpg);"));
}
void MyLed::on_led1_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, 1);
ui->status_lb1->setText("LED1 OFF");
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}
void MyLed::on_led2_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, 2);
ui->status_lb2->setText("LED2_ON");
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led2.jpg);"));
}
void MyLed::on_led2_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, 2);
ui->status_lb2->setText("LED2 OFF");
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}
void MyLed::on_led3_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, 3);
ui->status_lb3->setText("LED3 ON");
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led3.jpg);"));
}
void MyLed::on_led3_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, 3);
ui->status_lb3->setText("LED3 OFF");
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}

完成“ctrl+s”保存

7、添加 main 函数

新建一个C++源文件,保存为main.cpp,如下:

编辑文本内容:

#include <QtGui/QApplication>
#include "led.h"
#include <QtGui/QApplication>
#include "led.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyLed w;
w.showFullScreen();
a.setFont(QFont("unifont",12));
//w.show();
return a.exec();
}

“ctrl+s”保存

工程已经创建完毕,接下来即是交叉编译、下载测试
8、拷贝工程文件到虚拟机
[[email protected] uptech]# mkdir qt-led/
通过samba 服务将E 盘下的qt-led 文件夹拷贝到虚拟机的/home/uptech/qt-led 目录,
同时将光盘中qt_led_exp 目录下的driver 目录也拷贝到此文件如下:
[[email protected] uptech]# cd qt-led/
[[email protected] qt-led]# ls
driver qt-led
[[email protected] qt-led]#
9、编译
[[email protected] qt-led]# cd qt-led/
[[email protected] qt-led]#
/home/gxj/QT/qt4.6/for_arm/qt-everywhere-opensource-src-4.6.2/bin/qmake -project
[[email protected] qt-led]#
/home/gxj/QT/qt4.6/for_arm/qt-everywhere-opensource-src-4.6.2/bin/qmake
[[email protected] qt-led]#make
10、拷贝到共享目录
[[email protected] qt-led]# cp qt-led /mnt/nfs/Trolltech/Qt-embedded-4.6.2-install/
[[email protected] qt-led]# cp ../driver/s3c-leds.ko
/mnt/nfs/Trolltech/Qt-embedded-4.6.2-install/
[[email protected] qt-led]#
11、挂载
/mnt # mount -o nolock,rsize=4096,wsize=4096 192.168.12.95:/mnt/nfs /mnt/nfs
12、加载驱动
/mnt #cd /mnt/nfs/Trolltech/Qt-embedded-4.6.2-install/

/mnt/nfs/Trolltech/Qt-embedded-4.6.2-install # insmod s3c-leds.ko
13、执行测试程序
/mnt/nfs/Trolltech/Qt-embedded-4.6.2-install # ./export4arm.sh qt-led –qws
即可进行测试

原文地址:https://www.cnblogs.com/chuijingjing/p/9222290.html

时间: 2024-10-08 06:03:51

QT 控制LED实验的相关文章

基于Arduino的按键控制LED实验

I/O 口的意思即为INPUT 接口和OUTPUT 接口,到目前为止我们设计的小灯实验都还只是应用到Arduino 的I/O 口的输出功能,这个实验我们来尝试一下使用Arduino的I/O 口的输入功能即为读取外接设备的输出值,我们用一个按键和一个LED 小灯完成一个输入输出结合使用的实验,让大家能简单了解I/O 的作用.按键开关大家都应该比较了解,属于开关量(数字量)元件,按下时为闭合(导通)状态.完成本实验要 用到的元件如下: 按键开关*1 红色M5 直插LED*1 220Ω电阻*1 10K

[ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭

1.CC2530的IO口概述 CC2530芯片有21 个数字输入/输出引脚,可以配置为通用数字I/O 或外设I/O 信号,配置为连接到ADC.定时器或USART外设.这些I/O 口的用途可以通过一系列寄存器配置,由用户软件加以实现. I/O 端口具备如下重要特性:    ?? 21 个数字I/O 引脚 ?? 可以配置为通用I/O 或外部设备I/O ?? 输入口具备上拉或下拉能力 ?? 具有外部中断能力. 21 个I/O 引脚都可以用作于外部中断源输入口.因此如果需要外部设备可以产生中断.外部中断

实验 使用 vivado zedboard GPIO 开关 开控制 LED

前面我做了几个实验 都没有用过 开关,这一次用一用 发现 vivado 真的挺方便 所以 使用 vivado 开发 1.建工程 我使用 vivado 2013.4 创建新工程 –> next –>next 勾选 Do not specify sources at this time   //这样跳过后面两个添加文件页面 选择 board –> zedboard –>next –>finsh 就创建完了. 2.PL端 IP核添加与连线 创建一个空的 Diagram Create

利用DoHome APP和音箱控制LED灯实验参考步骤

准备材料: Arduino Uno 一块 Arduino 扩展板        购买链接 DT-06模块一个       购买链接 安卓手机一个 小度音箱一个 小灯珠一个 杜邦线若干 1.DT-06固件的烧录 1.1打开ESP模块下载工具ESPFlashDownloadTool,选择需要下载的固件,填写下载地址,推荐使用  ESP8266 Download TOOL,配置信息如下: 1.2 选择实际的串口,选择下载速度 1.3点击ERASE,先插除,再点击START,开始下载 工具下载及详细请看

[ZigBee] 13、ZigBee基础阶段性回顾与加深理解——用定时器1产生PWM来控制LED亮度(七色灯)

引言:PWM对于很多软件工程师可能又熟悉又陌生,以PWM调节LED亮度为例,其本质是在每个周期都偷工减料一些,整体表现出LED欠压亮度不同的效果.像大家看到的七色彩灯其原理也类似,只是用3路PWM分别控制红.绿.蓝三种颜色的灯输出亮度,再结合混色原理表现出丰富多彩的炫光效果~ 写在前面:前十几篇介绍了CC2530的一些外设的基本用法,接下来几篇拿几个例子回顾并加深一下之前的知识点,上面引言是普及.下面高能预警! 第一个例子:用定时器1产生PWM来控制LED亮度 我们在<[ZigBee] 5.Zi

[ZigBee] 16、Zigbee协议栈应用(二)——基于OSAL的无线控制LED闪烁分析(下)

说在前面:上一篇介绍了无线LED闪烁实现的OSAL部分,本篇介绍如何实现无线数据收发及数据处理: 上一篇是用SI跟着流程查看源码,我个人认为以架构的思维去了解代码能让人更清晰 ::ZMain.c程序入口文件 这里chipcon_cstartup.s51是汇编的启动文件,ZMain.c相当于main文件,里面有main函数: 1 int main( void ) 2 { 3 osal_int_disable( INTS_ALL );// Turn off interrupts 关中断 4 HAL_

树莓派 LED+蜂鸣+声音传感器+红外模块组合打造声控/红外控制LED

昨天搞了控制LED,玩了第一个,剩下的就感觉很简单了,这里记录一下 先来几张照片 玩了蜂蜜模块才发现规律,一般这种模块,都会有三个针脚,VCC(3.3V或5V供电输出针脚).GNC(对应GPIO针脚的GNC).OUT/(I/O)(对应GPIO编号的针脚),如果是需要向树莓派发送信息的,这个模块上标识的是OUT,例如这里用的声音传感器和人体红外传感器,这两个都是需要向树莓派发送侦测的信息,如果不需要向树莓派发送消息的,则标识的是I/O,比如我这个蜂鸣模块,这只是我用这三个传感器发现的,可能不正确

csu 1770按钮控制彩灯实验(树状数组)

1770: 按钮控制彩灯实验 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 194  Solved: 65[Submit][Status][Web Board] Description 应 教学安排,yy又去开心的做电学实验了.实验的内容分外的简单一串按钮通过编程了的EEPROM可以控制一串彩灯.然而选择了最low的一种一对一的控制 模式,并很快按照实验指导书做完实验的yy马上感觉到十分无趣.于是他手指在一排按钮上无聊的滑来滑去,对应的彩灯也不断的

树莓派GPIO输入输出--控制LED

GPIO引脚有两种模式BOARD和BCM. 1.GPIO输出控制LED 效果图: 代码: (1)使用BOARD模式,GPIO.setmode(GPIO.BOARD).35号引脚在BCM下是GPIO19 (2)将引脚35设置为输出模式,GPIO.setup(35,GPIO.OUT) (3)对GPIO35引脚输出高电平,也可以为GPIO.HIGH 2.GPIO接口获取输入信号 效果图: 电路图 当开关断开时,GPIO23是高点平获取到的输入信号是Ture.当开关按下时GPIO23为接地,获取到的信号