Chinaunix首页 | 论坛 | 博客
  • 博客访问: 410097
  • 博文数量: 62
  • 博客积分: 1483
  • 博客等级: 上尉
  • 技术积分: 779
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-24 12:25
文章分类

全部博文(62)

文章存档

2012年(2)

2011年(6)

2010年(6)

2009年(48)

我的朋友

分类: LINUX

2009-11-23 21:51:20

qt的pwm测试小程序
hello.h----------------------------
#include
#include
#include
#include
#include
#include
#include

class myMainWindow : public QWidget
{
    Q_OBJECT
    public:
        myMainWindow();
        void startPwm(void);
        void stopPwm(void);
    public slots:
        void bEvent(); //按钮事件
        void add();
        void sub();
        void rst();
    private:
        bool flag; //启动/停止指示
        QPushButton *b_on1;
        QPushButton *reset;
        QPushButton *bAdd;
        QPushButton *bSub;
        QLineEdit *edit;
        QLabel *label;
};
hello.cpp--------------------------
#include "hello.h"

myMainWindow::myMainWindow()
{
    setMinimumSize(200,200);
    setMaximumSize(200,200);

    label = new QLabel(this);
    label->setMinimumSize(150,60);
    label->setMaximumSize(240,30);
    label->setFont(QFont("Times",15,QFont::Black));
    label->setText("press the button to\n"
                    "turn on the buzzer");
    label->setAlignment(AlignCenter);

    flag = 0; //初始化为0,表示当前是停止状态的

    b_on1 = new QPushButton("start",this);
    b_on1->setMinimumSize(30,20);
    b_on1->setFont(QFont("Times",15,QFont::Bold));

    reset = new QPushButton("reset",this);
    reset->setMinimumSize(30,20);
    reset->setFont(QFont("Times",15,QFont::Bold));

    QHBoxLayout * hbox2 = new QHBoxLayout();
    hbox2->addWidget(b_on1);
    hbox2->addWidget(reset);

    bAdd = new QPushButton("+",this);
    bAdd->setMinimumSize(20,20);
    bAdd->setFont(QFont("Times",15,QFont::Bold));

    bSub = new QPushButton("-",this);
    bSub->setMinimumSize(20,20);
    bSub->setFont(QFont("Times",15,QFont::Bold));

    edit = new QLineEdit(this);
    edit->setMinimumSize(20,40);
    edit->setText(QString("1"));
  
    QVBoxLayout *vbox1 = new QVBoxLayout();
    vbox1->addWidget(bAdd);
    vbox1->addWidget(bSub);

    QHBoxLayout *hbox1 = new QHBoxLayout();
    hbox1->addWidget(edit);
    hbox1->addLayout(vbox1);
  

    QVBoxLayout *vbox = new QVBoxLayout(this);
    vbox->addWidget(label);
    vbox->addLayout(hbox1);
    vbox->addLayout(hbox2);

    connect(b_on1,SIGNAL(clicked()),this,SLOT(bEvent()));
    connect(reset,SIGNAL(clicked()),this,SLOT(rst()));
    connect(bAdd,SIGNAL(clicked()),this,SLOT(add()));
    connect(bSub,SIGNAL(clicked()),this,SLOT(sub()));

//    setWindowTitle("ad convert"); //这个东东在qte2.2.0版本里没有
}

#include
#include
#include
#include
#include
#include
#include

#define PWM_IOCTL_SET_FREQ        1
#define PWM_IOCTL_STOP            2

void myMainWindow::startPwm()
{
    int fd,val;
    QString tmp;
    fd = open("/dev/qq2440_pwm", 0);
    if (fd < 0) {
        perror("open device qq2440_pwm");
        exit(1);
    }

    tmp = edit->text();
    val = tmp.toInt();
 
    ioctl(fd,PWM_IOCTL_SET_FREQ,val);
    ::close(fd);
}

void myMainWindow::stopPwm()
{
    int fd;
    fd = open("/dev/qq2440_pwm", 0);
    if (fd < 0) {
        perror("open device qq2440_pwm");
        exit(1);
    }
 
    ioctl(fd,PWM_IOCTL_STOP);
    ::close(fd);
}

void myMainWindow::add()
{
    QString tmp;
    int val;
    tmp = edit->text();
    val = tmp.toInt();
    val <<= 1;
    edit->setText(tmp.number(val));
    if(flag)
        startPwm();
}

void myMainWindow::sub()
{
    QString tmp;
    int val;
    tmp = edit->text();
    val = tmp.toInt();
    val >>= 1;
    edit->setText(tmp.number(val));

    if(flag)
        startPwm();
}

void myMainWindow::rst()
{
    edit->setText(QString("1"));
    b_on1->setText(QString("start"));
    flag = false;
    stopPwm();
}

void myMainWindow::bEvent()
{
    flag = (flag?false:true); //改变标志
    if(flag){ //这里表示开始pwm
        b_on1->setText(QString("stop"));
        startPwm();
    }else{ //这里是关闭pwm
        b_on1->setText(QString("start"));
        stopPwm();
    }
}

int main(int argc,char **argv)
{
    QApplication a(argc,argv);
    myMainWindow w;
    a.setMainWidget(&w);
    w.show();
    a.exec();
}

不足之处是,改变频率的时候,有延迟,没有处理输入变化时的
代码

阅读(2427) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~