第八章 LED矩陣與SPI介面控制 建立自訂函數 認識變數的有效範圍 LED矩陣簡介 認識SPI介面與MAX7219 顯示靜態與動態矩陣圖像 指標與程式記憶體
建立自訂函數 具有特定功能並且能被重複使用的程式碼,叫做「函數」。 自訂函數的語法範例 參閱 8-2
變數的有效範圍 參閱 8-7
LED矩陣簡介 LED矩陣(LED Matrix)是一種把數十個LED排列封裝在一個方形元件的顯示單元 LED矩陣的內部結構 參閱 8-9
認識SPI介面與MAX7219 SPI介面的全名是Serial Peripheral Interface(序列周邊介面),廣泛用於各種電子裝置。 SPI採用四條線連結主機和周邊設備,這四條連線的名稱和用途如下: SS:周邊選擇線(Slave Select),指定要連線的周邊設備。此線輸入0,代表選取,1代表未選。 MOSI:從主機往周邊傳送的資料線(Master Output, Slave Input)。 MISO:從周邊往主機傳送的資料線(Master Input, Slave Output)。 SCK:序列時脈線(Serial Clock)。 參閱 8-11
Arduino Uno SPI接腳 在SPI介面中,除了第10腳的SS(周邊選擇線)可以用其他接腳替換,其餘3個接線都必須連接在特定的腳位。 參閱 8-12 MAX7219的時序圖,裝置的SS接腳必須為0,才能接收和傳遞資料。
LED矩陣電路 驅動一個8×8單色 LED矩陣的電路圖 參閱 8-14 可以採用市售的MAX7219與8×8rm LED矩陣的套件
MAX7219的暫存器 MAX7219內部包含用於設定晶片狀態,以及LED顯示資料的暫存器,每個暫存器都有一個識別位址。 暫存器名稱 位址 資料0(Digit 0) 0x1 資料1(Digit 1) 0x2 資料2(Digit 2) 0x3 資料3(Digit 3) 0x4 資料4(Digit 4) 0x5 資料5(Digit 5) 0x6 資料6(Digit 6) 0x7 資料7(Digit 7) 0x8 不運作(No-Op) 0x0 解碼模式(Decode Mode) 0x9 顯示強度(Intensity) 0xA 掃描限制(Scan Limit) 0xB 停機(Shutdown) 0xC 顯示器檢測(Display Test) 0xF 參閱 8-18 用常數儲存 暫存器的位址
顯示單一矩陣圖像 傳送資料給MAX7219需要四個步驟, 如右邊的"max7219"的自訂函數所示: 底下的陣列資料用於描述 一個8×8 LED矩陣圖像: 參閱 8-20
在序列埠監控視窗輸出矩形排列的星號(一) 如何呈現6個水平排列的星號? 用6個"print()"函數顯示星號。 用一個for迴圈完成。 參閱 8-24
在序列埠監控視窗輸出矩形排列的星號(二) 完成6×3排列顯示效果的雙重迴圈程式 參閱 8-26
顯示動態LED矩陣圖像 參閱 8-28 二維陣列定義 LED矩陣圖像: 雙重迴圈程式先讀取第一張圖片裡的八行資料,再切換到下一張讀取:
LED矩陣跑馬燈 先把動畫字元暫存在變數,再逐行移動(複製)其中的數據,就能產生捲動效果。 參閱 8-31
指標與「程式記憶體」 除了透過名稱,還可以透過記憶體位址存取變數資料。 參閱 8-39 在常數宣告敘述中加入PROGMEM關鍵字,可避免資料被複製到主記憶體。 讀取程式記憶體的值, 必須透過「指標」。