『壹』 51單片機驅動4位一體共陰極數碼管,位碼驅動如圖。p2為高時三極體導通,集電極低數碼管亮。
畫模擬圖,位驅動用三極體是一個很麻煩的事,有點自找苦吃啊。
P2輸出的位碼應該是高電平有效。但是,每個三極體的集電極必須要加上拉電阻,就像P0口要加上拉電阻一樣的,但是這個電阻必須是模擬的,且阻值選10K才行,阻值不合適就不會顯示的,另個三極體基極電阻的阻值也要求在1K,發射極電阻可以不用,但用了,不能太大了,這三個電阻都必須符合要求才能顯示。太麻煩啦。
如下圖
『貳』 北京哪裡有賣單片機,數碼管什麼的地方
在海淀黃庄路口(地鐵10號線)東南角有兩個大的電子市場,中發電子市場和知春電子城,都是賣電子元器件的,幾乎應有盡有。你可以網路地圖。
『叄』 單片機單個數碼管元件名稱是什麼
數碼管,也稱作輝光管,是一種可以顯示數字和其他信息的電子設備。
2.原理圖
(1)亮時為0,滅時為1(從右往左記二進制)
(2)段選與位選:
a.位選:假設我們要控制8個數碼管,依次是1、2…… 8。我們要選擇控制哪個數碼管(比如控制第1個),這就是位選,位選有選擇位置的意思。
b.段選:然後我們要讓第1個數碼管顯示「1」。我們就要控制第一個數碼管「b=0、c=0,a=1、d=1、e=1、f=1、g=1(或者b=1、c=1,a=0、d=0、e=0、f=0、g=0),這就是段選,即選擇數碼管的哪一段。
void display(void)
{
P2 = ((P2&0x1f)|0xe0); //數碼管消隱
P0 = 0xff;
P2 &= 0x1f;
P2 = ((P2&0x1f)|0xc0); //位選控制
P0 = 1<<dspcom;
P2 &= 0x1f;
P2 = ((P2&0x1f)|0xe0); //段碼輸入
P0 = tab[dspbuff[dspcom]];
P2 &= 0x1f;
if(++dspcom == 8){
dspcom = 0;
}
}
登錄後復制
3.結構圖
(1)高電平和低電平:
a.高電平:高電平指與低電平相對的高電壓,是電工程上的一種說法。在邏輯電平中,保證邏輯門的輸入為高電平時所允許的最小輸入高電平,當輸入電平高於輸入高電壓(Vih)時,則認為輸入電平為高電平。
b.低電平:低電平(Vil)指的是保證邏輯門的輸入為低電平時所允許的最大輸入低電平,當輸入電平低於Vil時,則認為輸入電平為低電平。是與高電平相對的低電壓,是電子工程上的一種說法。
(2)共陽極和共陰極:
a.共陽極數碼管是指八段數碼管的八段發光二極體的陽極(正極)都連在一起,而陰極對應的各段可分別控制。
b.共陰極數碼管是指八段數碼管的八段發光二極體的陰極(負極)都連在一起,而陽極對應的各段分別控制。
4.真值表
數字 真值表
0 0xC0
1 0xF9
2 0xA4
3 0xB0
4 0x99
5 0x92
6 0x82
7 0xF8
8 0x80
9 0x90
Tips: 二進制:(前綴:0b/0B)(後綴:b/B)
八進制:(前綴:0)(後綴:o/O)
十進制:(前綴:無,可加+/-)(後綴d/D)
十六進制:(前綴:0x/0X)(後綴:h/H)
**此處採用共陽極數碼管**
登錄後復制
5.特殊功能寄存器
特殊功能寄存器是80C51單片機中各功能部件對應的寄存器,用於存放相應功能部件的控制命令,狀態或數據。
(1)sbit是定義特殊功能寄存器的位變數
ex: sbit led1 = P1^0
將發光二極體 led1 接 P1口 0 位端,用以控制 led1 的亮滅
***在C語言里,如果直接寫P1.0,C編譯器並不能識別,而且P1.0也不是一個合法的C語言變數名,所以得給它另起一個名字,這里起的名為P1_0,sbit的用法有三種:
a:sbit 位變數名=地址值
b:sbit 位變數名=SFR名稱^變數位地址值
c:sbit 位變數名=SFR地址值^變數位地址值
(2)sfr特殊功能寄存器:
sfr也是一種擴充數據類型,點用一個內存單元,值域為0~255。利用它可以訪問51單片機內部的所有特殊功能寄存器。如用sfr P1 = 0x90這一句定P1為P1埠在片內的寄存器,在後面的語句中我們用以用P1 = 255(對P1埠的所有引腳置高電平)之類的語句來操作特殊功能寄存器。 sfr P1 = 0x90; //定義P1 I/O 口,其地址90H sfr 關鍵定後面是一個要定義的名字,可任意選取,但要符合標識符的命名規則,名字最好有一定的含義如P1 口可以用P1 為名,這樣程序會變的好讀好多。等號後面必須是常數,不允許有帶運算符的表達式,而且該常數必須在特殊功能寄存器的地址范圍之內(80H-FFH)。sfr 是定義8 位的特殊功能寄存器,而sfr16 則是用來定義16 位特殊功能寄存器,如8052 的T2 定時器,可以定義為: sfr16 T2 = 0xCC; //這里定義8052 定時器2,地址為T2L=CCH,T2H=CDH
『肆』 大佬們誰能解釋一下單片機74hc245怎麼控制數碼管位選,我只會用74hc573,看原理圖找不到位
74hc245怎麼控制數碼管位選,其實,就是做驅動的,相當於直通的。對於實物,因單片機引腳不能直接驅動數碼管,特別是數碼管的位控電流更大,所以,用74HC245來驅動的。而對模擬就無所謂了。如下的電路,74HC245接在P2口,那麼位選是由P2口來控制的,寫程序時,根本體現不出什麼245的作用,相當於用P2口直接作位控一樣,只是對於實物,確定起到了放大電流的作用。
『伍』 單片機與數碼管的連接
如果22位數碼管共用7段來驅動,顯示效果很差,太暗!而且單片機直接驅動運行起來也費力。你可以計算一下就知道了:如果想顯示沒有閃爍感,顯示刷新周期就要超過50HZ,也就是每20mS這22位數碼管都要顯示一次,那麼每個數碼管每次只能顯示20mS÷22=0.91mS,而且單片機在這么短的時間內就沒有太多的時間處理其它的任務了。
要解決這個問題,你必須用專用的LED顯示驅動IC,而且要保證每個數碼管顯示的占空比要超過1/8才會有足夠的亮度,如果是室外使用最好是1/4或1/3。
如果占空比選用1/6,那麼你要在同一時間每次點亮22/6(4)個數碼管,你可以看看TM1629A、B、C、D顯示驅動IC,可以用2塊驅動IC,每個IC同時點亮2個數碼管,每個IC驅動11個數碼管。
用這種IC比用74系列的晶元的好處是:只有在需要改變顯示內容時,單片機才發送數據到驅動IC,平時不必發送數據,這樣MCU就可以把時間用於處理其它任務了。
具體的電路你看IC資料就行了。
『陸』 單片機實現4位一體數碼管顯示0000—FFFF的16進制(C語言編程)
/*四個數碼管的動態顯示*/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit = P2^6;
sbit we = P2^7;
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uint a;
//---------------------------------------------
void delayms(uint xms)
{
uint i, j;
for(i=xms;i>0;i--) for(j=110;j>0;j--);
}
//---------------------------------------------
void disp()
{
we = 1; P0 = 0xf7; we = 0; //鎖存開啟 個位 鎖存關閉
P0 = table[a % 256 % 16]; delayms(5); //輸出個位數
we = 1; P0 = 0xff; we = 0; //鎖存開啟 消隱 鎖存關閉
we = 1; P0 = 0xfb; we = 0; //鎖存開啟 十位 鎖存關閉
P0 = table[a % 256 / 16]; delayms(5); //輸出十位數
we = 1; P0 = 0xff; we = 0; //鎖存開啟 消隱 鎖存關閉
we = 1; P0 = 0xfd; we = 0; //鎖存開啟 百位 鎖存關閉
P0 = table[a / 256 % 16]; delayms(5); //輸出百位數
we = 1; P0 = 0xff; we = 0; //鎖存開啟 消隱 鎖存關閉
we = 1; P0 = 0xfe; we = 0; //鎖存開啟 千位 鎖存關閉
P0 = table[a / 256 / 16]; delayms(5); //輸出千位數
we = 1; P0 = 0xff; we = 0; //鎖存開啟 消隱 鎖存關閉
}
//---------------------------------------------
void main()
{
char i;
a = 0;
while(1) {
for (i = 0; i < 20; i++) disp();
a++;
}
}
//---------------------------------------------
上述的《千百十個》四個位,實際上,顯示的是16進制數。
程序,是借用了樓主的《單個顯示程序》,但是,和樓主的電路,並不配套。
樓主的電路,並沒有鎖存器。
而程序中,卻是使用鎖存器的編程思路。
未必好用,試試看吧。
『柒』 單片機與數碼管
首先是4.7K上拉電阻
單片機的P0埠和其它三個埠不一樣,內部沒有集成上拉電阻,所以需要外部連接
再有就是1K電阻
這個是起到限流作用,作用於數碼管,因為數碼管的abcdefg各引腳是直接與單片機相連,單片機的埠剛好是0有效,即低電位0V,這樣流過數碼管的電流就靠三極體限流,這種接法的三極體工作在放大狀態,輸出的電流是根據基極載入的電壓發生變化的,工作不穩定
你圖中的接法不好,容易燒數碼管
解決辦法是,4.7K電阻不變,P0埠直接與三極體基極(b)相連,三極體的集電極(c)與Vcc之間接上1K電阻進行限流,三極體的射極(e)與數碼管連接
這樣就避免三極體擊穿時,燒壞數碼管,此種接法的三極體工作在開關狀態,工作更穩定
『捌』 單片機是什麼在哪裡可以買到
是一隻微型的集成晶元,微型就代表晶元小,但程序存儲器和數據存儲器容量有的很大,一般到電子城賣LED數碼管或按鍵的地方都有賣。單片機有很多型號,有的型號停產當然不好買,但是常用的一般都有。
『玖』 51單片機能直接驅動數碼管嗎
不可以的,給你分析分析:點亮一個發光diode,需要驅動電流至少5-10mA.而C51單片機的I/O口輸出的電流在1mA左右。要想有提供大電流就需要在I/O口和diode之間加入一個電源,而一個加入一個電源之後,電流實在有點大,diode可受不了。那就只好在電源上在串一個電阻,電阻值的大小如何選,憑樓主的智慧應該可以算出來的。給個提示,一般上拉電阻值K級以上。