单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9510|回复: 9
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
本帖最后由 51黑tt 于 2016-3-4 20:11 编辑

                                                                                   
         Labview2013程序设计分享教程开始了】
         ---ICKEY社区小雨儿   
        前言          网络上各种各样的labview教程层出不穷,大部分都是讲解的labview的仿真应用,教程或课件中的VI程序也大部分如此!除了NI公司提供丰富的硬件,可以使用DAQ做数据采集,高端的FPGA开发外,难道真的就没有更精彩的应用了吗?回答是否定的,labview是可以和MCU、DSP做无缝连接的,就像在仿真程序上和matlab的无缝集成一样。当然,MCU和DSP与labveiw的接口,这个课题范围太大了,探讨起来也是一个很广泛的话题。时下,最流行的MCU当然是ARM公司的CORTEX-MO/M3/M4内核,DSP当然是TI的TMS320FXXX系列,也就是通常的C2000/C5000/C6000,高端的FPGA平台中,无论是ATLERA还是XINLIX公司的平台,其软核IP大部分也是这些内核罢了,CORTER-A8/A9这样的内核已经是专门的嵌入式领域了,这里笔者水平有限,也没有精力去研究这些了。         在工作中,受到大牛和大神们气氛熏陶,我也逐渐从51、STC/MSP430这样8位、16位的平台,过度到32位平台,期间经历了LM3S的大起大落,C2000/C5000的高富帅,最后到情有独钟的STM32。在认识STM32的岁月里,发现它确实很容易应用,价格适中,资料丰富,开发环境友好,适合一般的工控应用及消费电子应用,同时,作为labview的粉丝,我对它也是不离不弃。在这样的环境下,我逐渐地将STM32和Labview放在了一起,并在大神的指点下,也有了一些小应用。
        下面本版主将推出一系列教程,详细介绍STM32和labview结合下的一些应用,希望这些应用对大家学习labview有所帮助,并欢迎大家提出各种意见
        第一集:基于labview的七彩流水灯界面设计

        

         流水灯描述
         在开始STM32和labview的应用讲解之前,先发一个七彩流水灯的设计。说到七彩流水灯,大家都觉得很简单,其实不然。首先,这里有一个思路问题,我们在开发MCU程序时,要点亮一个LED流水灯,比如8个BIT的流水灯,大家首先想到的就是端口赋值,从BIT7—BIT0依次赋值0x80 0x40 0x20 0x10 0x08 0x040x02 0x01,或者反向赋值,中间插入延时函数即可,这样确实是可以的,我刚开始学习编程也是这样做的。在不断的流水灯的过程中,我们发现上面编程的代码量还是不小的,每个赋值后,再加入延时,就是一个16段代码。后来,长经验了,就学会了数据移位,定义一个变量,让这个数初始值是0x01或者是0x80,然后循环左移或者右移,每次移动后,把变量值赋给端口,采用一个For循环就能实现了,真是简便啊,这就是学到新知识的喜悦。
        在成功的实现了8个BIT位的流水灯,那么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。
        
        这样,第一次运行时,判断函数就输出布尔值1,第二次循环时,判断函数就输出布尔值0了。利用FOR循环20次,就输出20个布尔值了,这20个布尔值就可以通过一个自动索引隧道输出成一个布尔数组了。
         
         20BIT的布尔灯控件放入簇中
         实现好了20BIT的布尔数组后,我们在前面板上再定义20个LED灯,做好排列后,放入一簇中,如图:
        

         利用好循环移位寄存器
         在前面讲到,判断函数执行20次循环后,会输出一个布尔值数组,这个数组我们怎么对应到簇数组里并循环起来,那就要借助移位寄存器了。在循环结构中经常用到一种数据处理方式,即把第i次循环执行的结果作为第i+1次循环的输入,我们通过一个while循环,就可以让20BIT的布尔值序列不停地运行了。
         数组移位操作函数和数组到簇的转换
        通过一维数组的循环移位和数组到簇的转换,我们就可以将布尔数组不停地移位起来,再加上一个简单的延时函数,这样就能显示出流水灯的效果了。
         
        

         数组循环移位函数,这里n=1,即每次循环移动一位。
        
        加入一个判断函数,当开启时,正常运行。关闭时,20BIT灯全部关闭,就是给簇赋值布尔值0哦。
         程序运行效果图如下:
        

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



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

20140228204209_62580.jpg (45.55 KB, 下载次数: 88)

20140228204209_62580.jpg

基于Labview的七彩流水灯-小雨儿.rar

11.79 KB, 下载次数: 58, 下载积分: 黑币 -5

评分

参与人数 1黑币 +5 收起 理由
mmm1994 + 5 东西真的实用

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
happy风行 发表于 2017-7-12 11:14 | 只看该作者
后续还有没有啊?期待中!
回复

使用道具 举报

板凳
最佳男友 发表于 2017-11-29 09:22 | 只看该作者
好想下载可是没有金币怎么办啊
回复

使用道具 举报

无效楼层,该帖已经被删除
5#
jnu2018 发表于 2018-4-22 16:25 | 只看该作者
还有吗?后面那集
回复

使用道具 举报

6#
AndyPun 发表于 2018-10-18 14:12 | 只看该作者
实用的资料!谢谢
回复

使用道具 举报

7#
AndyPun 发表于 2018-10-18 14:13 | 只看该作者
实用的东西!谢谢!期待后续更新
回复

使用道具 举报

8#
无效楼层,该帖已经被删除
9#
yangxiaohang 发表于 2018-11-7 16:18 来自手机 | 只看该作者
学习学习,谢谢!
回复

使用道具 举报

10#
港0港 发表于 2019-9-20 15:22 | 只看该作者
小白小白求助 怎么连接labview和stm32
回复

使用道具 举报

11#
港0港 发表于 2019-9-20 15:23 | 只看该作者
不明白怎么将 labview 和stm32 开发板连接起来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 QQ 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表