基于QT的实验平台模块控制设计Word格式文档下载.docx

上传人:b****4 文档编号:7822845 上传时间:2023-05-09 格式:DOCX 页数:38 大小:209.58KB
下载 相关 举报
基于QT的实验平台模块控制设计Word格式文档下载.docx_第1页
第1页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第2页
第2页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第3页
第3页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第4页
第4页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第5页
第5页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第6页
第6页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第7页
第7页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第8页
第8页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第9页
第9页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第10页
第10页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第11页
第11页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第12页
第12页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第13页
第13页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第14页
第14页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第15页
第15页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第16页
第16页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第17页
第17页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第18页
第18页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第19页
第19页 / 共38页
基于QT的实验平台模块控制设计Word格式文档下载.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于QT的实验平台模块控制设计Word格式文档下载.docx

《基于QT的实验平台模块控制设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于QT的实验平台模块控制设计Word格式文档下载.docx(38页珍藏版)》请在冰点文库上搜索。

基于QT的实验平台模块控制设计Word格式文档下载.docx

#include"

PWMthread.h"

//包含PWM线程类的声明

uartThread.h"

//包含UART线程类的声明

canThread.h"

//包含canThread线程类的声明

/*IOCTLcommands*/

#defineLED_IOC_WR_ON1//LED灯亮

#defineLED_IOC_WR_OFF0//LED灯灭

#defineDCM_IOCTRL_STARTPWM(0x10)//PWM开始工作

#defineDCM_IOCTRL_SETPWM(0x20)//设置PWM

#defineDCM_IOCTRL_STOPPWM(0x30)//停止PWM

#defineDCM_TCNTB(16384)

#defineDCM_FACTOR(DCM_TCNTB/1024)

namespaceUi

{

classLed;

}

classMyLed:

publicQWidget

Q_OBJECT

public:

MyLed(QWidget*parent=0);

~MyLed();

protected:

voidchangeEvent(QEvent*e);

private:

Ui:

:

Led*ui;

intfd1;

//用于LED设备文件

intfd2;

//用于CAN总线设备

PwmThread*pwm;

//定义pwm线程对象

uartThread*uart;

//定义uart线程对象

canThread*canSend;

//定义CAN总线接收线程对象

canThread*canRec;

//定义CAN总线发送线程对象

//槽函数

privateslots:

voidchange_tab(intindex);

//切换TAB

//LED控制

voidon_led3_off_clicked();

//按钮led3_off按下LED3灭

voidon_led3_on_clicked();

//按钮led3_on按下LED3亮

voidon_led2_off_clicked();

voidon_led2_on_clicked();

voidon_led1_off_clicked();

voidon_led1_on_clicked();

//DC-MOTOR控制

voidon_dc_off_clicked();

//按钮dc_off按下电机停止运转

voidon_dc_right_clicked();

//按钮dc_right按下电机顺时针转

voidon_dc_left_clicked();

//按钮dc_left按下电机逆时针转

voidon_dc_cycle_clicked();

//按钮dc_cycle按下电机先顺时针转后逆时针转

//uart通信控制

voidon_s_led1_on_clicked();

//按钮s_led1_on按下发送信号,接收方LED1亮

voidon_s_led2_on_clicked();

//按钮s_led2_on按下发送信号,接收方LED2亮

voidon_s_led3_on_clicked();

//按钮s_led3_on按下发送信号,接收方LED3亮

voiduart_receive(QString);

//串口接收到数据的处理

voidon_all_off_clicked();

//按钮all_off按下发送信号,接收方所有LED灭

voidon_text_clear_clicked();

//按钮text_clear按下清除显示文本

//CAN总线通信控制

voidon_leds_on_clicked();

//按钮leds_on按下发送信号,接收方所有LED灯亮

voidon_leds_off_clicked();

//按钮leds_off按下发送信号,接收方所有LED灯灭

voidon_hello_clicked();

//按钮hello按下发送"

Hello"

voidcan_receive(QString);

//接收到数据的处理

voidon_can_clear_clicked();

//按钮can_clear按下清除CAN总线通信的显示窗口

};

