《STM32和labview不解之缘》之一基于labview的七彩流水灯界面设计

  • 小雨儿
  • LV5工程师
  • |      2014-02-28 20:49:30
  • 浏览量 20134
  • 回复:48

Labview2013程序设计分享教程开始了】

---ICKEY社区小雨儿

前言

网络上各种各样的labview教程层出不穷,大部分都是讲解的labview的仿真应用,教程或课件中的VI程序也大部分如此!除了NI公司提供丰富的硬件,可以使用DAQ做数据采集,高端的FPGA开发外,难道真的就没有更精彩的应用了吗?回答是否定的,labview是可以和MCUDSP做无缝连接的,就像在仿真程序上和matlab的无缝集成一样。当然,MCUDSPlabveiw的接口,这个课题范围太大了,探讨起来也是一个很广泛的话题。时下,最流行的MCU当然是ARM公司的CORTEX-MO/M3/M4内核,DSP当然是TITMS320FXXX系列,也就是通常的C2000/C5000/C6000,高端的FPGA平台中,无论是ATLERA还是XINLIX公司的平台,其软核IP大部分也是这些内核罢了,CORTER-A8/A9这样的内核已经是专门的嵌入式领域了,这里笔者水平有限,也没有精力去研究这些了。

在工作中,受到大牛和大神们气氛熏陶,我也逐渐从51STC/MSP430这样8位、16位的平台,过度到32位平台,期间经历了LM3S的大起大落,C2000/C5000的高富帅,最后到情有独钟的STM32。在认识STM32的岁月里,发现它确实很容易应用,价格适中,资料丰富,开发环境友好,适合一般的工控应用及消费电子应用,同时,作为labview的粉丝,我对它也是不离不弃。在这样的环境下,我逐渐地将STM32Labview放在了一起,并在大神的指点下,也有了一些小应用。

下面本版主将推出一系列教程,详细介绍STM32labview结合下的一些应用,希望这些应用对大家学习labview有所帮助,并欢迎大家提出各种意见交流地址:ICKey电子工程社区QQ:222951503


第一集:基于labview的七彩流水灯界面设


《STM32和labview的不解之缘》之基于labview的七彩流水灯界面设计


流水灯描述

在开始STM32labview的应用讲解之前,先发一个七彩流水灯的设计。说到七彩流水灯,大家都觉得很简单,其实不然。首先,这里有一个思路问题,我们在开发MCU程序时,要点亮一个LED流水灯,比如8BIT的流水灯,大家首先想到的就是端口赋值,从BIT7—BIT0依次赋值0x80 0x40 0x20 0x10 0x08 0x04 0x02 0x01,或者反向赋值,中间插入延时函数即可,这样确实是可以的,我刚开始学习编程也是这样做的。在不断的流水灯的过程中,我们发现上面编程的代码量还是不小的,每个赋值后,再加入延时,就是一个16段代码。后来,长经验了,就学会了数据移位,定义一个变量,让这个数初始值是0x01或者是0x80,然后循环左移或者右移,每次移动后,把变量值赋给端口,采用一个For循环就能实现了,真是简便啊,这就是学到新知识的喜悦。

在成功的实现了8BIT位的流水灯,那么16BIT的流水灯呢?在8/16位机上就得占用两个端口,在32位机上,就得占用一个端口。继续向下问,如果是32BIT的流水灯呢?那么就出现了两种选择,一种是端口量翻倍,可惜现在的MCU端口都不是太多,笔者手工焊过引脚最多的也就是144PIN,大部分PIN都是有特殊用途,比如地址和数据的并行总线,不可能拿出那么多的端口来玩,就得采用第二种,IO扩展,采用逻辑芯片,锁存器,串并转换等74芯片来做,本质就是分时复用,那样电路就庞大了。

Labview上玩流水灯就简单多了,而且彩色也丰富,不像实际中,就那么几种颜色可以选择。在Labview中,流水灯可以达到64BIT,够嗨吧,呵呵。下面讲解一个20BIT流水灯的界面设计,作为后续教程的热身吧。

20BIT流水灯思路就是采用了数据移位的原理。思路如下:

建立一个虚拟的20BIT的布尔数组变量,让这个布尔数组的第一个位为布尔值1,其余为布尔值0, 然后让布尔数组的布尔值1循环移动,移动20次后,返回到初始点.这个思路是很简单,不过实现起来就需要一定的技巧了,要不然,编写的代码又会很长哦。具体实现过程:

