Transcript 8×8點矩陣實驗
8×8點矩陣實驗 實驗目的 瞭解點矩陣LED控制原理 掌握用行列掃描控制的LED點矩陣編譯 實驗內容 編寫程式,在8×8上顯示數位或者字母 實驗設備 DMA2440XP教學平台 ADS 1.2 試用版內建開發環境和除錯軟體 USB連接線、串列連接線、電源 1 LED相關知識 LED即發光二極體,是嵌入式系統中常用的輸出設備。 單個LED通常用作報警之顯示,故障指示或提示信號等。 LED是一個半導體設備,當電流通過它的時候,可以產生可 見光。LED的發光強度與通過的電流強度成正比,由64個 LED組成,8行8列。 由於LED的發光顏色和發光效率與製作LED的材料和工 藝有關,目前廣泛使用的有紅、綠、藍三種。由於LED工作 電壓低(僅1.5-3V),能主動發光且 有一定亮度,亮度又 能用電壓(或電流)調節,本身又耐衝擊、抗振動、壽命長 (10萬小時),所以在大型的顯示設備中,目前尚無其他 的顯示方式與LED顯示 方式匹敵。 顯示範例 8x8 LED點矩陣的介面圖— 資料0~15通過HC574栓鎖器,再經過電晶體放大來驅動8×8 LED點矩陣, 靜態方式顯示。電路介面圖如下: 8x8 LED點矩陣的介面圖— 8x8矩陣硬體架構 Ex: 0000000101010101 0000001010101010 0000010001010101 低位元組 低 位 元 組 1000000010101010 高位元組 高 位 元 組 Ex: 0000000100000000 0000001001111110 0000010001000010 低位元組 低 位 元 組 1000000000000000 高位元組 高 位 元 組 練習題---假設三顆燈亮 高位元組(0-8) 9-15 低 位 元 組 ( ) 表示第六排的LED8x8_Address=? 練習題---假設三顆燈亮 高位元組(0-8) 9-15 低 位 元 組 ( ) 表示第六排的LED8x8_Address=? 00100000 11100110 掃描顯示簡介-1 原理特色 以單位時間只顯示一列資訊,由左至右 依序顯示 現場示範字母“人形”範例講解 掃描顯示簡介-2 優點 不需改變電流 可增加顯示效果 可調整亮度和顏色 設計較為方便 如何估算時間 估算的一面顯示時間= (每排的掃描時間*8 + 每面掃描的間隔) * 掃描幾次畫面 設計亮度訣竅 每列的掃描時間太多 整體看起來不像一面圖形 畫面跳動 太少 需要更多次刷新才能維持亮度 每面掃描的間隔 太長 畫面閃爍 太短 畫面較暗 每面掃描幾次 太多 時間太長 太少 時間太短 決定亮度的設計關鍵 每排掃描時間&每面掃描的間隔 比例調整 3 實驗步驟 新建一個工程名為LED8x8,並新建原始檔案、輸入程式,設 置好工程編譯產生映像檔。 硬體連接:用串列線將PC的COM1與實驗箱的UART1連起來, 再用USB連接。 線(A->B)將PC的USB HOST介面與實驗箱的USB Device介面連 起來,最後插上12V電源。 下載、除錯並執行 結合實驗內容和原理,觀察實驗現象,實驗結果應該是8×8點 矩陣LED迴圈顯示字母或數位形狀。 完成實驗練習題。 4 8X8LED點矩陣應用程式編譯實例 相關函數說明 8×8 LED點矩陣的位址 #define LED8X8_Address *(volatile U16 *)( 0x0x08001000 ) //nGCS1 8×8 LED點矩陣顯示函數void LED8X8_Display( U16 *LED8X8, U32 d ) 參數說明: LED8X8 :特定的顯示陣列指標 D:顯示維持的次數 功能說明: 顯示一個特定的陣列裏的資料 主要程式如下: 實驗程式Test_LED8×8(void) 功能說明:動態的LED顯示 主要程式如下: 主程序Main 主要程式如下: 上面是關於該實驗涉及到的部分函數,完整的程式請看光碟目錄的exp檔 案夾下相對應實驗的工程目錄。 作業 各組發揮創意變更顯示圖案 設計程式碼,使其可以利用電腦鍵盤切換 多組顯示圖案 設計程式碼,展示LED至少兩種顯示亮度 備註 volatile 為一關鍵字 加在變數的前面 被 volatile 宣告的變數 將不會使用最佳化編譯 有時一個變數的值改變了 compiler 並不會馬上將他寫入記 憶體中而會先把結果放在CPU暫存器中 等到處理結束之後 才寫入記憶體 若說這個變數是多執行緒的flag 其他的執行緒要透過這個變 數來反應,而這個值卻又沒有寫入記憶體 這時便會發生意 想不到的結果 又或者是這變數為一個硬體的暫存器,會被硬體所改變然 而compiler 並沒有正確的將值從硬體暫存器取出來,而是 將自己暫存的值拿來使用,這種情況 就是要用volatile 來宣 告變數 告訴compiler不要自己暫存變數來提升速度 如此這個變數有任何的改變,便會馬上反應出來