#endif//LED_H

/*=========================================\

*FILE:

PWMthread.h

*FUNCITION:

定义PWM线程类,实现PWM的控制

\*============================================*/

#ifndefPWMTHREAD_H

#definePWMTHREAD_H

#include<

QThread>

classPwmThread:

publicQThread//继承QThread类

PwmThread();

//构造函数

~PwmThread();

//析构函数

voidrun();

//重载run()函数,实现自定义功能

voidThreadStart();

//启动线程

voiddelay(intt=0);

//延时

intmode;

//电机的转动模式控制:

0停止,1正转,2反转,3正反

intdcm_fd;

//设备文件

intsetpwm;

//定义占空比

intflag;

//标志:

0退出线程,1正常

#endif//PWMTHREAD_H

*FILENAME:

canThread.h

定义CAN总线通信线程类,实现CAN总线通信的控制

#ifndefCANTHREAD_H

#defineCANTHREAD_H

stdio.h>

time.h>

sys/types.h>

sys/ipc.h>

pthread.h>

#defineUPCAN_IOCTRL_SETBAND0x1//设置波特率

#defineUPCAN_IOCTRL_SETID0x2//设置CAN总线的ID

#defineUPCAN_IOCTRL_SETLPBK0x3//设置CAN总线的工作模式:

1自循环模式,0正常模式

#defineUPCAN_IOCTRL_SETFILTER0x4//设置CAN总线的过滤器

#defineUPCAN_IOCTRL_PRINTRIGISTER0x5//输出SPI和portE的寄存器信息

#defineUPCAN_EXCAN(1<

<

31)//设置外部CAN标记flag

#defineMAX_CANDATALEN8//定义CAN总线数据的最大长度

#defineCAN_DEV"

/dev/can/0"

//定义CAN总线设备文件

//定义波特率枚举变量

typedefenum{

BandRate_125kbps=1,

BandRate_250kbps=2,

BandRate_500kbps=3,

BandRate_1Mbps=4

}CanBandRate;

//定义CAN总线数据结构体

typedefstruct{

unsignedintid;

//CAN总线ID

unsignedchardata[8];

//CAN总线数据

unsignedchardlc;

//数据长度

intIsExt;

//是否扩展总线

intrxRTR;

//是否扩展远程帧

}CanData,*PCanData;

/*********************************************************************\

CAN设备设置接收过滤器结构体

参数:

IdMask,Mask

IdFilter,Filter

是否接收数据按如下规律:

MaskFilterRevIDReceive

0xxyes

100yes

101no

110no

111yes

\*********************************************************************/

typedefstruct{

unsignedintMask;

unsignedintFilter;

//是否扩展ID

}CanFilter,*PCanFilter;

//canThread类的定义

classcanThread:

publicQThread

Q_OBJECT//申明为包含自定义信号槽的类

canThread(intfd=0);

//重载run()函数

voidcanRev();

//接收数据

voidCanSendString(char*pstr);

//发送数据

//线程标记,1工作,0停止

intcan_fd;

//CAN总线设备文件

intrecv_status;

//接收0停止,1开始

intsend_status;

//发送0停止1开始

intstatus;

//0接收,1发送

QStringsendbuf;

//待发送的数据

signals:

voidrecv_can(QStringstr);

//自定义的接收数据信号

#endif//CANTHREAD_H

FILENAME:

uartThread.h

FUNCTION:

定义uart通信线程类

#ifndefUARTTHREAD_H

#defineUARTTHREAD_H

classuartThread:

publicQThread

uartThread();

~uartThread();

//线程标记:

0停止,1运行

intuart_fd;

//uart设备文件

//uart接收标记

//uart发送标记

//uart发送的数据

voidrecv_uart(QStringstr);

//接收到数据发出信号

publicslots:

#endif//UARTTHREAD_H

PWMThread.cpp

FUNCTION:

PWM线程类的实现

#include"

//PWM线程类的定义

#defineDCM_IOCTRL_STARTPWM(0x10)

#defineDCM_IOCTRL_SETPWM(0x20)

