本帖最后由 51黑tt 于 2016-3-4 20:11 編輯
【Labview2013程序設(shè)計(jì)分享教程開(kāi)始了】 ---ICKEY社區(qū)—小雨兒 前言 網(wǎng)絡(luò)上各種各樣的labview教程層出不窮,大部分都是講解的labview的仿真應(yīng)用,教程或課件中的VI程序也大部分如此!除了NI公司提供豐富的硬件,可以使用DAQ做數(shù)據(jù)采集,高端的FPGA開(kāi)發(fā)外,難道真的就沒(méi)有更精彩的應(yīng)用了嗎?回答是否定的,labview是可以和MCU、DSP做無(wú)縫連接的,就像在仿真程序上和matlab的無(wú)縫集成一樣。當(dāng)然,MCU和DSP與labveiw的接口,這個(gè)課題范圍太大了,探討起來(lái)也是一個(gè)很廣泛的話題。時(shí)下,最流行的MCU當(dāng)然是ARM公司的CORTEX-MO/M3/M4內(nèi)核,DSP當(dāng)然是TI的TMS320FXXX系列,也就是通常的C2000/C5000/C6000,高端的FPGA平臺(tái)中,無(wú)論是ATLERA還是XINLIX公司的平臺(tái),其軟核IP大部分也是這些內(nèi)核罷了,CORTER-A8/A9這樣的內(nèi)核已經(jīng)是專門的嵌入式領(lǐng)域了,這里筆者水平有限,也沒(méi)有精力去研究這些了。 在工作中,受到大牛和大神們氣氛熏陶,我也逐漸從51、STC/MSP430這樣8位、16位的平臺(tái),過(guò)度到32位平臺(tái),期間經(jīng)歷了LM3S的大起大落,C2000/C5000的高富帥,最后到情有獨(dú)鐘的STM32。在認(rèn)識(shí)STM32的歲月里,發(fā)現(xiàn)它確實(shí)很容易應(yīng)用,價(jià)格適中,資料豐富,開(kāi)發(fā)環(huán)境友好,適合一般的工控應(yīng)用及消費(fèi)電子應(yīng)用,同時(shí),作為labview的粉絲,我對(duì)它也是不離不棄。在這樣的環(huán)境下,我逐漸地將STM32和Labview放在了一起,并在大神的指點(diǎn)下,也有了一些小應(yīng)用。
下面本版主將推出一系列教程,詳細(xì)介紹STM32和labview結(jié)合下的一些應(yīng)用,希望這些應(yīng)用對(duì)大家學(xué)習(xí)labview有所幫助,并歡迎大家提出各種意見(jiàn),
第一集:基于labview的七彩流水燈界面設(shè)計(jì)
20140228203017_73913.jpg (46.99 KB, 下載次數(shù): 85)
下載附件
2016-3-4 20:10 上傳
一 流水燈描述 在開(kāi)始STM32和labview的應(yīng)用講解之前,先發(fā)一個(gè)七彩流水燈的設(shè)計(jì)。說(shuō)到七彩流水燈,大家都覺(jué)得很簡(jiǎn)單,其實(shí)不然。首先,這里有一個(gè)思路問(wèn)題,我們?cè)陂_(kāi)發(fā)MCU程序時(shí),要點(diǎn)亮一個(gè)LED流水燈,比如8個(gè)BIT的流水燈,大家首先想到的就是端口賦值,從BIT7—BIT0依次賦值0x80 0x40 0x20 0x10 0x08 0x040x02 0x01,或者反向賦值,中間插入延時(shí)函數(shù)即可,這樣確實(shí)是可以的,我剛開(kāi)始學(xué)習(xí)編程也是這樣做的。在不斷的流水燈的過(guò)程中,我們發(fā)現(xiàn)上面編程的代碼量還是不小的,每個(gè)賦值后,再加入延時(shí),就是一個(gè)16段代碼。后來(lái),長(zhǎng)經(jīng)驗(yàn)了,就學(xué)會(huì)了數(shù)據(jù)移位,定義一個(gè)變量,讓這個(gè)數(shù)初始值是0x01或者是0x80,然后循環(huán)左移或者右移,每次移動(dòng)后,把變量值賦給端口,采用一個(gè)For循環(huán)就能實(shí)現(xiàn)了,真是簡(jiǎn)便啊,這就是學(xué)到新知識(shí)的喜悅。 在成功的實(shí)現(xiàn)了8個(gè)BIT位的流水燈,那么16BIT的流水燈呢?在8/16位機(jī)上就得占用兩個(gè)端口,在32位機(jī)上,就得占用一個(gè)端口。繼續(xù)向下問(wèn),如果是32BIT的流水燈呢?那么就出現(xiàn)了兩種選擇,一種是端口量翻倍,可惜現(xiàn)在的MCU端口都不是太多,筆者手工焊過(guò)引腳最多的也就是144PIN,大部分PIN都是有特殊用途,比如地址和數(shù)據(jù)的并行總線,不可能拿出那么多的端口來(lái)玩,就得采用第二種,IO擴(kuò)展,采用邏輯芯片,鎖存器,串并轉(zhuǎn)換等74芯片來(lái)做,本質(zhì)就是分時(shí)復(fù)用,那樣電路就龐大了。 在Labview上玩流水燈就簡(jiǎn)單多了,而且彩色也豐富,不像實(shí)際中,就那么幾種顏色可以選擇。在Labview中,流水燈可以達(dá)到64BIT,夠嗨吧,呵呵。下面講解一個(gè)20BIT流水燈的界面設(shè)計(jì),作為后續(xù)教程的熱身吧。 20BIT流水燈思路就是采用了數(shù)據(jù)移位的原理。思路如下: 建立一個(gè)虛擬的20BIT的布爾數(shù)組變量,讓這個(gè)布爾數(shù)組的第一個(gè)位為布爾值1,其余為布爾值0, 然后讓布爾數(shù)組的布爾值1循環(huán)移動(dòng),移動(dòng)20次后,返回到初始點(diǎn).這個(gè)思路是很簡(jiǎn)單,不過(guò)實(shí)現(xiàn)起來(lái)就需要一定的技巧了,要不然,編寫的代碼又會(huì)很長(zhǎng)哦。具體實(shí)現(xiàn)過(guò)程: 二 20BIT布爾數(shù)組的實(shí)現(xiàn) 我們知道,流水燈要實(shí)現(xiàn)一個(gè)20BIT的初始化為1的序列,即 1000 0000 0000 0000 0000 ,0100 0000 0000 0000 0000 , 0010 0000 0000 0000 0000 。。。0000 0000 0000 0000 0001. 每個(gè)位對(duì)應(yīng)于一個(gè)LED燈。那么如何產(chǎn)生這個(gè)序列呢?這里,我們采用了一個(gè)判斷語(yǔ)句來(lái)實(shí)現(xiàn),當(dāng)條件滿足時(shí),產(chǎn)生布爾值1,不滿足時(shí),產(chǎn)生布爾值0,讓這個(gè)條件循環(huán)執(zhí)行20次。就會(huì)得到我們要實(shí)現(xiàn)的這個(gè)序列了。那么,應(yīng)該滿足什么條件呢?這里我們采用了一個(gè)Labview函數(shù),首次調(diào)用函數(shù)。它位于同步模塊里面,首次調(diào)用函數(shù)的功能:當(dāng)按下運(yùn)行按鈕第一次調(diào)用時(shí),輸出TRUE,否則為FLASE。
20140228203159_17002.jpg (9.95 KB, 下載次數(shù): 152)
下載附件
2016-3-4 20:10 上傳
這樣,第一次運(yùn)行時(shí),判斷函數(shù)就輸出布爾值1,第二次循環(huán)時(shí),判斷函數(shù)就輸出布爾值0了。利用FOR循環(huán)20次,就輸出20個(gè)布爾值了,這20個(gè)布爾值就可以通過(guò)一個(gè)自動(dòng)索引隧道輸出成一個(gè)布爾數(shù)組了。
20140228203322_39885.jpg (9.68 KB, 下載次數(shù): 91)
下載附件
2016-3-4 20:10 上傳
三 20BIT的布爾燈控件放入簇中 實(shí)現(xiàn)好了20BIT的布爾數(shù)組后,我們?cè)谇懊姘迳显俣x20個(gè)LED燈,做好排列后,放入一簇中,如圖:
20140228203452_93704.jpg (21.03 KB, 下載次數(shù): 84)
下載附件
2016-3-4 20:10 上傳
四 利用好循環(huán)移位寄存器 在前面講到,判斷函數(shù)執(zhí)行20次循環(huán)后,會(huì)輸出一個(gè)布爾值數(shù)組,這個(gè)數(shù)組我們?cè)趺磳?duì)應(yīng)到簇?cái)?shù)組里并循環(huán)起來(lái),那就要借助移位寄存器了。在循環(huán)結(jié)構(gòu)中經(jīng)常用到一種數(shù)據(jù)處理方式,即把第i次循環(huán)執(zhí)行的結(jié)果作為第i+1次循環(huán)的輸入,我們通過(guò)一個(gè)while循環(huán),就可以讓20BIT的布爾值序列不停地運(yùn)行了。
五 數(shù)組移位操作函數(shù)和數(shù)組到簇的轉(zhuǎn)換 通過(guò)一維數(shù)組的循環(huán)移位和數(shù)組到簇的轉(zhuǎn)換,我們就可以將布爾數(shù)組不停地移位起來(lái),再加上一個(gè)簡(jiǎn)單的延時(shí)函數(shù),這樣就能顯示出流水燈的效果了。
20140228203625_57671.jpg (25.33 KB, 下載次數(shù): 108)
下載附件
2016-3-4 20:10 上傳
20140228203742_55873.jpg (5.14 KB, 下載次數(shù): 89)
下載附件
2016-3-4 20:10 上傳
數(shù)組循環(huán)移位函數(shù),這里n=1,即每次循環(huán)移動(dòng)一位。
20140228203952_82531.jpg (29.33 KB, 下載次數(shù): 92)
下載附件
2016-3-4 20:10 上傳
加入一個(gè)判斷函數(shù),當(dāng)開(kāi)啟時(shí),正常運(yùn)行。關(guān)閉時(shí),20BIT燈全部關(guān)閉,就是給簇賦值布爾值0哦。
程序運(yùn)行效果圖如下:
20140228204126_30930.jpg (45.46 KB, 下載次數(shù): 106)
下載附件
2016-3-4 20:10 上傳
點(diǎn)擊紫色按鈕,流水燈關(guān)閉。拉動(dòng)滑動(dòng)桿,可以控制流水燈的速度。
下一集為大家分享一個(gè)Labview控制STM32板子上的LED燈的程序設(shè)計(jì)。 |