數碼管也是在日常生活中經常看到的顯示器件,例如數字鐘。有了前面led的概念,其實數碼管的原理就清楚了,數碼管內部就是由多個led適當的布局形成。
8 段數碼管內部由於有8個led構成,而在前面的內容,已經介紹led點亮的條件及
方法,那麼這就涉及共vcc,還是共gnd的問題,即數碼管中常說的共陽(共vcc)數碼管,共陰(共gnd)
數碼管。
如圖1.8所示是共陰數碼管的內部圖示,而圖1.9所示是共陽數碼管的內部圖示。
圖1.8 3合1共陰數碼管內部原理圖
圖1.9 3合1共陽數碼管內部原理圖
圖1.8可以看出,每一位數碼管內的led陽極都是單獨一路的,而陰極都是連線在一起,如第一位數碼管所有led陰極連線到12號引腳上,因此稱為共陰數碼管;而讀者可能已經發現3位數碼管的陽極都分別連線在了一起,這樣做的目的是節省i/o口,因為如果每一位數碼管的8個led都單獨,那麼3位的數碼管就需要3*8=24個i/o口,如果數碼管位數更多,需要i/o口就更多了,因此驅動多個數碼管都採用a~dp線共用的方式,而通過控制數碼管各個位的公共端,輪流顯示數碼管的各個位。說到這,也許有人會問,平常看到的數碼管都是幾個位同時顯示的呀,怎麼就是輪流顯示的呢?這其實是利用了人眼的視覺暫留現象,幾個數碼管輪流快速的重新整理,人眼就無法察覺,看起來就像是同時顯示的一樣。下面就以3合1共陰數碼管為例,介紹一下,該如何設計數碼管顯示電路。如圖1.10是數碼管部分的電路,採用匯流排的方式連線,由於是共陰數碼管,因此陽極a~dp進行了上拉,即通過圖示的r2~r9接到vcc端。
圖1.10 3合1共陰數碼管電路設計
圖1.11是微控制器側的接線,從圖示看到a~dp分別連線到p2.0~p2.7,dig1~di3連線到p7.0~p7.2。
圖1.11 3合1共陰數碼管驅動微控制器部分
在設計過程中a~dp盡量採用同乙個埠,例如本例子的p2口,並且按順序排列,這樣做的好處是在後續程式設計的時候,操作語法會更簡單,dig1~dig3也是同樣的道理。如果不是受限於pcb布局,佈線難度,像這種需要多個i/o口需要同時操作的情況,盡量採用分配同乙個埠這樣的方式。
舉個簡單的例子,如果數碼管需要顯示乙個數字「5」,如圖1.12所示,需要點亮acdfg的位置,即acdfg輸出高電平,其餘輸出低電平,那麼按照現在的電路,只需要一句話p2=0x6d即可。
圖1.12顯示「5」需要點亮的led
而如果把a~dp分配到不同的埠,例如a~d分配到p2.0~p2.3,e~dp分配到p1.0~p1.3,同樣顯示數字5,那麼就需要以下這幾句語句才可以。
這裡涉及到c語言程式設計的內容,僅僅簡單帶過,在後續的程式設計部分內容會有詳細的介紹。在這裡進行說明的原因是希望讀者能明白,在產品設計的過程中,就盡量考慮後續的內容,而不是僅僅把電路設計完成就完事了。當然,這是需要一些經驗的積累。
現在的電路接法,雖然可以滿足應用要求,很多開發板、教程也都這樣接,但在上一節的內容已經提到,目前這樣led的陰極直接連線到微控制器i/o口,led點亮的時候,會有電流灌入i/o口,至於為什麼,讀者可按照之前的內容自行分析。為了解決這樣的問題,可以按照上一節的方法,追加三極體對dig1~dig3進行控制,於是,數碼管部分電路就修改為圖1.13所示。
圖1.13改良後的數碼管驅動電路
前面提到的是常用的數碼管驅動電路,但是這個驅動電路,需要耗費的微控制器資源比較多,一是i/o口比較多,固定的8個段選口,以及隨著數碼管數量增加的位選口,例如以上的3位數碼管,需要用8+3=11個i/o口。隨著數碼管的位數增加,i/o口的數量隨之增加。另外乙個是,程式處理上,需要不斷的重新整理數碼管的顯示內容,才能確保穩定顯示,耗費核心資源。因此對於微控制器i/o資源不足的情況下,也可以考慮採用專門的數碼管驅動晶元。
舉個例子,同樣是驅動共陰數碼管,採用tm1620b,可以驅動6段*7位~9段*4位的數碼管,而只需要3個i/o口,tm1620b的引腳定義如圖1.14。而驅動共陰數碼管的電路原理如圖1.15所示;
圖1.14 tm1620b的引腳定義
圖1.15 tm1620b驅動共陰數碼管的電路原理
一般實現所需要的功能有多種方法,具體應用該如何選擇設計方案,就需要綜合考慮成本、pcb空間、微控制器i/o口資源,驅動晶元選型等。這些也許不同的企業,考慮的內容不同,不能一概而論,所以這裡只給出了一些建議。
最後附上一張tm1620b驅動6位共陰數碼管的電路原理圖,圖中的dio/clk/stb三個引腳,就是接到微控制器的i/o口的,上拉電阻r1,r2,r3是為了確保微控制器輸出高電平為穩定的高電平,下拉的c1,c2,c3是為了濾掉3個引腳的高頻訊號,防止訊號干擾導致傳輸的資料錯誤,c4,c5是對tm1620b的電源進行濾波,所以需要靠近晶元放置。至於顯示驅動程式如何編寫,會在後續的硬體程式設計章節進行介紹。
圖1.16 tm1620b驅動6位共陰數碼管
繪製七段數碼管
seven digits draw v1.0 第一,繪製線 第二,繪製七段數碼管組成的數字 第三,繪製優化數碼管間距 第四,繪製多組數字 第五,獲取系統時間 第六,主函式執行程式。如下 import turtle as t import time def drawline draw drawgap ...
七段數碼管繪製
步驟1 繪製單個數字對應的數碼管 步驟2 獲得一串數字,繪製對應的數碼管 步驟2 獲得當前系統時間,繪製對應的數碼管 步驟1 繪製單個數字對應的數碼管 基本問題是繪製一條線,可將其定義為乙個基本函式 def drawline draw turtle.pendown if draw else turt...
Python 七段數碼管
缺點 七段數碼管間無間隔不美觀,沒有 年 月 日 字樣不直觀,不能表示系統時間需手動輸入 import turtle defdrawline draw 繪製單段數碼管 turtle.pendown if draw else turtle.penup turtle.fd 40 turtle.right...