20BIT布尔数组的实现

我们知道,流水灯要实现一个20BIT的初始化为1的序列,即

1000 0000 0000 0000 0000 0100 0000 0000 0000 0000

0010 0000 0000 0000 0000 。。。0000 0000 0000 0000 0001.

每个位对应于一个LED灯。那么如何产生这个序列呢?这里,我们采用了一个判断语句来实现,当条件满足时,产生布尔值1,不满足时,产生布尔值0,让这个条件循环执行20次。就会得到我们要实现的这个序列了。那么,应该满足什么条件呢?这里我们采用了一个Labview函数,首次调用函数。它位于同步模块里面,首次调用函数的功能:当按下运行按钮第一次调用时,输出TRUE,否则为FLASE

《STM32和labview的不解之缘》之基于labview的七彩流水灯界面设计

这样,第一次运行时,判断函数就输出布尔值1,第二次循环时,判断函数就输出布尔值0了。利用FOR循环20次,就输出20个布尔值了,这20个布尔值就可以通过一个自动索引隧道输出成一个布尔数组了。

《STM32和labview的不解之缘》之基于labview的七彩流水灯界面设计

20BIT的布尔灯控件放入簇中

实现好了20BIT的布尔数组后,我们在前面板上再定义20LED灯,做好排列后,放入一簇中,如图:





那么为什么要使用簇函数呢?因为在LabVIEW中,每个VI的连接端点的个数最多为28个。在实际的使用中,你可能也不想使用有这么多个连接端点的VI,一方面连接线太多看起来很烦,另一方面就是很容易接错端点。通过使用簇(Cluster)就可以轻松的将多个输入控件或输出控件捆绑到一起,这样就只要一个连接端点就可以与子 VI(subVI)之间完成传送多个数据的任务。通过这种使用簇的方法,在VI的输入输出数据个数多于28个时,就可以绕过LabVIEW的这个限制。并且如 果你只是想减少LabVIEWVI的连线数目,也可以使用簇来实现。

利用好循环移位寄存器

在前面讲到,判断函数执行20次循环后,会输出一个布尔值数组,这个数组我们怎么对应到簇数组里并循环起来,那就要借助移位寄存器了。在循环结构中经常用到一种数据处理方式,即把第i次循环执行的结果作为第i1次循环的输入,我们通过一个while循环,就可以让20BIT的布尔值序列不停地运行了。

数组移位操作函数和数组到簇的转换

通过一维数组的循环移位和数组到簇的转换,我们就可以将布尔数组不停地移位起来,再加上一个简单的延时函数,这样就能显示出流水灯的效果了。

《STM32和labview的不解之缘》之基于labview的七彩流水灯界面设计

《STM32和labview的不解之缘》之基于labview的七彩流水灯界面设计

数组循环移位函数,这里n=1,即每次循环移动一位。

《STM32和labview的不解之缘》之基于labview的七彩流水灯界面设计

加入一个判断函数,当开启时,正常运行。关闭时,20BIT灯全部关闭,就是给簇赋值布尔值0哦。

程序运行效果图如下:

《STM32和labview的不解之缘》之基于labview的七彩流水灯界面设计





点击紫色按钮,流水灯关闭。拉动滑动杆,可以控制流水灯的速度。




《STM32和labview的不解之缘》之基于labview的七彩流水灯界面设计


下一集为大家分享一个Labview控制STM32板子上的LED灯的程序设计。

==========================================

程序附件





  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:42
lhf58 2017-02-04
谢谢分享
0   回复
举报
发布
mingming 2016-12-06
好教程!!!
0   回复
举报
发布
lilei 2016-11-28
谢谢分享,顶一个!!
0   回复
举报
发布
韩梅梅 2016-11-09
谢谢分享,顶一个!!
0   回复
举报
发布
蓝色霹雳 2016-06-07
看上去很赞
0   回复
举报
发布
anazel 2016-04-28
麻烦楼主能不能存的版本低点儿呢?
0   回复
举报
发布
TT__UUming 2016-01-03
下载后打不开啊 
0   回复
举报
发布
Droithxn 2015-12-26
顶一个!!
0   回复
举报
发布
奶油墨鱼 2015-12-10
谢谢谢谢
0   回复
举报
发布
ICKEYsuper 2015-09-12
很好哦不错
0   回复
举报
发布
查看更多
x
收藏成功!点击 我的收藏 查看收藏的全部帖子