福建工程学院嵌入式课程设计.docx

上传人:b****6 文档编号:13327862 上传时间:2023-06-13 格式:DOCX 页数:29 大小:4.07MB
下载 相关 举报
福建工程学院嵌入式课程设计.docx_第1页
第1页 / 共29页
福建工程学院嵌入式课程设计.docx_第2页
第2页 / 共29页
福建工程学院嵌入式课程设计.docx_第3页
第3页 / 共29页
福建工程学院嵌入式课程设计.docx_第4页
第4页 / 共29页
福建工程学院嵌入式课程设计.docx_第5页
第5页 / 共29页
福建工程学院嵌入式课程设计.docx_第6页
第6页 / 共29页
福建工程学院嵌入式课程设计.docx_第7页
第7页 / 共29页
福建工程学院嵌入式课程设计.docx_第8页
第8页 / 共29页
福建工程学院嵌入式课程设计.docx_第9页
第9页 / 共29页
福建工程学院嵌入式课程设计.docx_第10页
第10页 / 共29页
福建工程学院嵌入式课程设计.docx_第11页
第11页 / 共29页
福建工程学院嵌入式课程设计.docx_第12页
第12页 / 共29页
福建工程学院嵌入式课程设计.docx_第13页
第13页 / 共29页
福建工程学院嵌入式课程设计.docx_第14页
第14页 / 共29页
福建工程学院嵌入式课程设计.docx_第15页
第15页 / 共29页
福建工程学院嵌入式课程设计.docx_第16页
第16页 / 共29页
福建工程学院嵌入式课程设计.docx_第17页
第17页 / 共29页
福建工程学院嵌入式课程设计.docx_第18页
第18页 / 共29页
福建工程学院嵌入式课程设计.docx_第19页
第19页 / 共29页
福建工程学院嵌入式课程设计.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

福建工程学院嵌入式课程设计.docx

《福建工程学院嵌入式课程设计.docx》由会员分享,可在线阅读,更多相关《福建工程学院嵌入式课程设计.docx(29页珍藏版)》请在冰点文库上搜索。

福建工程学院嵌入式课程设计.docx

福建工程学院嵌入式课程设计

 

课程设计

 

题目:

基于QT的界面程序设计

班级:

电子信息工程1303

学号:

姓名:

XXX

指导老师:

陈婧张平均

 

2016年09月30日

 

一设计目的与要求

1.1课题名称

Linux平台下基于TQ2440嵌入式开发板的QT编程及移植

1.2课程目标

1.进一步巩固嵌入式系统的基本知识;

2.掌握嵌入式应用系统的基本结构;

3.掌握嵌入式系统开发环境建立和使用;

4.掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;

5.学会查阅有关专业资料及设计手册;

6,QT界面编程。

1.3任务要求

1.掌握嵌入式系统开发环境建立和使用;

2.掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;

3、QT在PC上的安装、

4、QT在开发板上的移植

1)、触摸屏原理及tslib库的工作原理;

2)、QT设计LED灯控制,设计方案自由发挥,可以单个控制LED灯、也可以流水灯的控制,可控制流水灯的频率(1-5HZ可选)

3)、掌握I/O驱动的编写(ioctl/read/write),并实现蜂鸣器模块驱动的设计

5、QT界面程序设计

6.编写设计说明书(方案的确定、设计环节的考虑及必要说明等)及设备的使用说明;

7.绘制有关图纸(硬件原理图、驱动流程图、应用流程图).

 

二Linux与嵌入式开发环境搭建

2.1基本环境安装

安装VMware虚拟机软件,拷贝实验室已安装CentOS系统镜像文件,复制到本机运行。

复制已构建的交叉编译工具链文件EABI-4.3.3_EmbedSky_20100610.tar.bz2到本机Linux中。

解压到根目录,执行以下命令将工具链的可执行文件加入到系统的环境变量。

exportPATH=/opt/EmbedSky/4.3.3/bin:

$PATH

2.2NFS与防火墙配置

输入setup进入系统的配置界面

进入系统服务,启用NFS服务:

禁用系统的防火墙:

修改exports文件,添加一行数据:

重启nfs服务

 

三QT开发环境搭建

3.1准备所需的文件

复制所需的文件到Linux中并进行解压;

所需如下文件:

tslib-1.4.1.tar.br2---------------触摸屏所需的库

Qt-4.7.tar.gz------------------QT源代码文件

root_qt-4.5.tar.bz2-------------QT根文件系统文件

wqy-zenhei-0.8.38-1.tar.gz-----字库文件

3.2编译与安装

Ø字库的编译与安装:

创建目录/opt/EmbedSky/tslib_install用于存放生成的文件;

