<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機驅動(dòng)數碼管電路的制做

單片機驅動(dòng)數碼管電路的制做

作者: 時(shí)間:2016-11-22 來(lái)源:網(wǎng)絡(luò ) 收藏
把七或八只發(fā)光二極管組合在一個(gè)模件上組成了個(gè)8字和小數點(diǎn),用以顯示數字。為了減少管腳,把各個(gè)發(fā)光管的其中同一個(gè)極接在一起作為共用點(diǎn),因此就產(chǎn)生了共陽(yáng)極和共陰極數碼之說(shuō)。共陽(yáng)管就是把各個(gè)發(fā)光管的正極接在一起,而共陰管就剛好相反。見(jiàn)下圖:

本文引用地址:http://dyxdggzs.com/article/201611/319671.htm
大部分的邏輯IC的吸收電流要強于輸出電流。因此,大家都愛(ài)使用共陰極的數碼管,因為可選的IC多些。很可惜,我的這組數碼管是共陽(yáng)的,因此公共端我打算用三級管來(lái)驅動(dòng)。最常用的S9012,首先我得計劃好電路方式,就采用最常用的動(dòng)態(tài)掃描顯示。先搭建最簡(jiǎn)電路,調試出需采用元件的參數。


先不接上圖的R2和74HC244,將數碼管一個(gè)段直接接地。調節R1,測得S9012基極電流為0.21mA時(shí)集電極也就是數碼管上已有40mA,說(shuō)明放大倍數足夠了。這時(shí)接上R2和74HC244,調節R2使數碼管電流控制在15mA,這樣當8個(gè)段一起點(diǎn)亮時(shí)三極管上得通過(guò)120mA的電流。而基極上需要0.63mA,為了減小三極管的負荷應使三極管過(guò)飽和,,調節R1使基極電流為2mA,此時(shí)測得集電極和漏極之間的電壓約0.1V。好!此時(shí)R1為2K。R2為240歐姆。


接下來(lái)就是確定電路。電路的接口與AT89S51間有三組接口:段碼、位碼和電源。為了讓AT89S51獨立出來(lái)這三級接口都采用插針做接口,用排線(xiàn)自由連接到AT89S51的P1-P3口,電源用短路帽連接,完成后的板子見(jiàn)下圖
。





然后就是寫(xiě)程序。先寫(xiě)個(gè)查詢(xún)方式的吧!
//六位管碼管在以0.3秒的間隔在閃爍,這是采用查詢(xún)方式的,比較占CUP資源

# include
typedef unsigned char uchar;
uchar code bit_num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位碼值表:0,1,2,3,4,5
uchar code meg_val[]={0x03,0x9f,0x25,0x0d,0x99,0x49};//段碼值表:0,1,2,3,4,5
uchar code hello[]={0x03,0xe3,0xe3,0x61,0x91,0xff}; //HELLO
uchar code beybey[]={0x89,0x61,0xc1,0x89,0x61,0xc1};//beybey
uchar code ab6789[]={0xc1,0x11,0x09,0x01,0x1f,0x41};//ab6789
void delay(int n);
void main(void)
{
uchar i,m;
P2=0xff; //先將段碼關(guān)閉
P3=0xff; //將位碼關(guān)閉
delay(20);//等待一會(huì )
while(1)
{
for (m=30;m>0;m--) //顯示30次約0.3秒
{
for(i=0;i<=5;i++)
{
P2=0xff;
P3=bit_num[i]; //輸出位碼到P3口
P2=ab6789[i]; //輸出段碼到P2口
delay(5);
}
}
P2=0xff; //關(guān)閉段碼
P3=0xff; //關(guān)閉位碼
delay(1000); //等待0.3秒
}
}
void delay(int n) //子程序
{
int j;
uchar k;
for(j=0;j
{
for(k=255;k>0;k--);
}
}
======================================
當我插把程序寫(xiě)入片子,插上電運行時(shí),是亂碼。你猜怎么回事?
原來(lái)那個(gè)P2口方向是反的,您注意過(guò)沒(méi)有,在A(yíng)T89S51管腳排列上,P0--P1和P3都是上方為PX_0。而唯獨P2口管腳排列是下方為P2_0。方向則好是反的。既然反了,我就把段碼表重寫(xiě)一下。再試,一切正常。
在這里我說(shuō)一下段碼的排列,好多人問(wèn)數碼管段碼是如何排列的,我也在網(wǎng)上查了,好像沒(méi)有什么標準的排法,隨自己的接法而定,這也是導致為什么在網(wǎng)上下載的一些數碼管程序在自己的板子上不能正常顯示的原因。就普遍而言我最上面的那張圖示的標法最多,在上面程序里原打算也是P2_0對應段碼a(也就是上面的橫)。一直到P2_7對應段為h(就是小數點(diǎn))。結果哪知道P2口剛好是反的。這樣一來(lái)也就是倒過(guò)來(lái)了,P2_0對應段h(小數點(diǎn)了)。例如我原先定義的數碼管顯示“2”段碼為10100100B的,一接反了就不再是“2”了。而要想再顯示“2”那就把段碼的高低位倒過(guò)來(lái)。改為00100101B就OK了。

下面再寫(xiě)個(gè)用中斷來(lái)顯示的:
//這是采用中斷方式的,也是帶閃爍的。

# include
typedef unsigned char uchar;
uchar code bit_num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位碼:0,1,2,3,4,5
uchar code meg_val[]={0x49,0x99,0x0d,0x25,0x9f,0x03};//段碼:0,1,2,3,4,5
uchar i,aa; //定義全局變量
bit fg; //定義一個(gè)亮起和熄滅標志
void timer0(void) interrupt 1 using 1 //中斷程序
{
if (fg) //當fg為1時(shí)點(diǎn)亮6位數碼管
{ P2=0xff;
if (i>=6)
{
i=0;
}
else
{
P3=bit_num[i]; //輸出位碼到P3口
P2=meg_val[i]; //輸出段碼到P2口
i++;
}
}
else //當fg為0時(shí)熄滅數碼管
{
if(aa==0)
{
P3=0xff;
P2=0xff;
}
}
aa++;
if (aa>=254) //當aa值累加至254時(shí)fg標志翻轉。
{
fg=~fg;
aa=0;
}
TH0=0xf8; //重裝定時(shí)器初值,2ms,值為65536-2000
TL0=0x30;
}

void main(void)
{
P2=0xff; //先將段碼關(guān)閉
P3=0xff; //將位碼關(guān)閉
TMOD=0x01;//設置T0為模式1
TH0=0xf8; //裝入計數初值高位
TL0=0x30; //裝入計數初值低位
EA=1; //總充許
ET0=1; //T0充許
fg=1; //將亮、滅標志設置為亮
TR0=1; //啟動(dòng)中斷
while(1);
}
OK!



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>