1. LeD數碼管在顯示時公共端有那兩種連接方式單片機分別輸出什麼電平可以使數碼
LeD數碼管在顯示時公共端有共陽極和共陰極兩種連接方式。單片機驅動led碼段分別輸出低電平,輸出高電平可以使數碼管段點亮。
2. 單片機怎麼控制LED點陣實現左移顯示
相信你是個新手,相信你用的是51的兩排8位口實現的功能,那麼樓上的解釋你可能不太懂(說實話我也不是很懂。)
但是簡單一點來說led點陣需要兩排8位,一個負責行,一個負責列,比如0是選中的意思,那麼行是01111111,列是1011111,那麼第一行的第二列燈亮。原理說完,那麼左移的話那就簡單了,簡單而言,行不變,列左移一位,比如上面的行保持01111111,列在下一次變成01111111,就使得第一行的第一列亮燈了。那麼在左移的時候,行是不用變,原來是多少就多少;而列呢,每次使用左移符號」<<「左移一位,就達到了左移顯示的效果了。
3. 在單片機應用系統中。LED數碼管顯示電路通常有什麼顯示方式
動態掃描。
LED燈是繼電器工作狀態指示燈,點亮代表繼電器啟動中,熄滅代表繼電器關閉,LED1是伴同蜂鳴器報警的指示燈,只要數碼管不處於設置時間狀態,都能夠用E歸零鍵進行清零操作,數碼管就會顯示00:00 (此時不是對主晶元進行復位,只是對狀態進行清零) 。
(3)單片機led顯示擴展閱讀:
注意事項:
檢查時若發光暗淡,說明器件已老化,發光效率太低。如果顯示的筆段殘缺不全,說明數碼管已局部損壞。
對於型號不明、又無管腳排列圖的LED數碼管,用數字萬用表的h距擋可完成下述測試工作:判定數碼管的結構形式(共陰或共陽),識別管腳,檢查全亮筆段。預先可假定某個電極為公共極,然後根據筆段發光或不發光加以驗證。
4. 單片機編程:LED動態顯示
不知道你要怎能么動?我就給個數字顯示也動,數碼館也流水顯示的
#include
#include
//包含流水燈的頭文件
#define
uint
unsigned
int
#define
uchar
unsigned
char
uint
temp,aa,num,numwe;
sbit
an=P3^3;
//段控制端定義
sbit
wei=P3^4;
//位控制端定義
uchar
code
tablewe[]={0x01,0x02,0x04,0x08,0x10,0x20};
//6個數碼管位碼
uchar
code
table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E,};
//數碼管段碼(共陽)
void
main()
{
//以下為初值:
aa=0;
num=0;
//段碼要顯示的個數,初始為0
numwe=0;
//位碼要移動的位數,初始為0
temp=0x01;
//顯示狀態為單燈暗涌移動,若改成0xfe則單燈點亮移動
P2=temp;
//LED顯示在第一位
an=1;
//選通段
P0=0xC0;
//送段碼、從0開始顯示
an=0;
//關閉段
wei=1;
//選通位
P0=0x01;
//送位碼、從第一位數碼管開始顯示
wei=0;
//關閉位
TMOD=0x01;
//TO工作方式1,也直接寫TMOD=0
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
//賦定時初值50MS
EA=1;
ET0=1;
//開定時器0中斷
TR0=1;
//啟動定時器0
//以下為循環:
while(1)
{
if(aa==100)
//變化延時
{
aa=0;
temp=_crol_(temp,1);
//單燈左移值
P2=temp;
//顯示
num++;
//段加1
if(num==16)//0~F共16個,最多到顯示」F"
num=0;
an=1;
//開段
P0=table[num];
//顯示
an=0;
numwe++;
//位加1
if(numwe==6)//最多移6位
numwe=0;
wei=1;
//開位
P0=tablewe[numwe];
//顯示
wei=0;
}
}
}
void
exter0()
interrupt
1
using
1
//using選通用工作寄存器R0-R7,默認為0組
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
aa++;
}
5. 單片機led顯示c程序
電路圖如下:
#include<reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitan=P2^6;
sbitwei=P2^7;
ucharcodedigit[6]={0xf9,0xa4,0xb0,0x99,0x92,0X82};
voiddelay(xms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voidmain()
{
while(1)
{
wei=1;
P0=0x01;
wei=0;
an=1;
P0=digit[0];
an=0;
delay(500);
wei=1;
P0=0x02;
wei=0;
an=1;
P0=digit[1];
an=0;
delay(500);
wei=1;
P0=0x04;
wei=0;
an=1;
P0=digit[2];
an=0;
delay(500);
wei=1;
P0=0x08;
wei=0;
an=1;
P0=digit[3];
an=0;
delay(500);
wei=1;
P0=0x10;
wei=0;
an=1;
P0=digit[4];
an=0;
delay(500);
wei=1;
P0=0x20;
wei=0;
an=1;
P0=digit[5];
an=0;
delay(500);
}
}
6. 單片機開關控制LED數碼管的編碼
一,什麼是數碼管
數碼管,其實就是由多個led組合在一起的組合顯示塊;有共陰極的,也有共陽極的。使用的數碼管不同,裡麵包含的led個數也會有相關的差異。我們通常使用的數碼管,裡面有8個led燈,大家可以參照生活中的數碼管器件就一目瞭然了,你會發現,數碼管顯示的每一個數字或字母,都是一段一段組合拼接起來的,並不是像寫的那樣圓滑。其中,組合的每一個段,就是一個led燈。
二,點亮一個數碼管
2.1.在點亮數碼管之前,你還必須弄清楚,改數碼管的接是共陰極還是共陽極的接法;其次,還得弄清楚是那幾個(或一個) IO口是IO口 的斷選位(也就是控制顯示哪一個數碼管,通常由IO口控制一個解碼器來實現,因為這樣更節約IO口資源)。
2.2.弄清楚斷選位之後,還得知道,是哪些IO口控制我們的數碼管上的led;
比如:
P0.0 控制數碼管上的led.0;(注意:數碼管上對應的led位,可以參照原理圖上的或查閱相關資料獲得,這里僅僅舉列)
P0.1-->led.1 P0.2-->led2 ......
2.3.想要點亮數碼管很容易,只要開啟對應的數碼管斷選位,再設置數碼管上led的值為點亮(有的數碼管是共陰極接法,有的是共陽極接法,根據具體的設計,給出相關的高或低電平即可)就OK了。但是,我們要在數碼管上顯示我們想要的數字增么辦呢?這個時候,就是考研創造力的時候了,有的數碼管的資料會直接給出它的真值表,但有的卻不一定找得到。在這個時候,我們就得根據我們想要顯示的數字,點亮並熄滅對應數碼管上的led來實現。(推薦:你可以自己先實驗,找出0-9,或其他想要顯示的字元所對應的IO口的值,來保存起來,這樣你就可以重復利用啦!)
三,點亮多個數碼管
3.1 我們想要點亮多個數碼管,首先可以根據2.1,弄清楚你的數碼管的斷選位,然後周期性的改變斷選位的值,以此動態逐個顯示你的數碼管。
3.2 在顯示多個數碼管時,建議周期大於100hz,這樣人眼難以識別起關和開的瞬間,我們看起來就像時很多個數碼管同時點亮了一樣。
四,動態顯示數碼管
4.1 ,在動態顯示數碼管的值時,建議先根據2.2和2.3,把對應的數碼管顯示參數照準,並保存下來,這樣你用起來也方便。
4.2, 動態顯示數碼管,我們可以在規定的時間周期,改變數碼管對應led的開關個數來實現,比如說:
0 在數碼管中顯示的值為0xc0 1是0xf9
那麼我們就可以在規定的時間里,切換該值,從而達到動態效果。
4.3 我們應該注意的時,掃描數碼管(即顯示多個數碼管)應該與設置數碼管的值(數碼管中led的狀態更新)區分開,掃描周期我們可以放短一點,而改變它的值的周期我們可以一秒或者是2秒改變一次。
4.4 消除余暉,大家實驗後,可能會發現,你顯示的值有的時候並不是想要的,它會跳動或者是亮滅不清晰,這個我們就叫做余暉效應。
產生余暉效應的原因是因為你在選則下一個數碼管的時候,還保留了上一個數碼管的顯示值,所以我們消除余暉,只需要在改變數碼管顯示值的時候,先關閉所有數碼管的顯示,在值跟新完成後我們再打開顯示。這里你不用擔心關閉和開啟會有閃爍,更新值的時間會很短,肉眼時幾乎察覺不到滴。
5,示列代碼
/*
晶元:stc89c52
器件:38解碼器等
編譯環境:UV4,C語言
*/
#include
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned char code LedChar[] = {undefined
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};//數碼管顯示值真值表緩存數組
unsigned char LedBuff[6] = {undefined
0xff,0xff,0xff,0xff,0xff,0xff
};//數碼管顯示值緩存數組
void main()
{undefined
unsigned char i =0;
unsigned int cnt = 0;
unsigned long sec = 0;
ENLED = 0;
ADDR3 = 1;
TMOD = 0x01;
TH0 = 0xfc;
TL0 = 0x67;
TR0 = 1;
while(1)
{undefined
if(TF0==1)
{undefined
TF0 = 0;
TH0 = 0xfc;
TL0 = 0x67;
cnt++;
if(cnt>=1000)
{undefined
cnt = 0;
sec++;
LedBuff[0] = LedChar[sec%10];
LedBuff[1] = LedChar[sec/10%10];
LedBuff[2] = LedChar[sec/100%10];
LedBuff[3] = LedChar[sec/1000%10];
LedBuff[4] = LedChar[sec/10000%10];
LedBuff[5] = LedChar[sec/100000%10];
}
switch(i)
{undefined
case 0:ENLED = 1;ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=LedBuff[0];ENLED = 0;break;
case 1:ENLED = 1;ADDR2=0;ADDR1=0;ADDR0=1;i++;P0=LedBuff[1];ENLED = 0;break;
case 2:ENLED = 1;ADDR2=0;ADDR1=1;ADDR0=0;i++;P0=LedBuff[2];ENLED = 0;break;
case 3:ENLED = 1;ADDR2=0;ADDR1=1;ADDR0=1;i++;P0=LedBuff[3];ENLED = 0;break;
case 4:ENLED = 1;ADDR2=1;ADDR1=0;ADDR0=0;i++;P0=LedBuff[4];ENLED = 0;break;
case 5:ENLED = 1;ADDR2=1;ADDR1=0;ADDR0=1;i=0;P0=LedBuff[5];ENLED = 0;break;
default:break;
}
}
}
}
以上代碼,僅供參考,您需要根據自己原理圖的設計來實現。
7. 51單片機LED點陣屏有燈不亮怎麼辦
可進入調試模式,在執行22句後,檢查595數據,看看其輸出是不是 0xaa,在執行23句後,檢查P0口數據,看看是不是 0x7f;
8. 單片機led動態顯示 什麼是輸出位選碼
單片機led動態顯示,優點我就不說了,需要簡單說下原理,就是幾位LED順序輪流顯示自己的內容,任一時刻只有一位LED在亮,但由於輪流速度很快,視覺上看到的都在亮。LED有一個公共端,控制這個引腳,就可實現LED亮滅,動態顯示時,我們把這個端叫位選端,一個位選端鏈接一根IO口線。為了控制這些位選端,連接位選端的IO口線同一時刻只能有一根有效,為達到這個目的,設置一組位選碼,刷新顯示時將對應位選碼輸出至IO埠,這就是是輸出位選碼。
9. 單片機驅動LED數碼管有哪幾種顯示方法
就兩種顯示方式,一種是靜態顯示方式,適合於數碼管位數較少的電路。
另一種是動態掃描顯示方式,適合於多位數碼管的電路。