读ad的qt代码


分类: qt入门/开发

adc读数qt代码,开始以为需要qt的多线程方法,后来看到了了
QTimer这个类,呵呵,他也可以实现
一边控制主窗口,一边读外部文件的不确定的数据(ad采集)
hello.h----------------------------
#include <qapplication.h>
#include <qwidget.h>
#include <qpushbutton.h>
#include <qfont.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qtimer.h>
#include <qlcdnumber.h>
class myMainWindow : public QWidget
{
    Q_OBJECT
    public:
        myMainWindow();
    public slots:
        void getAd();
        void bEvent(); //按钮事件
    private:
        int fd;
        bool flag;
        QPushButton *b_on1;
        QLabel *label;
        QTimer *readAdc;
        QLCDNumber *lcdnum;
};
hello.cpp---------------------------
#include "hello.h"
myMainWindow::myMainWindow()
{
    setMinimumSize(200,200);
    setMaximumSize(200,200);
    flag = 0; //初始化成0,表示未启动ad转换
    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"
                    "get ad data");
    label->setAlignment(AlignCenter);
    b_on1 = new QPushButton("start",this);
    b_on1->setMinimumSize(50,20);
    b_on1->setFont(QFont("Times",15,QFont::Bold));
    lcdnum = new QLCDNumber(this);
    lcdnum->setSegmentStyle(QLCDNumber::Filled);
    lcdnum->display(0);
    QVBoxLayout *vbox = new QVBoxLayout(this);
    vbox->addWidget(label);
    vbox->addWidget(lcdnum);
    vbox->addWidget(b_on1);
    connect(b_on1,SIGNAL(clicked()),this,SLOT(bEvent()));
    readAdc = new QTimer(this); //使用q版定时器,问题就解决了。
    connect(readAdc,SIGNAL(timeout()),this,SLOT(getAd()));
    readAdc->stop(); //先不开启,等按钮被按下才开始
//    setWindowTitle("ad convert"); //这个东东在qte2.2.0版本里没有
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define CMD_ADC_START_AND_GET     1
#define CMD_SEL_MUX   2
void myMainWindow::getAd() //这个槽要根据flag的值来判断启动adc与否
{
    int val = 0;
    if(flag){
        readAdc->stop();
        fd = open("/dev/myadc", 0);
        if (fd < 0) {
            perror("open device adc");
            exit(1);
        }
        ioctl(fd, CMD_SEL_MUX, 0); //选择通道0
        val = ioctl(fd,CMD_ADC_START_AND_GET);
        ::close(fd);
        lcdnum->display(val);
        readAdc->start(100);
    }else{
        readAdc->stop(); //停止qtimer
        lcdnum->display(0); //显示成0
    }
}
void myMainWindow::bEvent()
{
    flag = (flag?false:true); //改变标志
    if(flag){ //这里表示开始adc
        b_on1->setText(QString("stop"));
        readAdc->start(100); //激活定时器
    }else{ //这里是关闭adc
        b_on1->setText(QString("start"));
    }
}
int main(int argc,char **argv)
{
    QApplication a(argc,argv);
    myMainWindow w;
    a.setMainWidget(&w);
    w.show();
    a.exec();
}
-------------------------------
按下start按钮开始读ad数据,按钮变成stop字样,再按停止读ad数据
读ad的qt代码 - SCE - ARM_UCLINUX

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值