QT串口与51单片机通信.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
QT串口与51单片机通信

QT串口与51单片机通信 通过这个小例子主要想说明QT怎样进行线程编程的思想,实例如图,好吧,下面是过程 上一个例子我们采用的是手工编写代码的方法,这个例子我们来玩一下designer,其实Qt4己经把界面与功能分开了,用designer来进行界面 设计,再手工编写一些功能,如信号与槽,这样开发效率会大大提高,呵呵,开一个终端,输入/usr/local/Trolltech/Qt-4.5.1/bin/designer ,如果第一次打开出现字体不对,可以打开qtconfig进行一些相关配置,打开后我们新建一个Main Window,在右边的属性框中设置一下界面大小, 我ARM板的LCD大小为320x240,所以我也设为320x240;左边是一些我们常用的窗口部件,这里我们用到一个lable标签来做显示,再放几个 pushButton按钮,在属性objectName重新更改它的名字,改为我们记得的,这样在写功能时记得哪个按钮叫什么名字,对于一个初学QT的 人来说,很想知道每一个部件到底有什么信号和槽,别急,我们可以这样来看,选中一个lable,按F4,再点击lable拖动出现接地符号时松开 ,弹出编辑信号与槽,这时左边列出的是信号,右边为槽,这里我们不用配置连接,等下我们再手工写,最后我们用到一个lable标签和三个pushButton 按钮,并命名为dis_label、writeButton、readButton、closeButton,然后保存为mainwindow.ui,这样designer就完工了,呵呵.. ? 下面我们编写一个线程,用于管理串口收发工作,它不涉及到任何界面,只做好它的本份工作就得了,编写一个thread.h文件 gedit thread.h, #ifndef THREAD_H #define THREAD_H #includeQThread class Thread:public QThread { ? Q_OBJECT ?public: ? Thread();? ? char buf[128]; ? volatile bool stopped; ? volatile bool write_rs; ? volatile bool read_rs; ?protected: ? virtual void run(); }; #endif 我们定义一个Thread类,它继承于QThread,看到只设有一些变量和一个run函数,virtual表示为虚函数,你也可以去掉,加上去会增加一些内存开销, 但提高了效率,对于这个小程序是看不出什么效果的,volatile这个大家都懂了吧,就是防止偷懒,呵呵,再看看thread.cpp #includethread.h #include sys/types.h #include sys/stat.h #include fcntl.h #include termios.h??? //串口用到的 #include stdio.h #include stdlib.h #include unistd.h #include strings.h #define BAUDRATE B9600 //#define RS_DEVICE /dev/ttyS0?????? //串口1 #define RS_DEVICE /dev/ttySAC1?????? //串口1 Thread::Thread() {}???????????????????????????????????????????????? //析构 void Thread::run()????????? //这就是线程的具体工作了 { ?int fd,c=0,res; struct termios oldtio,newtio;???? //termios结构是用来保存波特率、字符大小等 printf(start...\n); fd=open(RS_DEVICE,O_RDWR|O_NOCTTY);???? //以读写方式打开串口。不控制TTY if(fd0) { perror(error); exit(1);???????????????????????????? //失败退出 } printf(Open...\n); tcgetattr(fd,oldtio);???????????? //保存当前设置到oldtio bzero(newtio,sizeof(newtio));???? //清除newtio结构,并重新对它的成员设置如下 newtio.c_cflag=BAUDRATE|CS8|CLOCAL|CREAD;? //9600、8位、忽略DCD信号、启用接收装置 newtio.c_iflag|=IGNPA

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档