數位輸出 + 使LED燈閃爍
前言 - 讓基板上的LED燈閃爍
現在我們要來學習Launchpad上的第一個程式,設計一個簡單範例。基本上我們會藉由CCSv5.1來撰寫程式。目的讓晶片核心控制連接到板子上LED的燈號,藉由改變暫存器的設定值讓某一端點的隨著時間而開關閃爍LED,接下來要介紹如何使用基板內建的LED來達成以下的基本步驟。
基本功一 使紅色LED燈1個閃爍
基本功二 改變LED閃爍的間隔時間
基本功三 使另一個綠色LED燈閃爍
基本功四 讓多個LED(紅色與綠色)同時閃爍
進階功夫 視覺暫留POV LED
確認連接線路與位置
1. 我們利用原本的LaunchPad基板上就有的LED。其中一個為連接P1.0紅色LED燈位置在左下方,確認J5的PIN2有連接短路。
2. 確認已連接上USB線到電腦。
LED如圖
-填入 專案名稱>>選擇晶片型號>>選擇空專案。
-複製底下的程式碼。
-貼到CCS程式編輯區裡面。
-小小研究一下註解說明。
-按下 Debug (ㄟ就是那一個綠色的小蟲圖案啦...)。
-按下 F8 (載入)。
-觀察 LED 的狀態有無改變。
-停止 Debug 動作。
-認真的玩家可以再次修改程式碼,試著調整更改LED閃爍時間或是更改其他燈號紅色或綠色顏色等。
原始程式碼
解說原始程式碼
接下來在這裡會試著解釋每一行C語言程式的用法。相信對玩家在日後撰寫自己的程式會有所助益,如果注重實作的玩家可以先跳過以下長篇大論,直接把上面的程式碼載入到LaunchPad 先玩玩看。
引用檔 #include < >
一般都會看到引用msp430XXXX.h 這個標頭檔。
#include <msp430g2553.h> 或是 #include <msp430g2231.h>
主程式 main()
告訴LaunchPad這是個主程式main()函式永遠會被優先執行,而且裝置從上電到斷電之前,主程式會被依序執行一次,然後進入睡眠狀態,等待下一個中斷來臨。特別說明一下,由主程式 main() 函數執行到迴圈之前的程式區段,非常適合拿來做初始化的工作。
迴圈 while()
接下來while(1) 會定義了整段LauchPad主要重複動作的區域,迴圈內函式則會不斷的被重複執行,也是迴圈撰寫區,在此例中先呼叫接腳輸出高電位,由於P1.0接腳正好連接著一顆紅色LED燈,所以就會看到紅燈亮起,接下來__delay_cycles
會延時100ms豪秒,緊接著又是改變接腳輸出電位,變成低電位,紅燈隨之熄滅,接著又是延時,如此不斷重複執行,就會看到紅燈不斷閃爍。
數位輸出 P1OUT
當我們試著改變記憶體暫存的數值,就會改變LED1狀態。在程式開始執行時,希望設定腳位的狀態為數位輸出。在此例中P1OUT 是設定digital output紅色LED1燈BIT0成為輸出埠,稍後就能呼叫控制燈號輸出高電位或低電位。
其中 P1OUT 屬於數位暫存器的一部份,參考User’s Guide (第359頁第8.2.2節),而常數定義在msp430g2231.cmd文件中。
P1OUT = 0x0021;
(預設路徑C:\Program Files\Texas Instruments\ccsv4\msp430\include\)
其中 BIT0 代表板子上的P1.0埠紅色LED燈。而常數定義在標頭檔msp430g2231.h文件中。
#define BIT0 (0x0001)
(預設路徑C:\Program Files\Texas Instruments\ccsv4\msp430\include\)
上傳程式到基板
程式撰寫完畢後,在工具列中找尋Debug Launch點選(或找尋"一隻綠蟲"的圖示 )開始自動編譯過程;若編譯成功也會將程式上傳到LaunchPad。當傳輸結束後,再重新拔除USB線或斷電之後,重新上電,觀察基板上的P1.0連接的LED紅色燈開始閃爍,這代表程式已經成功上傳且開始運作。
完成!! 使紅色LED閃爍的操作影片
基本二 改變LED閃爍的間隔時間
在程式碼中可以找到一個函數調整LED閃爍間隔時間。
__delay_cycles(100000)
但是,比較要注意的是這裡填的數字為cycle次數。(並不是代表真正的延遲秒數)。而真正的延遲秒數必須根據裝置設定的工作時脈頻率與cycle次數而計算出來的。函數內的可填入的無號長整數unsigned long表示數值範圍為0到4294967295,(也就是2的32次方-1),注意!!如果填入數值超過4294967295除錯將會有溢值的錯誤訊息。範例中所使用預設的DCO工作頻率為1MHz,換算成時間週期為10^-6(s),函數內填數字如果為100000,經計算結果,則延遲時間為100ms。玩家可以試著改改看這個參數,調整閃爍間隔( 計算公式: 10^-6週期s * 100000 cycle = 0.1s = 100ms )
基本三 使另一個綠色LED燈閃爍。
如果玩家想改用另一顆綠色LED2,位於LaunchPad板子上的P1.6埠,方法如下:
設定P1.6原本GPIO Input改為GPIO Output。
P1DIR = BIT6;
試著將led.c檔案內while迴圈內的BIT0改為BIT6,則會改由綠色LED2閃爍。
P1OUT ^= BIT6;
完成!! 使綠色LED閃爍的操作影片
基本四 使多個LED同時閃爍(紅色與綠色)。進
如果玩家想兩顆LED位於LaunchPad板子上的P1.0與P1.6埠一起閃爍,紅色LED1與綠色LED2,方法如下:
P1.0與P1.6原本GPIO Input都改為GPIO Output
P1DIR = BIT0 + BIT6;
試著將led.c檔案內while迴圈內的BIT0改為BIT0 + BIT6,則會兩個LED同時閃爍。
P1OUT ^= BIT0 + BIT6;
完成!! 使多個LED同時閃爍(紅色與綠色)的操作影片
進階應用 - 視覺暫留 光殘影POV LED