【微控制器學習】第八課:微控制器的LED點陣

搞嵌入式的Lucas發表於2020-11-05

【朱老師課程總結 侵刪】


第一部分、章節目錄

1.8.1.LED點陣簡介

1.8.2.原理圖分析

1.8.3.LED點陣程式設計實踐1

1.8.4.LED點陣程式設計實踐2

1.8.5.LED點陣程式設計實踐3

1.8.6.字模介紹

1.8.7.橫向取模的顯示函式1

1.8.8.橫向取模的顯示函式2

1.8.9.縱向取模的顯示函式


第二部分、章節介紹


1.8.1.LED點陣簡介
    本節從外觀、作用、構建、原理等角度全面介紹LED點陣,並且分析了驅動LED點陣的2種電路連線方式。
1.8.2.原理圖分析
    本節對開發板中LED點陣的連線方式進行分析,其中重點在於4個74HC595的接法。
1.8.3.LED點陣程式設計實踐1
    本節開始LED點陣程式設計工作,重點是分析74HC595的時序,並且考慮如何將時序轉化為程式碼。
1.8.4.LED點陣程式設計實踐2
    本節實際編寫74HC595的驅動程式碼,並且嘗試點亮整個點陣螢幕以作實踐檢驗。
1.8.5.LED點陣程式設計實踐3
    本節進一步給點陣傳輸相應的資料去摸索LED點陣的點亮規律,為後面編寫文字顯示的函式做鋪墊。
1.8.6.字模介紹
    本節介紹字模的概念,並且講了字模的用法和獲取方法。
1.8.7.橫向取模的顯示函式1
    本節通過分析字模的取模方法和前面章節講過的LED點陣的單行顯示函式,來分析如何在點陣螢幕上顯示文字。
1.8.8.橫向取模的顯示函式2    
    本節接上節來顯示文字,並且將文字的顯示部分封裝成一個專門顯示文字的函式。
1.8.9.縱向取模的顯示函式
    本節以縱向取模的方式來獲取字模,然後修改驅動函式以實現文字顯示,目的是通過對比讓大家進一步掌握點陣文字顯示函式的編寫思路。

    
第三部分、隨堂記錄


1.8.1.LED點陣簡介


1.8.1.1、什麼是LED點陣
(1)外觀
(2)作用
(3)內部構造原理圖。點陣的優勢就是8+8個IO口獨立控制8*8個LED亮滅
(4)LED點陣如何工作
1.8.1.2、如何驅動LED點陣
(1)微控制器埠直接驅動。要驅動8*8的點陣需要2個IO埠(16個IO口)、要驅動16*16的點陣需要4個IO埠(32個IO口)。
(2)使用串轉並移位鎖存器驅動。要驅動16*16點陣只需要4個74HC595+3個IO口即可(資料口、SCLK、RCLK)。


1.8.2.原理圖分析


1.8.2.1、POS1-16和NEG1-16分別接移位鎖存器並行輸出端
(1)POS就是Positive正極,NEG是negetive負極。

1.8.2.2、74HC595的接法分析
(1)QA-QH8路並行輸出接到點陣的一個埠
(2)QH'序列輸出口接下一個74HC595的序列輸入SER(串聯順序按照ABCD)
(3)SER序列輸入接:第一個595的SER通過跳線帽JP595接P3.4,後面的每一個SER接前一個的QH'。這樣就構成了ABCD4個595晶片依次串聯。所以將來程式設計時整個4個74HC595的序列資料都是從P3.4出來的。
(4)SCLK(SRCLK)接P3.6
(5)RCLK接P3.5
總結:
(1)SCLK和RCLK是一樣的接法,都在接在P3.5和P3.6上。
(2)總共涉及到的IO口有3個:P3.4、P3.5、P3.6
(3)外部接線重點:2個8pin杜邦線+1個跳線帽

1.8.2.3、外部跳線接法
1.8.2.4、微控制器相關IO口


1.8.3.LED點陣程式設計實踐1