进入到源码目录,运行autogen生成Configure文件,并进行配置:

执行make与makeinstall命令进行编译安装,在tslib_install目录中生成移植所需文件:

Ø安装Qt4.7:

创建一个文件夹qt-4.7-arm用于存放生成的文件:

输入命令进行配置:

输入yes同意用户协议:

执行make与makeinstall,生成的文件夹如下:

Øqt4.5根文件系统构建

修改qt-root文件夹的权限

拷贝触摸屏文件到根目录中

拷贝QT4.7生成文件:

创建一个存放qt文件的文件夹:

复制之前生成的qt-4.7-arm文件夹下的lib和plugin目录到新创建的文件夹中:

拷贝根文件系统知道hello_cn文件用于自动测试使用

拷贝字库文件到根文件系统中:

修改环境变量:

修改QT4运行脚本文件

修改运行文件路径

修改rcS文件,注释net_set,添加设置IP地址命令,注释掉LED进程的启动程序

四QtCreator的安装

修改二进制安装文件的权限并执行:

出现如下的安装向导逐步进行安装:

安装完成后启动程序出现如下的界面:

编写一个Helloworld程序进行测试,点击运行,出现的界面如下图:

到此说明QtCreator安装成功!

添加已安装的qmake工具

 

五驱动编写与安装

6.1内核的解压与编译

将内核源代码进行解压:

复制原有的配置文件为.config

执行make对内核进行编译。

6.2驱动编写与编译

修改LED与蜂鸣器的驱动文件,更改对应的Makefile为如下所示的格式:

执行make命令生成.ko文件:

 

五界面与程序设计

5.1UI设计

使用到的控件:

PushButton按钮;用于响应用户鼠标操作,执行响应的程序;

Label标签:

用户显示静态文本,显示LED,蜂鸣器图标;

CheckBox复选框:

用于选中和取消,更改LED灯状态;

Widget窗口:

窗口对象,显示用户控件;

控件布局:

手动拖动控件到窗口中,移动到相应位。

修改控件的名称以便在编程的时候进行调用。

选中控件的属性stylesheet,修改CSS代码用于美化布局:

设置背景颜色,边距,圆边距,间距等;

布局好之后的界面如下图:

5.2程序设计

主函数入口:

打开设备,初始化窗口,并且将窗口进行居中;

fdled=open("/dev/zytled",O_RDWR);

fdbeep=open("/dev/zytbeep",O_RDWR);

QApplicationa(argc,argv);

zytw;

w.show();

w.move((QApplication:

:

desktop()->width()-w.width())/2,(QApplication:

:

desktop()->height()-w.height())/2);

returna.exec();

生成槽函数:

选中控件,右键打开菜单,选择gotoslot打开选择框:

选中需要的信号,点击OK生成槽函数,在槽函数中编写业务代码;

在需要的控件上都执行此操作,供编程使用。

页面构造函数:

首页面的构造函数的功能是初始化页面和设置页面的风格,在构造函数中我们增加设置字体,设置背景图片的功能,代码段如下:

this->setAutoFillBackground(true);

QPalettepalette;//QPalette调色板

