用QtE实现SBC一241OX上的LED控制

来源:LED环球在线 作者:--- 时间:2011-03-16 00:00

led

  引言


  近年来,由于ARM(Advanced RISC Machines)在性能、功耗、成本和体积上的优势,使得它在嵌入式系统中的发展如日中天,它在工业控制、航空航天、军事领域、消费电子、智能家电和视频监控等方面都发挥了重大的作用。很多人都迫切地想学习ARM,以笔者的经验,从最基本的LED控制学起,是一个不错的选择。


  如果不熟悉Linux,可能对QtE的概念知之甚少,它是挪威Trolltech公司为各种系统设计的图形用户界面工具包,采用c++语言编程。QtE的优点有:跨平台,可以方便的连接数据库,可以将程序与Java集成等。其实,QtE在一些高端的移动手持设备中早已深入人心,Troll-tech公司在QtE的基础上开发了一个应用环境Qtopia,目前已有很多公司采用Qtopia来开发他们的主流PDA.当然,Qt也有它的缺点,既不能提供IDE(集成开发环境),但这个缺点在强大的Linux下显得微不足道。使用gcc/g++,加上Qt的开发工具:Qt Designer,tmake/qmake,UIC等,开发可视化程序将变得十分容易。


  要学习ARM,选择一款好的开发板是必不可少的。SBC一2410X是广州友善之臂公司设计的一款基于ARM9的开发板,操作系统是韩国的mizi-linux.SBC-2410X不同于uClinux,它的接口丰富,且支持MMU、QtE2.3.7,同时提供了控制LED的命令行方式。


  1 系统需求


  完全安装RedHat9.0.


  在Linux下建立QtE编译环境。


  开发板上已经加载LED设备驱动程序。


  注意:你所建立的QtE版本必须与开发板所支持的版本一致。


  2 程序设计


  在Linux下,用系统自带的Qt Designer来编写程序。Qt Designer是一个优秀的可视化开发工具,用它来设计十分容易。它的界面类似于Delphi,但使用C++语言编写应用程序。Qt程序设计里的一个亮点就是SignaI-_Slot机制,它有点类似于VC++里的消息机制。当一个组件发出Signal时,其他一个组件或多个组件可以通过Slot接收发来的SignaI,组件本身也可以接收自己的Signal,这样处理一个事件将变得非常容易。Qt Designer的优点不仅在于它可以十分方便的设计图形用户界面,还表现在可以用连接工具很容易的把Signals和Slots连接起来。用户自己设计的程序添加在**.ui.h中。


  打开Qt Deslgner,选择File/new C++Project,命名为led.pro并保存。接着选择File/new-Dialog,并在此设计自己的用户界面。最后选择File/new C++Main-File,系统自动生成一个main。cpp文件。图形用户界面如图1所示,Initlalize按钮主要完成LED设备的打开,定时器的关闭和其他一些初始化工作;Begim按钮则针对LED Display Mode的开始;Exit按钮为退出应用程序。左面的组合框包括4个RadioButton,对应4个LED的亮或灭;右面的组合框包括6个RadioButton(对应不同的闪烁模式和闪烁快慢)和1个LCDNumber(用来显示闪烁的时间间隔)。本程序建立的Signal-S1ot连接有许多,下面对几个重要的连接和函数进行说明。


  (1)connect(initPushButton.SIGNAL(clicked()),this.SLOT(initial()))


  当Initialize按钮按下时,LedForm对话框接收此信号,并执行initial()函数。Linux操作系统把所有的设备都看成文件,因此对设备的操作控制可以通过open()、ioctl()等函数实现。在initial()函数中就是调用了open()函数来打开LED设备的。


  (2)connect(okPushButton,SIGNAL(clicked()),this,SLOT(modeSel()))


  当Begin按钮按下时,LedForm对话框接收此信号,并执行modeSel()函数。在modeSel()函数中开启定时器,并创建另外一个连接用来循环显示LED.在命令行方式中,LED的循环显示要用到死循环,并用键盘中断来控制循环;而在Qt或其他可视化语言中,则要用到定时器来控制循环。


  (3)函数open()


  在中声明,含义为打开设备文件。打开成功返回0;失败返回一1.


  (4)函数ioctl()


  在中声明,控制I/O端口。例如:


  Int fd=open(“/dev/leds”,0);


  ioctl(fd,0,3); //让LED4灭


  (5)函数select()


  在中声明,含义为经过多长时间访问一次设备。


  3 程序移植与运行


  要想使程序运行在开发板的Qtopia中,则必须在建立的QtE环境下编译,并设置好环境变量。终端进入所建立的QtE目录后,环境变量或运行环境变量和脚本设置如下:


  export QTDIR=$PWD/qt


  export QPEDlR=$PWD/qtopia


  export TMAKEDIR=$PWD/tmake


  export TMAKEPATH=$TMAKEDIR/lib/qws/linux-armg++


  export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/


  bin:$PATH


  值得注意的一点是:用Linux自带的Qt Designer创建的工程文件只适用于qmake,而笔者建立的QtE环境只能用tmake来生成makefile,因此需要修改led.pro文件,让它适用于tmake,修改如下:


  TEMPLATE =app


  CoNFIG +=qtopia warn_on release


  SoURCES +=main。epp


  INTERFACES =led.ui


  TARGET =led


  以上的工作做完后,就可以编译了。编译成功后生成可执行的二进制文件led,然而要使程序运行在开发板上的qtopia桌面上,还需要一个桌面文件led.desktop和自定义的一个图标led.pnghttp://www.hqew.com/file/CMSImages/2011/03/bin目录下,led.png复制到/opt/qtopia/pics目录下,led.desktop复制到/0pt/qtopia/apps/Applications目录下。最后,用ehmod a+X led改变文件led的权限,重新启动系统,便可看到led.pnghttp://www.hqew.com/file/CMSImages/2011/03/span>

相关文章 led

资讯排行榜

  • 每日排行
  • 每周排行
  • 每月排行

华强资讯微信号

关注方法:
· 使用微信扫一扫二维码
· 搜索微信号:华强微电子