|
需要做的工作:
51单片机上传感器采样,(现只有温度传感器,变化太小,做程序时,是用随机数代替的)上位机软件接收数据画出图形(横轴是时间,纵轴是采样数值),这里要使用labview,输出类似示波器的效果。
我使用的方法发如下:(第一天接触labview,可以说真是一无所知,四处查资料,不得要领,另外单片机串口通讯也只是刚刚学),遇到了问题,请大家帮忙指点。
一、
上位机从网上找到一个labview的实例VI,串口试验的,功能界面基本等同于常用开发板上的“串口调试程序”,VI如下:
这是我在网上看到的串口接收数据的VI,我加了个波形控件ourdev_656458S2UVM6.rar(文件大小:54K) (原文件名:串口调试程序.rar)
界面如图:![](http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_656459Y3T564.JPG)
这个VI的界面图和程序框图画红圈的是我自己添加的 (原文件名:1.JPG)
![](http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_656460QC2LGN.JPG)
(原文件名:2.JPG)
二、单片机上是简单的循环发送数据程序,摘部分写在下面:
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
InitUART();
int temp[5];
while (1)
{
for(i=0;i<3;i++)
{
temp=rand()*9+1;
}
SendStr(temp);//这个字符串就会每次发送三位随机数(100-999)过去
//延时循环发送
DelayMs(240);
}
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/*------------------------------------------------
发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串结束标志,
//通过检测是否字符串末尾
{
SendByte(*s);
s++;
}
}
运行单片机,打开串口程序,这里我让单片机试验了两种数据,一个是随机3数整数,另一个是循环加1,都是在(100-999之 间),运行都接收正常,国图中绿色的就是接收的循环加一的效果。
三、我在上位机程序中加入图形“控件”(这里因对labview不懂,它没有文本编程,只有程序框图,所以感到很难下手。)根据自己的理解,在原程序框图中在接收区前端和图形控件间连了线,但不支持,后来试着在中间加入一个函数(转字符串为整数),一下子成了!(也是没想到)运行VI,图线出来了,但不是我想要的效果。
现在的问题如下:
曲线不是我想要的样子,我是要把这些点用线连起来,labview把每个点向下连到横轴上,这是要解决的第一个
第二个是当我把下位机延迟减到delay(20),原来是delay(200),就不是每个点都显示了,似乎处理速度不够的样子,不明白因为什么,点显示的断断续续的
还有就是如果我要传两种数据进来,用两条曲线分别显示,应该怎么做,请会的朋友,给些指点,谢谢了!!!!
网上有现成例子,是将温度发送成四个字节,然后用labview去读取,因对labview看得不得要领,也没看懂,不过大概路子应该是一样的!有了解的朋友指出我labview中的问题..... |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|