QPixmappixmap(":

/new/image/bg.bmp");

palette.setBrush(QPalette:

:

Window,QBrush(pixmap));

this->setPalette(palette);

ui->setupUi(this);

QFontft;//字体

ft.setPointSize(40);

ui->LED1->setFont(ft);

ui->LED2->setFont(ft);

ui->LED3->setFont(ft);

ui->LED4->setFont(ft);

ui->Beep->setFont(ft);

LED灯控制:

我们使用复选框的选中与不选中来控制LED等的亮灭;可以手动改变复选框的状态改变灯的状态,也可通过程序控制复选框的状态来控制LED灯。

voidzyt:

:

on_CheckBox_LED1_toggled(boolchecked)

{

QPaletteon;

on.setColor(QPalette:

:

WindowText,Qt:

:

red);

QPaletteoff;

off.setColor(QPalette:

:

WindowText,Qt:

:

black);

if(ui->CheckBox_LED1->isChecked()){

ui->LED1->setPalette(on);//设置UI界面中灯的状态为亮

}else{

ui->LED1->setPalette(off);//设置UI界面中灯的状态为灭

}

ioctl(fdled,checked,0);//根据选中状态控制LED灯的亮灭

}

实现流水灯:

左移与右移的实现原理相同。

这里以左移为例:

voidzyt:

:

on_turnLeftBtn_clicked()

{

//关闭所有的LED灯

on_closeLEDBtn_clicked();

//进入到左移流水灯模式

modeFlag=TURN_LEFT;

//定义QCheckBox数组,用于间接控制流水灯;

QCheckBox*CheckBoxes[4];

CheckBoxes[0]=ui->CheckBox_LED1;

CheckBoxes[1]=ui->CheckBox_LED2;

CheckBoxes[2]=ui->CheckBox_LED3;

CheckBoxes[3]=ui->CheckBox_LED4;

//定义for循环所需变量

inti=0;

//定义两个调色板用于UI界面的更新

QPaletteon;

on.setColor(QPalette:

:

WindowText,Qt:

:

red);

QPaletteoff;

off.setColor(QPalette:

:

WindowText,Qt:

:

black);

intwhileFlag=0;

while

(1)

{

for(i=3;i>=0;i--)

{

//打开蜂鸣器和LED灯

ui->Beep->setPalette(on);

ioctl(fdbeep,true,3);

CheckBoxes[i]->setChecked(true);

//进行延时

delay(500/freqSec);

//关闭蜂鸣器

ui->Beep->setPalette(off);

ioctl(fdbeep,false,3);

//判断标志位是否需要退出for循环

if(modeFlag!

=TURN_LEFT)

{

whileFlag=1;

CheckBoxes[i]->setChecked(false);

if(modeFlag==CLOSE_APP)

{

QApplication*app;

app->exit();

}

break;

}

delay(500/freqSec);

if(modeFlag!

=TURN_LEFT)

{

whileFlag=1;

CheckBoxes[i]->setChecked(false);

if(modeFlag==CLOSE_APP)

{

QApplication*app;

app->exit();

}

break;

}

//关闭LED灯

CheckBoxes[i]->setChecked(false);

}

//判断标志位是否要退出while循环

if(whileFlag==1)

{

break;

}

}

}

弹出新窗口:

创建一个新鞋窗口实例,并显示出来;

AboutMeab;

ab.exec();

其他函数:

QT延时函数:

voiddelay(unsignedintmsec)

{

QTimedieTime=QTime:

:

currentTime().addMSecs(msec);

while(QTime:

:

currentTime()

QCoreApplication:

:

processEvents(QEventLoop:

:

AllEvents,100);

}

}

退出函数:

voidzyt:

:

on_exitBtn_clicked()

{

modeFlag=CLOSE_APP;

QApplication*app;

app->exit();

}

关闭LED灯:

voidzyt:

:

on_closeLEDBtn_clicked()

{

modeFlag=LED_CLOSE;

ui->CheckBox_LED1->setChecked(false);

ui->CheckBox_LED2->setChecked(false);

ui->CheckBox_LED3->setChecked(false);

ui->CheckBox_LED4->setChecked(false);

ioctl(fdbeep,false,3);

}

5.3Qt程序移值

对QT工程进行编译移值:

生成Makefile:

./qmake-makefileLEDController.pro

编译程序:

make

运行程序:

将二进制文件复制到根文件夹,在终端中运行程序:

./LEDController-qws-fontwenquanyi

 

开发板运行:

在开发版运行成功后,出现的界面如下:

 

七设计总结

通过本次嵌入式QT课程设计,更加熟悉了嵌入式的流程与操作,已经熟练掌握了嵌入式开发环境的移植,Qt界面程序设计等。

提高了发现和解决问题的实践操作能力。

本次课程设计出现和解决的主要问题:

1.开发板电源问题导致的连接不可用:

更换电源后解决问题;

2.ts_lib编译搓搓问题:

复制源编译命令解决问题;

3.nfs挂载失败问题:

更改多个配置文件后问题得以解决;

4.QT编译资源不更新问题:

删除qmake生成中间文件即可解决;

5.鼠标位置偏移:

再次运行校准程序使用笔进行精细校准;

6.字体显示异常:

下载文泉驿gpf字符并进行设置解决了问题;

7.程序与驱动需要手动加载:

编写和修改rcS与QT4配置脚本;

在两周的课程设计之后,对嵌入式开发有了更加深入的理解,提高了自学能力与实际操作解决问题的能力,通过不断的网络检索与书籍查询,收货非常多的新知识。

同时提高了与同学沟通问题的能力,对以后的工作有很大的帮助。

 

八参考文献

1、嵌入式系统接口设计与Linux驱动程序开发

刘淼编著北京:

北京航空航天大学出版社,2006.05

2、ARM9嵌入式LINUX系统构建与应用

潘巨龙编著北京:

北京航空航天大学出版社,2006

3、Linux驱动开发入门与实战

郑强编著:

北京:

清华大学出版社,2014

4、天嵌QT程序开发完全手册

天谴科技2009

5、Qt程序设计

Xteam(中国)软件技术有限公司编著北京:

清华大学出版社,2002

附录程序源码

main.cpp

#include

#include"zyt.h"

#include

#include

#include

#include

intfdled;

intfdbeep;

intmain(intargc,char*argv[])

{

fdled=open("/dev/zytled",O_RDWR);

fdbeep=open("/dev/zytbeep",O_RDWR);

QApplicationa(argc,argv);

zytw;

w.show();

w.move((QApplication:

:

desktop()->width()-w.width())/2,(QApplication:

:

desktop()->height()-w.height())/2);

returna.exec();

}

zyt.cpp

#include"zyt.h"

#include"ui_zyt.h"

#include

#include"aboutme.h"

#include

#include

#include

#include

#defineTURN_LEFT1

#defineTURN_RIGHT2

#defineLED_CLOSE0

#defineCLOSE_APP-1

externintfdled;

externintfdbeep;

intfreqSec=1;

intmodeFlag=0;

voiddelay(unsignedintmsec)

{

QTimedieTime=QTime:

:

currentTime().addMSecs(msec);

while(QTime:

:

currentTime()

QCoreApplication:

:

processEvents(QEventLoop:

:

AllEvents,100);

}

}

zyt:

:

zyt(QWidget*parent):

QMainWindow(parent),

ui(newUi:

:

zyt)

{

this->setAutoFillBackground(true);

QPalettepalette;

QPixmappixmap(":

/new/image/bg.bmp");

palette.setBrush(QPalette:

:

Window,QBrush(pixmap));

this->setPalette(palette);

ui->setupUi(this);

QFontft;

//ft.setFamily("arial");

ft.setPointSize(40);

ui->LED1->setFont(ft);

ui->LED2->setFont(ft);

ui->LED3->setFont(ft);

ui->LED4->setFont(ft);

ui->Beep->setFont(ft);

}

zyt:

:

~zyt()

{

deleteui;

}

voidzyt:

:

on_CheckBox_LED1_toggled(boolchecked)

{

QPaletteon;

on.setColor(QPalette:

:

WindowText,Qt:

:

red);

QPaletteoff;

off.setColor(QPalette:

:

WindowText,Qt:

:

black);

if(ui->CheckBox_LED1->isChecked()){

ui->LED1->setPalette(on);

}else{

ui->LED1->setPalette(off);

}

ioctl(fdled,checked,0);

}

voidzyt:

:

on_CheckBox_LED2_toggled(boolchecked)

{

QPaletteon;

on.setColor(QPalette:

:

WindowText,Qt:

:

red);

QPaletteoff;

off.setColor(QPalette:

:

WindowText,Qt:

:

black);

if(ui->CheckBox_LED2->isChecked()){

ui->LED2->setPalette(on);

}else{

ui->LED2->setPalette(off);

}

ioctl(fdled,checked,1);

}

voidzyt:

:

on_CheckBox_LED3_toggled(boolchecked)

{

QPaletteon;

on.setColor(QPalette:

:

WindowText,Qt:

:

red);

QPaletteoff;

off.setColor(QPalette:

:

WindowText,Qt:

:

black);

if(ui->CheckBox_LED3->isChecked()){

ui->LED3->setPalette(on);

}else{

ui->LED3->setPalette(off);

}

ioctl(fdled,checked,2);

}

voidzyt:

:

on_CheckBox_LED4_toggled(boolchecked)

{

QPaletteon;

on.setColor(QPalette:

:

WindowText,Qt:

:

red);

QPaletteoff;

off.setColor(QPalette:

:

WindowText,Qt:

:

black);

if(ui->CheckBox_LED4->isChecked()){

ui->LED4->setPalette(on);

}else{

ui->LED4->setPalette(off);

}

ioctl(fdled,checked,3);

}

voidzyt:

:

on_exitBtn_clicked()

{

modeFlag=CLOSE_APP;

QApplication*app;

app->exit();

}

voidzyt:

:

on_closeLEDBtn_clicked()

{

modeFlag=LED_CLOSE;

ui->CheckBox_LED1->setChecked(false);

ui->CheckBox_LED2->setChecked(false);

ui->CheckBox_LED3->setChecked(false);

ui->CheckBox_LED4->setChecked(false);

ioctl(fdbeep,false,3);

}

voidzyt:

:

on_turnLeftBtn_clicked()

{

on_closeLEDBtn_clicked();

modeFlag=TURN_LEFT;

QCheckBox*CheckBoxes[4];

CheckBoxes[0]=ui->CheckBox_LED1;

CheckBoxes[1]=ui->CheckBox_LED2;

CheckBoxes[2]=ui->CheckBox_LED3;

CheckBoxes[3]=ui->CheckBox_LED4;

inti=0;

QPaletteon;

on.setCo

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2