分享

Qtopia应用程序(led控制)(源码) Qtopia技术交流专区 ARM9之家论坛 -...

 hetin 2011-01-05

 
 
                        http://www./simple/index.php?t4354.html
发现网上这种资料不多,但我发现这对初学者尤其重要,我刚刚接触Qtopia,编了个小程序,希望大家多多指正批评。
我觉得友善的应用程序不开源会增加我们的好奇心,我想这也是他们的初衷,哈哈
希望大家多多讨论,共同进步……

myled.h

#ifndef _MYLED_H_
#define _MYLED_H_

#include <qwidget.h>

class Myled : public QWidget
{
  Q_OBJECT

public:
  Myled( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
  ~Myled() {};

public slots:       // 自定义的槽
  void runled();

private:
  void startled();
};

#endif // _MYLED_H_

myled.cpp
#include <qpushbutton.h>
#include <qtopia/qpeapplication.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>

#include "myled.h"


Myled::Myled( QWidget* parent, const char* name, WFlags fl )
{
  startled();
}

void Myled::startled()
{
  QPushButton* quit = new QPushButton("START", this);   //创建按钮
  connect(quit, SIGNAL(clicked()), this, SLOT(runled()));    //连接槽
}

void Myled::runled()
{
  volatile int i, j, k;

    int fd=::open("/dev/leds", 0);  // 打开设备
    for (k=0; k<4; k++)
    {
      ::ioctl(fd, 0, 1);
      for (i=0;i<30000;i++)
        for (j=0;j<500;j++);
      ::ioctl(fd, 1, 1);
      for (i=0;i<30000;i++)
        for (j=0;j<500;j++);
    }

    ::close(fd); // 关闭设备
}


main.cpp
#include "myled.h"
#include <qtopia/qpeapplication.h>

QTOPIA_ADD_APPLICATION("myled",Myled)
QTOPIA_MAIN


myled.pro
CONFIG        += qtopiaapp
CONFIG        -= buildQuicklaunch
DESTDIR    = $(QPEDIR)/bin

HEADERS    = myled.h
SOURCES    = myled.cpp

SOURCES+=main.cpp

TARGET        = myled


myled.desktop
[Desktop Entry]
Comment[]=A LED Program
Exec=myled
Icon=myled
Type=Application
Name=myled


将以上代码放到一个文件夹,然后从hello中copy来build,build一下就欧了
eddylau 2010-01-15 20:03
很好!

建议用Qt designer来倉建GUI界面.

延时方面可用sleep() 或usleep()涵数来做会比较凖确点.

  

mindee 2010-01-15 22:08
这哥们很乐观啊,我们以后会编写关于QtE编程方面的文档。
你的程序中可以增加system("/etc/init.d/leds stop")系统调用,以便程序开启时关闭led-player闪灯程序。
不过我们实际提供的qtopia led测试程序并不是使用这个方法,而是通过进程控制函数把led-player进程设置为T,程序退出时再恢复。

wujianming 2010-01-15 23:44
看起来 很简单呢。就是不懂

cole3 2010-01-16 10:08
哦,原来可以用system("/etc/init.d/leds stop")啊,呵呵
我是先把led-player从启动项里删了,哈哈

cole3 2010-01-16 10:10
谢谢您的建议,sleep()比for()好多了,呵呵

eddylau 2010-01-16 11:23
引用
引用第2楼mindee于2010-01-15 22:08发表的  :
这哥们很乐观啊,我们以后会编写关于QtE编程方面的文档。
你的程序中可以增加system("/etc/init.d/leds stop")系统调用,以便程序开启时关闭led-player闪灯程序。
不过我们实际提供的qtopia led测试程序并不是使用这个方法,而是通过进程控制函数把led-player进程设置为T,程序退出时再恢复。


mindee 果然有料到.

非常期待你们关于QtE编程方面的文档。


douzidouer 2010-01-24 12:40
支持原创  

douzidouer 2010-01-25 23:11
如果方便的话希望您的解释下myled.cpp各个头文件的意思
还有关键代码的意义。
呵呵有些地方不知道理解的对不对。
还有关于sleep函数  
有输入参数么
这些函数要在哪里进行查询呢?
有没有类似msdn的工具可以方便查询我们要使用的函数呢?

douzidouer 2010-01-25 23:47
引用
引用第2楼mindee于2010-01-15 22:08发表的  :
这哥们很乐观啊,我们以后会编写关于QtE编程方面的文档。
你的程序中可以增加system("/etc/init.d/leds stop")系统调用,以便程序开启时关闭led-player闪灯程序。
不过我们实际提供的qtopia led测试程序并不是使用这个方法,而是通过进程控制函数把led-player进程设置为T,程序退出时再恢复。


mindee

我发现在    /etc/init.d/leds           这个路径下的系统调用没法停止leds
而是在        /etc/rc.d/init.d/leds   这个系统调用可以停止leds

另外问下
system("/etc/rc.d/init.d/leds stop")  是停止
那system("/etc/rc.d/init.d/leds start")  是开启吧

eddylau 2010-01-26 10:31
引用
引用第8楼douzidouer于2010-01-25 23:11发表的  :
如果方便的话希望您的解释下myled.cpp各个头文件的意思
还有关键代码的意义。
呵呵有些地方不知道理解的对不对。
还有关于sleep函数  
有输入参数么
.......


sleep(5) => 5 seconds

usleep(5) => 5 micro seconds

you can get more info about sleep by :

#man 3 sleep

or

#info sleep


cole3 2010-01-31 10:11
led.c的头文件,前两个是qtopia的,后面的是驱动程序用到的
关键代码实际上和测试程序是一样的,

cole3 2010-01-31 10:13
还有就是最好用::open,::ioctl,::close,因为他们可能和qtopia中的函数重名

curay 2010-01-31 22:30
请问楼主:

  ::ioctl(fd, 0, 1);

这样的的双冒号开头的调用, 是C++的语法么?

以前没有见过

请指教

cole3 2010-02-01 12:10
呵呵,我也不知道,我是从论坛上,看到别人这么用的

eddylau 2010-02-01 12:35
引用
引用第13楼curay于2010-01-31 22:30发表的 回 楼主(cole3) 的帖子 :
请问楼主:

  ::ioctl(fd, 0, 1);

这样的的双冒号开头的调用, 是C++的语法么?
.......


:: 是C++的scope resolution operator(范围解释运算子)
当变数名称有冲突时便可使用它来作范围解释.

可参考以下帖子:

http://serc.iisc./ComputingFacilities/systems/cluster/vac-7.0/html/language/ref/clrc05cplr175.htm


wang_ge_whut 2010-02-03 17:12
我终于回来了

gx8828418 2010-02-13 10:26
分别从西边幸福vcxvcxv

gx8828418 2010-02-26 20:25
楼主,能不能发个QT开发步骤,就是工程的创建过程。

gx8828418 2010-02-26 20:26
不知道开发过程,很郁闷啊    

curay 2010-02-26 20:34
引用
引用第19楼gx8828418于2010-02-26 20:26发表的  :
不知道开发过程,很郁闷啊    


开发过程手册上都有 熟读手册再来发问吧

curay 2010-02-26 20:34
eddylau兄
我越来越佩服你了
我觉得你越来越神秘了啊

gx8828418 2010-02-26 21:01
呵呵,可以了,自己解决了。

gx8828418 2010-02-26 21:05
你的led灯的定义是从0开始还是从1开始的 啊?是GPIO6闪4次?

gx8828418 2010-02-28 17:32

画夹 2010-11-15 16:00
干得漂亮

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多
    热门阅读 换一换