- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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#includeQThreadclass 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?????? //串口1Thread::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);???? //以读写方式打开串口。不控制TTYif(fd0){perror(error);exit(1);???????????????????????????? //失败退出}printf(Open...\n);tcgetattr(fd,oldtio);???????????? //保存当前设置到oldtiobzero(newtio,sizeof(newtio));???? //清除newtio结构,并重新对它的成员设置如下newtio.c_cflag=BAUDRATE|CS8|CLOCAL|CREAD;? //9600、8位、忽略DCD信号、启用接收装置newtio.c_iflag|=IGNPA
文档评论(0)