虚拟仪器课程设计.docx
《虚拟仪器课程设计.docx》由会员分享,可在线阅读,更多相关《虚拟仪器课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
![虚拟仪器课程设计.docx](https://file1.bdocx.com/fileroot1/2022-12/31/1617dc4a-3e0f-40be-87ec-f635b5fd0043/1617dc4a-3e0f-40be-87ec-f635b5fd00431.gif)
虚拟仪器课程设计
电控学院
课程设计(论文)
课程名称:
LabVIEW程序设计教程
题目:
基于LabVIEW上下位机的LED显示设计
院(系):
电气与控制工程学院
专业班级:
XXXXXXXXXXXXXXX
姓名:
XXXX
学号:
XXXXXX
指导教师:
XXXXX
2014年1月9日
目录
1设计任务1
2系统方案选择1
2.1整体设计1
2.2通信协议1
2.2.1数据信号线2
2.2.2控制信号线2
2.3下位机总体设计3
2.4上位机总体设计3
3下位机设计3
3.1硬件3
3.1.1时钟晶振模块3
3.1.2复位模块3
3.1.3LED显示模块4
3.1.4串口通信模块4
3.2软件设计5
3.2.1主程序设计5
3.2.2串口通信设计5
4上位机设计6
5系统调试7
6结论7
7总结8
8参考文献9
9附录10
基于labview的上位机与下位机之间的通信
1设计任务
此次设计所要完成的功能是使用AT89C52作为下位机,通过RS-232C串口与上位机相连,将编程所实现的跑马灯和端口设置数据显示在上位机上。
上位机是通过LabVIEW软件绘制实现,上位机界面包括设置区、命令控件区、显示控件区、数据接收区。
2系统方案选择
2.1整体设计
下位机使用AT89C52进行流水灯设计,上位机使用LabVIEW进行界面设计,显示出端口设置数据和8个LED灯的显示,通过RS232进行串口通讯传送数据到上位机中显示。
图2.1设计框架
2.2通信协议
RS-232C标准定义了数据通信设备(DCE)与数据终端设备(DTE)之间进行串行数据传输的接口信息,规定了接口的电气信号和接插件的机械要求。
RS-232C对信号开关电平规定如下:
驱动器的输出电平为:
逻辑“0”:
+5~+15V;逻辑“1”:
-5~-15V。
接收器的输入检测电平为:
逻辑“0”:
>+3V;逻辑“1”:
<-3V。
RS-232C采用负逻辑,噪声容限可达2V。
RS-232是个人计算机上的通讯接口之一,由电子工业协会(ElectronicIndustriesAssociation,EIA)所制定的异步传输标准接口。
通常RS-232接口以9个引脚(DB-9)或是25个引脚(DB-25)的型态出现,一般个人计算机上会有两组RS232接口,分别称为COM1和COM2。
RS-232C接口定义了20条可以同外界连接的信号线,并对它们的功能作了具体规定。
这些信号线并不是在所有的通讯过程中都要用到可以根据通信联络的繁杂程度选用其中的某些信号线。
RS-232-C标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4800、9600、19200波特。
RS-232C用作计算机与远程通信设备的数据传输接口,如图2.2所示,图中信号线分为数据信号线和控制信号线,分别说明如下:
图2.2带RS-232C接口的通信设备连接
2.2.1数据信号线
“发送数据(TXD)”和“接收数据(RXD)”是一对数据传输信号。
TXD用于发送数据,当无效数据发送时,TXD线上的信号为“1”。
RXD用于接收数据,当无效数据发送或者接收数据间隔期间,RXD线上的信号也为“1”。
2.2.2控制信号线
“请求发送(RTS)”与“为发送清零(CTS)”信号线用于双工通信方式。
半双工方式下发送和接收只能分时进行。
当DTE有数据待发送时,先发“请求发送”,信号通知调制解调器,此时若调制解调器处于接收方式,则必须等到接收完毕转为发送方式时,才向DTE回送“为发送清零”信号。
在全双工方式下,发送和接收能同时进行,不使用这两条控制信号线。
“DCE就绪”(DSR)和“DTE就绪”(DTR)信号线分别表示DCE和DTE是否处于可供使用的状态。
“保护地”信号线一般连接设备的屏蔽地。
2.3下位机总体设计
利用AT89C52芯片的P1口,以及软件编程实现跑马灯。
2.4上位机总体设计
对于labview处理主要包括前后面板的设计,包括三部分:
参数设置部分、命令控制部分及显示部分。
其中参数设置主要包括通讯口、波特率、数据位、校验位、停止位及接收周期的设置;命令控制主要包括启停数据接收、显示数据清空及退出运行等;显示界面主要包括接收数据显示、接收数据个数显示、当前下位机流水灯状态实时显示等。
3下位机设计
3.1硬件
在硬件设计中主要为下位机的AT89C52所设计的流水灯,其中包括基本的时钟晶振模块,复位电路模块,8位LED灯模块和最重要的串口通讯模块。
3.1.1时钟晶振模块
外接晶振给单片机提供一个时钟信号(一个非常稳定的频率信号),使单片机各内部组件同步工作,并且在和外部设备通信时是也能达到同步。
图3.1时钟晶振模块
3.1.2复位模块
手动开关复位使中央处理器CPU以及其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作。
除此之外,当单片机程序运行出现错误或系统处于死循环状态时,需要对单片机进行复位以及重新启动。
图3.2复位电路
3.1.3LED显示模块
8位LED发光二极管实现流水灯操作。
根据软件设计可得到1位LED循环左移,花样灯等。
图3.38位LED显示
3.1.4串口通信模块
MAX232是一种把电脑的串行口RS232信号电平(-10,+10v)转换为单片机所用到的TTL信号点平(0,+5)的芯片。
串口通讯模块使上位机与下位机得以通信,进行数据传送。
图3.4串口通信
3.2软件设计
3.2.1主程序设计
下位机程序设计中主要执行功能为流水灯显示和串口发送,主程序首先对系统的定时器和串口进行初始化,然后通过程序SBUF接收P1口的信号,每接收到一个P1口信号就对上位机进行一次数据传送,通过上位机的设计界面显示数据。
整个系统的主流程图如下图所示。
图3.5下位机程序流程图
3.2.2串口通信设计
系统的串口部分十分重要,主要是初始化部分对相应的寄存器进行设置,发送数据的时候只需要将数据写入SBUF里面即可,由发送中断标志位TI检测其数据发送结束。
而接收则有中断方式和等待方式两种,本系统因为单片机所要完成的简单,所以采用等待的方式。
串口的初始化程序流程图如图所示。
图3.6串口初始化程序流程图
4上位机设计
端口设置区中包括五个部分,分别为:
通讯口设置,波特率设置,数据位设置,校验位和停止位。
通讯口中编辑项有COM1、COM2。
波特率编辑项有300、600、1200、1800、2400、4800、7200、9600、14400、19200、28800、38400、56000、76800、115200。
数据位中编辑项有6、7、8。
校验位中编辑项有无、偶校验、奇校验。
停止位中编辑项有1、1.5、2。
其前、后面板显示如图所示。
图4.1前面板设计
图4.2程序框图设计
5系统调试
运行显示的过程是首先实现灯的左移右移,在实现等从中间点亮逐步向两边扩散再向中间聚拢,接着实现日期20140107与学号1006070108。
其结果显示如下:
图5.1运行结果图
6结论
本次课程设计题目是基于LabVIEW的跑马灯设计,主要进行的任务是用编程软件Keil编写跑马灯程序、烧写程序、使用LabVIEW设计上位机、下位机发送数据在上位机显示。
此次设计使得我们对课本《LabVIEW程序设计教程》上的理论知识进一步加深,将之应用于实践,充分发掘学生们的潜力。
首先是熟悉Keil编程软件的使用,使用单片机C语言编写跑马灯的程序,其中出现了一些问题,比如想要实现一个LED的左移点亮,只将其左移一位,即LED<<=1,并未考虑到左移后数据的最右端会自动赋0,这样灯的点亮顺序将不会达到所想要实现的效果,应该使用该语句LED=(LED<<1)|0x01,将最右端赋值1。
另外,编译链接后出现两个警告,其原因未选择AddFilestoGroup‘SourceGroup1’,导致错误。
使用LabVIEW软件绘制前面板和程序框图是一个很复杂的过程,首先是绘制前面板上的所要求的各显示和设置区,绘制完成后,在后面板上会主动生成一些相应的控件,然后补充所要用到的控件,并用导线将相应控件相连接。
最终完成上位机的设计。
最初绘制完成后运行时,数据显示区有数据,但LED灯显示区中无一LED亮,此问题的原因是为将接收到的数据经控件“字符串至字节数组转换”转换成字节数组,造成错误,鼠标放在数据接收区控件上,点右键选字符串选板中的“字符串至字节数组转换”控件,然后鼠标放在“字符串至字节数组转换”控件上,点击鼠标右键选择“索引数组”控件,用导线将对应的控件相连,再次运行,灯亮,数据显示区数据与下位机灯亮的顺序一致,但在前面板中的灯亮与灯灭正好与实际相反,为改正错误,在程序框图中的LED显示控件区中的各LED前加一个非门,从而将错误改正。
此外,对于自身来说,此次设计中仍有些不足,如程序框图中有些控件仍不是太明白其含义和功能,希望自己以后会多加练习,争取更进一步地掌握LabVIEW软件的使用。
7总结
通过各方面努力,本次实习基本完成。
在LabVIEW设计的学习下,设计出了上下位机的LED通讯灯动态显示方案。
通过这次系统的项目设计提高了我运用所学的专业基础知识来解决面临实际问题的能力,同时也提高了我查阅各种文献资料、使用LabVIEW软件的水平。
通过这次设计,我发现了自己的很多不足以及许多知识的漏洞。
在设计过程中遇到了不少困难,庆幸的是我得到了许多人的帮助。
首先我要感谢我的指导老师昝老师设计过程中,他给的指导,丰富的设计经验和严谨的制学态度,是我解决问题的关键所在。
同时,还要感谢帮助我的所有同学。
我想,本次实习对我们每个人都是影响很大的,它使我们基本掌握了LabVIEW通讯的设计方案,基本掌握了LabVIEW等软件的使用,并且对LabVIEW有了更深入的了解。
在解决问题的过程中,我们不仅学到了很多专业的知识,还学会了分析问题,解决问题的方法。
相信这些对我们以后的学习与工作都有很大的帮助。
通过对自己在大学时间里所学的知识的回顾,并充分发挥对所学知识的理解和对课程设计的思考及书面表达能力,最终完成了这项实习。
这次设计为我们今后进一步深化学习,积累了一定的宝贵经验。
撰写论文的过程也是专业知识的学习过程,运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练,并且为以后的课程设计论文做好准备及铺垫。
本次课题培养了我们运用所学知识解决实际问题的能力,确实也有所提高。
通过这次实习发现,只有理论水平提高,才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。
通过这次设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性。
我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。
学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。
这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。
8参考文献
[1]虚拟仪器实验指导书,彭倩编.西安科技大学出版社.
[2]杨乐平,李海涛,赵勇等.LabVIEW高级程序设计.北京:
清华大学出版社,2003.
[3]王磊,陶梅.精通LabVIEW8.0.北京:
电子工业出版社,2007.
9附录
图1下位机原理图
程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeLED1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义流水灯点亮顺序
ucharcodeLED2[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7e};
ucharcodeLED3[]={0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3e,0x7c};
ucharcodeLED4[]={0xe7,0xc3,0x81,0x00,0x00,0x81,0xc7,0xe7};
ucharcodeLED5[]={0xfb,0xfe,0xfd,0xef,0xfe,0xfd,0xfe,0x7f};
ucharcodeLED6[]={0xfe,0xff,0xff,0xc0,0xff,0x80,0xff,0xfe,0xff,0x00};
voiddelay(uintx)//延迟函数
{uchari;
while(x--)
for(i=0;i<120;i++);
}
voidPort(charc)//定义单片机向串口输出数据子函数
{SBUF=c;
while(TI==0);
TI=0;
}
voidmain(void)
{SCON=0x50;//设置串口工作于方式1
TMOD=0x20;//设置定时器工作于方式2
PCON=0x00;//设置SMOD
TH1=0xfd;//设置波特率
TL1=0xfd;
TI=0;//允许向串口发送数据
TR1=1;//启动TI
while
(1)
{uchari;
for(i=0;i<8;i++)//正向点亮流水灯并将流水灯状态发送至串口
{P1=LED1[i];
Port(LED1[i]);
delay(300);
}
for(i=7;i>0;i--)//反向点亮流水灯并将流水灯状态发送至口
{P1=LED1[i];
Port(LED1[i]);
delay(300);
}
for(i=0;i<8;i++)
{P1=LED2[i];
Port(LED2[i]);
delay(300);
}
for(i=7;i>0;i--)
{P1=LED2[i];
Port(LED2[i]);
delay(300);
}
for(i=0;i<8;i++)
{P1=LED3[i];
Port(LED3[i]);
delay(300);
}
for(i=0;i<8;i++)
{P1=LED4[i];
Port(LED4[i]);
delay(500);
}
for(i=0;i<8;i++)//显示日期20140107
{P1=LED5[i];
Port(LED5[i]);
delay(1000);
}
for(i=0;i<10;i++)//显示学号1006070108
{P1=LED6[i];
Port(LED6[i]);
delay(1000);
}
}
}