1.8.3.1、74HC595的時序分析
(1)晶片與晶片之間的通訊,都是按照一定的時序進行的。
(2)時序就是晶片與晶片之間的通訊引腳上電平變化以時間軸為參考的變化順序。
(3)時序是通訊雙方事先定義好的,通訊的傳送方必須按照時序來傳送有意義的資訊,通訊的接收放按照時序去接收解析傳送方發來的電平變化資訊,然後就知道傳送方要給我傳送什麼東西了。
(4)我們程式設計時:傳送方是微控制器,接收方是74HC595。因為595晶片本身是不能程式設計的,他的時序晶片出廠時已經設定好了。因此我們微控制器必須遷就595晶片,按照595晶片的時序來給他發資訊。
(5)所以我們要先搞清楚74HC595的時序規則。595的晶片手冊上就有它的時序描述(時序圖),參考描述就可以明白595晶片的時序規則,然後將其用程式語言表述出來就是程式了。
(6)74HC595的時序關鍵是:SCLK和RCLK。SCLK是移位時鐘,595晶片內部在每個SCLK的上升沿會對SER引腳進行一次取樣輸入,就向595內部輸入了1位,如此迴圈8次就輸入了8位二進位制。RCLK是鎖存時鐘,QA-QH的8位並行輸出訊號在RCLK的上升沿進行一次鎖存更新。
(7)理解74HC595晶片的通訊時序關鍵,其實就是:SER進行資料的序列輸入,SCLK提供移位時鐘,RCLK提供鎖存時鐘。

1.8.3.2、sbit定義位變數
(1)之前程式設計都是直接操作一個IO埠,可以用埠名(P0、P1)來整體操作一個IO埠中的8個引腳。但是這種方法不能操控單獨1個IO口。
(2)今天程式設計需要單獨操作1個IO引腳,譬如要操作P3.4,但是直接寫P3.4的話C語言是不認識的,而必須使用sbit關鍵字來定義一個引腳。
sbit SER = P3^4;


1.8.4.LED點陣程式設計實踐2


1.8.4.1、編寫移位暫存器傳送函式SendData
1.8.4.2、全屏點亮測試
總結:
(1)編寫硬體控制程式碼,時序理解是關鍵。只要時序理解正確的,並且程式碼按照時序的要求去寫,就沒問題。
(2)時序操作部分的程式碼只要寫好了並且是正確的,下來這一塊就沒問題了,很簡單了,因為它是死板的不變的。


1.8.5.LED點陣程式設計實踐3


1.8.5.1、巨集定義的引入和uchar、u8
1.8.5.2、對點陣點亮規律的探索
(1)程式設計點亮最上面一排
(2)程式設計點亮最下面一排
(3)程式設計點亮最左面一列
(4)程式設計點亮左上角一顆
(5)程式設計點亮角上4顆
1.8.5.3、思考:如何顯示文字


1.8.6.字模介紹


1.8.6.1、何為字模

(1)如何記錄組成字的LED點陣亮滅資訊(16*16點陣一共有256點,顯示一個特定的字需要其中有些點亮而另一些不亮,如何記錄哪些點亮哪些點不亮?用字模)
字模如何工作?256個點用256個二進位制位表示,1表示這個點亮,0表示不亮。256個點就是256個二進位制位,也就是256/8=32個位元組。所以一個大小為16*16的字的字模是32個位元組大小。所以字模的表現形式就是32個unsigned char型資料。
(2)字模如何獲取。一般都是用專門的字模提取軟體去提取的。這種軟體的作用就是給一個字就能自動得到這個字對應的32個位元組的字模編碼。
(3)字模的結果不是唯一的,和你提取字模的方式有關的。(橫向縱向、從上到下之類區分)提取字模時是沒有標準的,怎麼做都是對的或者都是錯的,關鍵是你提取字模的方式和你用來在點陣上顯示這個字模的函式必須對應。

1.8.6.2、字模提取軟體的使用
(1)使用方式:第一步先選擇字形(實際開發板上點陣多大就選擇多大),第二步再選擇合適的字型、字號等,第三步選擇編碼方式和取模方向,第四步直接將得到的陣列複製走
1.8.6.3、字模的手工分析和驗證
(1)手工對比字模內容和螢幕顯示,從而確認取模方式
(2)結合前面課程,思考如何將之顯示出來


1.8.7.橫向取模的顯示函式1


1.8.7.1、工程建立
1.8.7.2、先顯示第一行
1.8.7.3、多顯示2行去摸索規律
(1)規律1:d1和d2用字模來填充,填充時要取反
(2)規律2:d3和d4來選擇哪一行被點亮,而d1和d2選擇這行中哪一列被點亮。
(3)規律3:SendData一次送16個LED的亮滅資訊(2位元組),所以必須呼叫256/16=16次SendData函式,才能把整個點陣全部點亮完畢。
(4)規律4:每次呼叫SendData時,d1-d4變化都是有規律的,因此有希望通過迴圈來呼叫SendData而無需手工呼叫16次。


1.8.8.橫向取模的顯示函式2


1.8.8.1、定義行選擇陣列
1.8.8.2、使用for迴圈進行顯示
1.8.8.3、編寫點陣字顯示函式


1.8.9.縱向取模的顯示函式


1.8.9.1、先觀察總結縱向取模的取模規律
1.8.9.2、顯示第1列
1.8.9.3、多顯示幾列尋找規律
1.8.9.4、編寫成函式然後實驗測定

相關文章