一、本文內容提要
介紹了單片機外接鍵盤的原理,并給出了應用實例。本期將介紹單片機動態驅動段式數碼管。通過該講,讀者可以掌握段式數碼管的工作原理和如何通過動態驅動的方法設計電路以及程序。
二、原理簡介
常用的段式數碼管有七段式和八段式,八段比七段多了一個小數點,其他的基本相同。所謂的幾段就是指數碼管里有相應的幾個小LED 發光二極管,通過控制不同的LED 的亮滅來顯示出不同的字形(見圖1(a))。從各發光二極管的電極連接方式又可以分為共陽極和共陰極兩種類型。共陰極則是所有的二極管的陰極連接在一起,而陽極是分離的(見圖1(b));而共陽極就是所有二極管的陽極是公共相連,而陰極則是分離的(見圖1(c))。本學習板采用的是八段共陰極數碼管,型號為LG3641AH。
圖1 數碼管內部結構圖
前文所述,數碼管與發光二極管的工作原理相同,共陽極時,所有正端接電源正極,當負端有低電平時,該段有電流流過,發光管亮,當負端為高電平時,該段無電流流過,發光管不亮。要顯示什么數字,就使對應的段為低電平(見表1)。共陰極與共陽極的電平變化狀態相反。當每個段的驅動電流為2~20mA,電流越大,發光越亮。
表1 顯示的數字和七段碼各位的對應關系表
常用的七段式數碼管的硬件驅動設計方法有:靜態驅動與動態驅動。
靜態驅動即指每個數碼管的數據線都有一個單獨的數據鎖存器,數據鎖存器輸入的數據由使能端控制,當使能端為高電平時,數據線上的數據(要顯示的七段碼)進入顯示器,使能端與地址譯碼器的輸出相連,要顯示那位,則選通那位的地址,在軟件設計上不要求程序循環,也不存在顯示數字發生閃爍。但是這樣會占用很多口線。
動態顯示是將所有位數碼管的段選線并聯在一起,由位選線控制是哪一位數碼管有效。這樣一來,就沒有必要每一位數碼管配一個鎖存器,從而節省了口線,地簡化了硬件電路。所謂動態掃描顯示即輪流向各位數碼管送出字形碼和相應的位選,利用發光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數碼管同時都在顯示。
三、電路詳解
此講的電路圖如圖2。從圖2 中可以看出,驅動八個八段數碼管總共用了6 個單片機IO 口,其中三個IO通過控制74HC595 來實現對數碼管中的各段驅動,另外三個IO 通過控制74HC138 來實現對8 個數碼管中的公共端驅動。此外為了增加74HC595 輸出的驅動能力,在其輸出后接了一級74HC245 芯片,以提高驅動能力,增加數碼管的亮度。在這里對這三個芯片進行介紹說明。
圖2 數碼管動態驅動電路圖
74HC138 是常用的3-8 線譯碼器, 即具有3 個輸入端( 管腳1,2,3) 與8 個輸出端( 管腳15,14,13,12,11,10,9,7),作用為完成3 位二進制數據到8 位片選的譯碼。也就是說,3 個輸入端對應8 個二進制數據(000,001,010,011,100,101,110,111),對于每個輸入的數據,輸出端相應位輸出低電平,其他7 位輸出高電平。74HC138 具有2 個低電平使能端(管腳4,5)與1 個高電平使能端(管腳6), 當低電平使能端接低電平且高電平使能端接高電平時74HC138 才能正常工作,否則8 個輸出端全部輸出高電平。因此在本學習板上設置一個跳線,如圖2 中所示中的SM-EN 短路塊,跳上時表示接低電平,74HC138 正常工作,跳開時表示接高電平,74HC138 不工作。74HC138 的真值表如表2 所示:H 代表高電平,L 代表低電平,X 代表不定的狀態。
表2 74HC138輸入輸出真值表
74HC595 是8 位串行輸入/ 輸出或者并行輸出移位寄存器芯片,可以將串行的數據,轉為并行的輸出,這樣可以節約控制器的IO 口資源,因而廣泛應用。
74HC595 最多需要5 根控制線, 即SDI(Pin14)、SCK(Pin11)、RCK(Pin12)、?(Pin10)和(Pin13)。圖2 中將?直接接到高電平, 用軟件來實現寄存器清零;?直接接到低電平, 一直輸出有效。把其余三根線和單片機的I/O 口相接, 即可實現對74HC595 的控制。數據從SDI 口送入74HC595 , 在每個SCK 的上升沿, SDI 口上的數據移入寄存器, 在SCK 的第9 個上升沿, 數據開始從SDO 移出。如果把第一個74HC595的SDO 和第二個74HC595 的SDI 相接, 數據即移入第二個74HC595 中, 照此一個個接下去, 可接任意多個。數據全部送完后, 給RCK 一個上升沿, 寄存器中的數據即置入鎖存器。此時為低電平, 數據即從并口Q0 ~ Q7 輸出。
74HC245 為八總線收發器芯片,即可以將數據從A 總線端口傳送到B 總線端口,也可將數據從B 總線端口傳送到A 總線端口。傳送方向由方向控制管腳DIR(芯片1 腳)輸入的邏輯電平而定。其真值表如表3 所示:
表3 74HC245輸入輸出真值表
H 代表高電平,L 代表低電平,X 代表不定的狀態。
四、程序設計
本講設計實例核心程序如下:
……
#define SDI P2_7 ( 1)
#define SCLK P2_6 ( 2)
#define RCLK P2_5 ( 3)
……
void dat_in(unsigned char dat) ( 4)
{
unsigned char i; ( 5)
for(i=0;i<8;i++) ( 6)
{
SCLK=0; ( 7)
SDI=dat&0X80; ( 8)
dat《=1; ( 9)
SCLK=1; ( 10)
}
RCLK=0; ( 11)
RCLK=1; ( 12)
}
程序詳細說明:
(1)將數據輸出端定義為P2.7 管腳。
(2)將數據時鐘輸出端定義為P2.6 管腳。
(3)將寄存器時鐘輸出端定義為P2.5 管腳。
(4)數據傳入函數,傳入一字節。
(5)定義一個無符號字符型變量。
(6)要因為要傳送一個字節,故要8 次。
(7)數據時鐘先輸出低。
(8)讓數據管腳輸出傳入字節的最高位。
(9)傳入字節左移一位。
(10)數據時鐘輸出高,上升沿將數據所存儲至74HC595 數據寄存器中。
(11)寄存器時鐘先輸出低。
(12)寄存器時鐘輸出高,上升沿將數據所存儲至74HC595 數據寄存器中。
以上字程序的作用, 當發送一個字節的顯示數據的時候, 通過74HC595 進行串行轉并行的控制,每次從單片機IO發送1Bit出去, 循環8次, 完成發送一個字節,之后再的輸出端以一個字節的方式傳輸給數碼管, 實現顯示。
五、調試要點與實驗現象
接好硬件電路,通過冷啟動方式將程序所生成的。hex 文件下載到單片機運行后,復位單片機,就可以觀察到板上8 個數碼管都點亮(見圖3),并從數字0 到9 變化閃爍。調試的時候需要注意的是,數碼管的使能控制端(見圖2)必須用跳線帽跳上,從而讓74HC138 能工作輸出。不需要用到數碼管時可以, 反之,跳開以節省系統電流損耗。
圖3 數碼管顯示效
另外動態掃描過程中, 數碼管顯示的亮度與驅動電流、點亮時間和關斷時間有關, 所以應當適當調整驅動電流大小和掃描頻率, 從而控制顯示所需要的亮度。這在驅動尺寸較大的數碼管組時更是如此,為了穩定顯示,硬件方面必須達到該有的驅動能力,如在驅動端再接達林頓管等。軟件方面,應在實際的調試過程中不斷的嘗試(見本講程序中所掃描次數的經驗值),找到一個最佳臨界點,即要注意動態掃描的延時間隔和掃描次數。
六、總結
本講介紹了單片機動態驅動數碼管的原理并給出了實例,通過該講,我們可以總結如下:
動態掃描驅動數碼管的優點:當顯示位數較多時,采用動態顯示方式比較節省I/O 口,硬件電路也較靜態顯示簡單;缺點:其穩定度不如靜態顯示方式。而且在顯示位數較多時CPU要輪番掃描,占用CPU較多的時間。
總的來說,無論是動態還是靜態顯示,其顯示更新的速率不能太快,如數據不停變化,太快則無法看清楚顯示的內容,在軟件設計是必須注意的。另外,在同等條件下動態顯示的亮度比靜態顯示要差一些,所以在適當提高驅動電流,例如使用限流電阻,就應略小于靜態顯示電路中的,或者使用緩沖驅動芯片。
-
單片機
+關注
關注
6040文章
44606瀏覽量
637270 -
數碼管
+關注
關注
32文章
1883瀏覽量
91306
原文標題:跟我學51單片機
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論