#defineDCM_IOCTRL_STOPPWM(0x30)

#defineDCM_TCNTB(16384)

#defineDCM_FACTOR(DCM_TCNTB/1024)

//构造函数

PwmThread:

PwmThread()

this->

flag=1;

//线程工作标记为1

mode=0;

//电机动作模式为0,即停止

setpwm=0;

//占空比为0

//析构函数

~PwmThread()

:

close(dcm_fd);

//关闭设备文件

//重载线程类的run()函数,实现自定义的功能

voidPwmThread:

run()

intstatus=1;

//用于控制反向

inti;

dcm_fd=open("

/dev/dcm/0raw"

O_WRONLY);

//打开设备文件,写方式

if(dcm_fd<

0)//打开设备文件失败

{

qDebug("

cannotopendevice/dev/dcm/0raw"

);

}

while(flag)//如果线程为工作状态

if(this->

mode==0)//方式0工作,电机停转

ioctl(dcm_fd,DCM_IOCTRL_STOPPWM,mode);

elseif(mode>

=1&

&

mode<

=3)//方式1-3工作

ioctl(dcm_fd,DCM_IOCTRL_STARTPWM,mode);

for(i=512;

i>

=-512;

i--)//控制速度从低到高

if(status==1)setpwm=i;

elsesetpwm=-i;

ioctl(dcm_fd,DCM_IOCTRL_SETPWM,setpwm*DCM_FACTOR);

delay(500);

status=-status;

//启动线程

ThreadStart()

start();

//延时函数

delay(intt)

for(;

t>

0;

t--)

for(i=0;

i<

400;

i++);

canThread.cpp

canThread线程类的实现

canThread:

canThread(intfd)

flag=1;

//工作标志置1

status=0;

//接收状态

recv_status=0;

//接收状态停止

send_status=0;

//发送状态停止

can_fd=fd;

//打开设备文件

//重载run()函数

voidcanThread:

intid=0x123;

//CanID

CANThreadstart:

"

ioctl(can_fd,UPCAN_IOCTRL_PRINTRIGISTER,1);

//输出SPI和portE的寄存器信息

ioctl(can_fd,UPCAN_IOCTRL_SETID,id);

//设置CAN总线的ID

#ifdefDEBUG

ioctl(can_fd,UPCAN_IOCTRL_SETLPBK,0);

//设置CAN总线的工作模式:

#endif

/*Createthethreads*/

while(flag)//线程工作

recv_status==1)//如果为接收状态

canRev();

send_status==1)//如果为发送状态

CanSendString(sendbuf.toLatin1().data());

//发送状态置0,防止重复发送

close(can_fd);

//接收数据

canRev()

CanDatadata;

intcount;

QStringstr;

count=read(can_fd,&

data,sizeof(CanData));

//接收数据到data,并用count接收read()返回的接收到的数据长度

if((data.dlc>

0)&

(count>

0))//若接收到有效数据

str=str.sprintf("

%s"

data.data);

//将unsignedchar*数据转换为QString类数据

emitrecv_can(str);

//发出接收信号

//发送数据

CanSendString(char*pstr)

intlen=strlen(pstr);

memset(&

data,0,sizeof(CanData));

//初始化data

data.id=0x123;

//设置dataid

data.dlc=8;

//设置数据长度

len>

MAX_CANDATALEN;

len-=MAX_CANDATALEN)

memcpy(data.data,pstr,8);

//复制数据到Pstr

write(can_fd,&

data,sizeof(data));

//写数据到文件

pstr+=8;

//写下一字节数据

data.dlc=len;

//设置数据长度

memcpy(data.data,pstr,len);

//写数据文件

//写数据

start();

led.cpp

实现程序中LED的控制及PWM线程,can线程,uart线程的控制

led.h"

ui_final.h"

externintstatus;

//防止电机开机运行

MyLed:

MyLed(QWidget*parent):

QWidget(parent),ui(newUi:

Led)

ui->

setupUi(this);

fd2=open("

O_RDWR|O_NONBLOCK);

//CAN

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2