RSS

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

来源:网络 作者:不详 时间:2007-03-02 Tag: 点击:


TEMPLATE =app
CoNFIG +=qtopia warn_on release
SoURCES +=main.epp
INTERFACES =led.ui
TARGET =led

    以上的工作做完后,就可以编译了。编译成功后生成可执行的二进制文件led,然而要使程序运行在开发板上的qtopia桌面上,还需要一个桌面文件led.desktop和自定义的一个图标led.png。桌面文件如下:
[Desktop Entry]
Comment=a LED Control Program
Exee=led
Icon=led
Type=Application
Name=LED Control

    然后,把led复制到SBC-2410X下/opt/qtopia/bin目录下,led.png复制到/opt/qtopia/pics目录下,led.desktop复制到/0pt/qtopia/apps/Applications目录下。最后,用ehmod a+X led改变文件led的权限,重新启动系统,便可看到led.png的图标显示在qtopia桌面上,点击此图标就可运行程序了。


4 部分源程序及注释
    由于源程序代码比较长,这里就不全部列出了,仅给出重要部分的代码及注释,以供读者参考。

(1) 程序的初始化

int fd: //LED设备文件句柄
int type=1; //默认方式为计数器
double period=0.2; //默认时间间隔
QTimer*t=new QTimer(Q″timer″);//创建定时器
void LedForm::initial(){
fd=open(″/dev/leds″,0); //打开LED设备
//其他一些初始化语句
一>stop(); //关闭定时器


(2) LED显示方式的设置

void LedForm::push-leds(void){
static unsigned step;
unsigned led?bitmap;
inti;
switch(type){
case 0: //方式0:跑马灯
if(step>=14){step=0;}
if(step<7){led_bitmap=1<<step;}
else{led_bitmap=1<<(14一step);}
break;
case 1: //方式1:计数器
if(step>255){step=0;)
Ied_bitmap=step!
break;
case 2: //方式2:停止
led_bitmap=0:
break;
step十十;
for(i=0;i<8;l++){
ioctl(fd,led_bitmap&1,i);
led_bitmap>>=1;
}
}

(3) LED设备的读取及调用LED显示程序

void LedForm::ledDisplay(){
fd_set rds;
struct timeval step;
FD_ZERO(&rds);
step.tv_sec=period;
step.tv_usec=(pefiod?step.W_sec)*1000000L;
select(fd,&rds,NULL,NULL,&step);
push_leds();
}

(4)循环显示的实现
void LedForm::modeSel(){
t-->start(O);//启动定时器,并立即发出Signal- timeout()
connect(t,SIGNAL(timeout()),this.SLOT(1edDisplay()));
}


结 语
    随着通信行业的迅猛发展,移动手持设备必将成为人们工作、学习和生活的主流,用Qt设计移动手持设备的GUI有着得天独厚的优势。目前,Qt应用于全世界上百个软件开发项目中。在我国,Qt的发展也有星星之火可以燎原之势。本文通过一个最基础的小程序向读者演示了怎样使用Qt开发应用程序,以及怎样建立Qt与ARM的联系,希望对读者学习ARM和Qt起到一定的帮助作用。


1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
教程下载