《QT串口编程.doc》由会员分享,可在线阅读,更多相关《QT串口编程.doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、QT串口编程.txt都是一个山的狐狸,你跟我讲什么聊斋,站在离你最近的地方,眺望你对别人的微笑,即使心是百般的疼痛只为把你的一举一动尽收眼底刺眼的白色,让我明白什么是纯粹的伤害。QT串口编程serial.cpp#include #include #include mainwindow.hint main(int argc, char *argv) QApplication a(argc,argv); MainWindow m; a.setMainWidget(&m); m.show(); return a.exec();mainwindow.h#ifndef MAIN_WINDOW_H #de
2、fine MAIN_WINDOW_H #include class QLabel; class QPushButton; class QLineEdit; class QPixmap; class SerialThread; class MainWindow:public QMainWindow Q_OBJECT public: MainWindow(QWidget * parent = 0, const char * name= 0) ; MainWindow(); void setCounter(int no); void setMsgText(char* txt); public slo
3、ts: void serialOperate(); void loadJPEGFile(); protected: void paintEvent( QPaintEvent * ); private: QLineEdit *msg; QPushButton *btn; QPushButton *btn2LoadImg; QPixmap *pix; QLabel *lab; SerialThread *a; int counter; ;#endif mainwindow.cpp #include #include #include #include #include #include #incl
4、ude #include #include #include mainwindow.h #include serialthread.h void MainWindow:paintEvent( QPaintEvent * ) QPainter paint( this ); paint.drawLine( 0,0,500,500 ); / draw line paint.drawPixmap(0,0,*pix); void MainWindow:loadJPEGFile() if(!pix-load(testjpeg) /if(!pix-load(circle) setMsgText(Load f
5、ailed); return; setMsgText(Load success!); update(); void MainWindow:setCounter(int no) counter = no; void MainWindow:serialOperate() a = new SerialThread(this); a-start(); a-wait(); MainWindow:MainWindow(QWidget * parent , const char * name) :QMainWindow(parent, name) counter = 0; QVBox *vbox; vbox
6、 = new QVBox(this); vbox-resize(300,150); /msg = new QLabel(SERIAL PROGRAMMING,vbox); msg = new QLineEdit(SERIAL PROGRAMMING,vbox); msg-resize(300,50); pix = new QPixmap(); btn = new QPushButton(vbox); btn-setText(GO!); QApplication:connect(btn,SIGNAL(clicked(),this,SLOT(serialOperate(); btn2LoadImg
7、 = new QPushButton(vbox); btn2LoadImg-setText(LOAD); lab = new QLabel(before load jpeg,vbox); QApplication:connect(btn2LoadImg,SIGNAL(clicked(),this,SLOT(loadJPEGFile(); /btn-resize(100,75); /vbox-show(); ; void MainWindow:setMsgText(char* txt) QString msgs(txt); QString count = QString:number(count
8、er,10); msgs.append(count); const char *re = msgs.ascii (); /strcat(msgs,); msg-setText(re); ; my_define.h#define BAUDRATE B115200 #define BLOCK_SIZE 200 #define DEVICE /dev/ttyS0 #define WAIT_TIME 5 #define CHANGE_LINE 0x0a #define ACK_NUM 3 #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define
9、FALSE -1 #endif serialthread.h#ifndef SERIAL_THREAD_H #define SERIAL_THREAD_H #include class MainWindow; class SerialThread: public QThread public: SerialThread(MainWindow *parent); virtual void run(); private: MainWindow *parent; ; #endifserialthread.cpp#include #include #include #include #include
10、#include my_define.h #include serialthread.h #include mainwindow.h int set_nc_mode(int fd) struct termios options; if ( tcgetattr( fd,&options) != 0) perror(SetupSerial 1); return(FALSE); /* get current port settings */ bzero(&options, sizeof(options); options.c_cflag |= BAUDRATE | CS8 | CLOCAL | CR
11、EAD; options.c_cflag &= CRTSCTS; options.c_iflag = IGNPAR; options.c_oflag &=OPOST; / options.c_lflag = 0; options.c_ccVTIME = WAIT_TIME; options.c_ccVMIN = BLOCK_SIZE; /* blocking read until 5 chars received */ tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&options); return(TRUE); int set_c_mode(int
12、fd) struct termios options; if ( tcgetattr( fd,&options) != 0) perror(SetupSerial 1); return(FALSE); bzero(&options, sizeof(options); tcflush(fd, TCIOFLUSH); cfsetispeed(&options, BAUDRATE); cfsetospeed(&options, BAUDRATE); options.c_cflag |=(CLOCAL|CREAD); options.c_cflag &= CRTSCTS; options.c_cfla
13、g &= CSIZE; options.c_cflag |= CS8; options.c_cflag &= PARENB; /* Clear parity enable,clear control mode flag */ options.c_iflag &= INPCK; /* Disable parity checking ,*/ options.c_cflag &= CSTOPB; options.c_iflag |= IGNBRK; options.c_lflag |= ICANON; options.c_lflag &= (ECHO | ECHOE | ISIG); options
14、.c_oflag &= (OPOST); tcflush(fd, TCIOFLUSH); if (tcsetattr(fd,TCSANOW,&options) != 0) perror(SetupSerial 3); return (FALSE); return(TRUE); void send_ack(int fd) char buf=A,C,K,CHANGE_LINE; write(fd,buf,sizeof(buf); void resend(int fd) char buf=R,S,D,CHANGE_LINE; write(fd,buf,sizeof(buf); void delay(
15、int i) int j; for (;i0;i-) for(j=0;jparent = parent; void SerialThread:run() int fd,c, res; int block_num,last_block; int i; char bufBLOCK_SIZE; char file_name32; FILE *fp; struct termios oldtio; block_num=last_block=0; fd = open(DEVICE, O_RDWR | O_NOCTTY ); parent-setCounter(fd); parent-setMsgText(
16、opend device fd:); if (fd setMsgText(open device failed); / exit(-1); tcgetattr(fd,&oldtio); set_nc_mode(fd); printf(Changed to nc moden); /* res=read(fd,( char *)file_name,32); parent-setCounter(res); parent-setMsgText(res is :); */ /* if(res0) file_nameres-1=0; printf(Received the file name:%sn,fi
17、le_name); else printf(The received file name is error.n); fp=fopen(file_name,wb); if(fp=NULL) printf(Can not creat file %s!n,file_name); return; / exit(-1); else send_ack(fd); printf(The file %s is created.nWaitting for the block num and last block sizen,file_name); /set_nc_mode(fd); /printf(Changed
18、 to nc moden); res=read(fd,buf,4); printf(res=%dn,res); printf(Received the block num n); for(i=0,block_num=0;i0) send_ack(fd); res=read(fd,buf,last_block); printf(res=%dn,res); if(res!=last_block) printf(Request resend the last blockn); tcflush(fd, TCIOFLUSH); resend(fd); else fwrite(buf,1,last_block,fp); send_ack(fd); printf(The file transports endn); fclose(fp); printf(close the filen); tcsetattr(fd,TCSANOW,&oldtio); close(fd); printf(close the serial portn); */