單片機靜態(tài)數(shù)碼管的設(shè)計
(LED Segment Displays)由多個發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在內(nèi)部連接完成,只需引出它們的各個筆劃,公共電極。數(shù)碼管實際上是由七個發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點就是8個。這些段分別由字母a,b,c,d,e,f,g,dp來表示。
本文引用地址:http://butianyuan.cn/article/201611/322009.htm簡介:
當數(shù)碼管特定的段加上電壓后,這些特定的段就會發(fā)亮,以形成我們眼睛看到的字樣了。如:顯示一個“2”字,那么應(yīng)當是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。LED數(shù)碼管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。小尺寸數(shù)碼管的顯示筆畫常用一個發(fā)光二極管組成,而大尺寸的數(shù)碼管由二個或多個發(fā)光二極管組成,一般情況下,單個發(fā)光二極管的管壓降為1.8V左右,電流不超過30mA。發(fā)光二極管的陽極連接到一起連接到電源正極的稱為共陽數(shù)碼管,發(fā)光二極管的陰極連接到一起連接到電源負極的稱為共陰數(shù)碼管。常用LED數(shù)碼管顯示的數(shù)字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
結(jié)構(gòu):
圖1 LED數(shù)碼管引腳
驅(qū)動方式:
LED數(shù)碼管要正常顯示,就要用驅(qū)動電路來驅(qū)動數(shù)碼管的各個段碼,從而顯示出我們要的數(shù)字,因此根據(jù)LED數(shù)碼管的驅(qū)動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。
靜態(tài)顯示
靜態(tài)驅(qū)動也稱直流驅(qū)動。靜態(tài)驅(qū)動是指每個數(shù)碼管的每一個段碼都由一個單片機的I/O端口進行驅(qū)動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅(qū)動。靜態(tài)驅(qū)動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅(qū)動5個數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O端口來驅(qū)動,要知道一個89S51單片機可用的I/O端口才32個,實際應(yīng)用時必須增加譯碼驅(qū)動器進行驅(qū)動,增加了硬件電路的復雜性。
動態(tài)顯示
LED數(shù)碼管動態(tài)顯示接口是單片機中應(yīng)用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實際上各位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。
驅(qū)動電流:
1、顯示效果:由于LED基本上屬于電流敏感元件,其正向壓降的分散性很大,并且還與溫度有關(guān),為了保證數(shù)碼管具有良好的亮度均勻度,就需要使其具有恒定的工作電流,且不能受溫度及其它因素的影響。另外,當溫度變化時驅(qū)動晶片還要能夠自動調(diào)節(jié)輸出電流的大小以實現(xiàn)色差平衡溫度補償。
2、安全性: 即使是短時間的電流超載也可能對發(fā)光管造成永久性的損壞,采用恒流驅(qū)動電路后可防止由于電流故障所引起的數(shù)碼管的大面積損壞。另外,我們所采用的超大型積體電路還具有級聯(lián)延時開關(guān)特性,可防止反向尖峰電壓對發(fā)光二極體的損害。超大型積體電路還具有熱保護功能,當任何一片的溫度超過一定值時可自動關(guān)斷,并且可在控制室內(nèi)看到故障顯示。
二、單片機靜態(tài)數(shù)碼管的設(shè)計
數(shù)碼管依次顯示0~F,時間是每隔1S。
源程序:
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar duan_code[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delay_ms(uint z)
{
}
void main(void)
{
}
評論