數碼管內部由七個條形發光二極管和一個小圓點發光二極管組成,根據各管的亮暗組合成字符。常見數碼管有10跟管腳。其中有兩個公共端,根據內部發光二極管的接線形式可分為共陰極和共陽極兩種。使用時,共陰極數碼管公共端接地,共陽極數碼管公共端接電源。參照下圖:
通過給每個管腳高低電平即可控制數碼管的亮滅。還是舉個例子吧,以共陰極數碼管為例,讓數碼管顯示數字0,只要個abcdef六個管腳輸入一個高電平即可讓數碼管顯示數字0。
LED顯示器工作方式有兩種:靜態顯示方式和動態顯示方式。靜態顯示的特點是每個數碼管的段選必須接一個8位數據線來保持顯示的字形碼。當送入一次字形碼后,顯示字形可一直保持,直到送入新字形碼為止。動態顯示的特點是將所有位數碼管的段選線并聯在一起,由位選線控制是哪一位數碼管有效。選亮數碼管采用動態掃描顯示。所謂動態掃描顯示即輪流向各位數碼管送出字形碼和相應的位選,利用發光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數碼管同時都在顯示。通過以上介紹,大家應該清楚數碼管顯示的基本原理了吧。下面我看些具體的東西。
下面三個圖為開發板的原理圖,此開發板用了兩個74HC573寄存器,可減少單片機io口的使用。鎖存器U8用來控制位選,即控制哪個數碼管。U9控制段選,即控制數碼管顯示什么。數碼管和鎖存器接在單片機的P0口。
接下來看靜態顯示和動態顯示的程序。
1、數碼管靜態顯示:
-
#include
-
#defineucharunsignedchar
-
#defineuintunsignedint
-
sbitdula=P2^6;//聲明U9鎖存器的鎖存端
-
sbitwela=P2^7;//聲明U8鎖存器的鎖存端
-
-
/*//點亮第一位數碼管
-
voidmain()
-
{
-
wela=1;//打開U8鎖存端
-
P0=0xfe;//送入位選信號
-
wela=0;//關閉U8鎖存端
-
-
dula=1;//打開U9鎖存端
-
P0=0x7f;//送入段選信號
-
dula=0;//關閉U8鎖存端
-
while(1);
-
}*/
-
-
//八個數碼管循環顯示0~F
-
ucharcodetable[]={
-
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
-
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
-
uchari;
-
//N毫秒延時
delay_ms(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=114;j>0;j--);}void main(){wela=1;P0=0x00;wela=0;while(1){for(i=0;i<16;i++){dula=1;P0=table[i];dula=0;delay_ms(500);}}}
2、動態數碼管
-
#include
-
#defineucharunsignedchar
-
#defineuintunsignedint
sbit d=P2^6;sbit w=P2^7;
-
delay_ms(uintms)
-
{
-
uinti,j;
-
for(i=ms;i>0;i--)
-
for(j=114;j>0;j--);
-
}
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 }; //八個數碼管顯示0~Funsigned char code list[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //數碼管的位選void main(){uchar i;while(1){for(i=0;i<8;i++){w=1;P0=list[i]; //循環點亮第i位數碼管w=0;d=1;P0=table[i];d=0;delay500ms();} }}/* 程序優化之前的代碼? w=1;P0=list[0]; //點亮第一位數碼管w=0;d=1;P0=table[0];d=0;delay500ms();w=1;P0=list[1]; //點亮第二位數碼管w=0;d=1;P0=table[1];d=0;delay500ms();w=1;P0=list[2]; //點亮第三位數碼管w=0;d=1;P0=table[2];d=0;delay500ms();w=1;P0=list[3]; //點亮第四位數碼管w=0;d=1;P0=table[3];d=0;delay500ms();w=1;P0=list[4]; //點亮第五位數碼管w=0;d=1;P0=table[4];d=0;delay500ms();w=1;P0=list[5]; //點亮第六位數碼管w=0;d=1;P0=table[5];d=0;delay500ms();w=1;P0=list[6]; //點亮第七位數碼管w=0;d=1;P0=table[6];d=0;delay500ms();w=1;P0=list[7]; //點亮第八位數碼管w=0;d=1;P0=table[7];d=0;delay500ms();*/
怎么樣,通過以上學習大家應該學會數碼管的基本原理了吧,接下來大家就可以控制數碼管顯示數字和英文字母了。
-
51單片機
+關注
關注
277文章
5710瀏覽量
127240 -
數碼管
+關注
關注
32文章
1889瀏覽量
92524 -
數碼管模塊開發
+關注
關注
1文章
1瀏覽量
918
原文標題:51單片機之數碼管
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
藍橋杯51單片機之獨立按鍵控制數碼管【單片機開發初學者必學會】

評論