本帖最后由 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的七彩流水燈界面設計
20140228203017_73913.jpg (46.99 KB, 下載次數: 85)
下載附件
2016-3-4 20:10 上傳
一 流水燈描述 在開始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。
20140228203159_17002.jpg (9.95 KB, 下載次數: 152)
下載附件
2016-3-4 20:10 上傳
這樣,第一次運行時,判斷函數就輸出布爾值1,第二次循環時,判斷函數就輸出布爾值0了。利用FOR循環20次,就輸出20個布爾值了,這20個布爾值就可以通過一個自動索引隧道輸出成一個布爾數組了。
20140228203322_39885.jpg (9.68 KB, 下載次數: 91)
下載附件
2016-3-4 20:10 上傳
三 20BIT的布爾燈控件放入簇中 實現好了20BIT的布爾數組后,我們在前面板上再定義20個LED燈,做好排列后,放入一簇中,如圖:
20140228203452_93704.jpg (21.03 KB, 下載次數: 84)
下載附件
2016-3-4 20:10 上傳
四 利用好循環移位寄存器 在前面講到,判斷函數執行20次循環后,會輸出一個布爾值數組,這個數組我們怎么對應到簇數組里并循環起來,那就要借助移位寄存器了。在循環結構中經常用到一種數據處理方式,即把第i次循環執行的結果作為第i+1次循環的輸入,我們通過一個while循環,就可以讓20BIT的布爾值序列不停地運行了。
五 數組移位操作函數和數組到簇的轉換 通過一維數組的循環移位和數組到簇的轉換,我們就可以將布爾數組不停地移位起來,再加上一個簡單的延時函數,這樣就能顯示出流水燈的效果了。
20140228203625_57671.jpg (25.33 KB, 下載次數: 108)
下載附件
2016-3-4 20:10 上傳
20140228203742_55873.jpg (5.14 KB, 下載次數: 89)
下載附件
2016-3-4 20:10 上傳
數組循環移位函數,這里n=1,即每次循環移動一位。
20140228203952_82531.jpg (29.33 KB, 下載次數: 92)
下載附件
2016-3-4 20:10 上傳
加入一個判斷函數,當開啟時,正常運行。關閉時,20BIT燈全部關閉,就是給簇賦值布爾值0哦。
程序運行效果圖如下:
20140228204126_30930.jpg (45.46 KB, 下載次數: 106)
下載附件
2016-3-4 20:10 上傳
點擊紫色按鈕,流水燈關閉。拉動滑動桿,可以控制流水燈的速度。
下一集為大家分享一個Labview控制STM32板子上的LED燈的程序設計。 |