制作單片機驅(qū)動數(shù)碼管電路
把七或八只發(fā)光二極管組合在一個模件上組成了個8字和小數(shù)點,用以顯示數(shù)字。為了減少管腳,把各個發(fā)光管的其中同一個極接在一起作為共用點,因此就產(chǎn)生了共陽極和共陰極數(shù)碼之說。共陽管就是把各個發(fā)光管的正極接在一起,而共陰管就剛好相反。見下圖:
大部分的邏輯IC的吸收電流要強于輸出電流。因此,大家都愛使用共陰極的數(shù)碼管,因為可選的IC多些。很可惜,我的這組數(shù)碼管是共陽的,因此公共端我打算用三級管來驅(qū)動。最常用的S9012,首先我得計劃好電路方式,就采用最常用的動態(tài)掃描顯示。先搭建最簡電路,調(diào)試出需采用元件的參數(shù)。
先不接上圖的R2和74HC244,將數(shù)碼管一個段直接接地。調(diào)節(jié)R1,測得S9012基極電流為0.21mA時集電極也就是數(shù)碼管上已有40mA,說明放大倍數(shù)足夠了。這時接上R2和74HC244,調(diào)節(jié)R2使數(shù)碼管電流控制在15mA,這樣當8個段一起點亮?xí)r三極管上得通過120mA的電流。而基極上需要0.63mA,為了減小三極管的負荷應(yīng)使三極管過飽和,,調(diào)節(jié)R1使基極電流為2mA,此時測得集電極和漏極之間的電壓約0.1V。好!此時R1為2K。R2為240歐姆。
接下來就是確定電路。電路的接口與AT89S51間有三組接口:段碼、位碼和電源。為了讓AT89S51獨立出來這三級接口都采用插針做接口,用排線自由連接到AT89S51的P1-P3口,電源用短路帽連接,完成后的板子見下圖:
單片機制作的點焊機電路與程序

#include《reg51.h》
#define u8 unsigned char
#define u16 unsigned int
u8 b1,ss1,ss2,i,js;
bit dd;
sbit out=P3^5; ///輸出控制口
sbit s0=P3^0; ///啟動鍵
sbit s1=P3^1; ///設(shè)置鍵
sbit s2=P3^2; ///減
sbit s3=P3^3; ///加
sbit ge=P3^7;
sbit shi=P3^4;
char code shu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //數(shù)碼管段碼
void delay(u16 q) //普通延時函數(shù)
{
char d;
while(q--)
for(d=123;d》0;d--);
}
void ZD_Init() //中斷初始化子函數(shù)
{
EA=1; //打開總中斷開關(guān)
ET0=1; //打開定是器0開關(guān)
TR0=0; //定時器0開始工作
TMOD=0X01; //選擇定時器0工作模式1 16位定時器
TH0=(65536-30000)/256; //定時器高8位裝初值 定時50MS
TL0=(65536-30000)%256; //定時器低8位裝初值
}
void xianshi(u8 ss,u8 gg) //顯示函數(shù)
{
if(b1==2) //判斷各十位數(shù)閃爍標志位
{
if(dd)
{
ss=10;
}
}
if(b1==1) //判斷各位數(shù)閃爍標志位
{
if(dd)
{
gg=10;
}
}
P1=shu[ss]+0x80;
shi=0;
delay(2);
shi=1;
P1=shu[gg];
ge=0;
delay(2);
ge=1;
}
void jianpan() //鍵盤掃描子程序
{
if(s3==0) ///設(shè)置建
{
delay(5);
if(s3==0)
{
while(s3==0)xianshi(ss1,ss2); //松手檢測
b1++;
TR0=1;
if(b1》=3)
{
b1=0;
TR0=0;
}
}
}
if(b1!=0) ///判斷是否按下設(shè)置健
{
if(s2==0) ///加建
{
delay(5);
if(s2==0)
{
while(s2==0)xianshi(ss1,ss2); //松手檢測
if(b1==1) ////判斷各位數(shù)加
{
ss2++;
if(ss2==10)ss2=0;
}
if(b1==2) ///判斷十位數(shù)加
{
ss1++;
if(ss1==10)ss1=0;
}
}
}
if(s1==0) //減鍵
{
delay(5);
if(s1==0)
{
while(s1==0)xianshi(ss1,ss2); ///松手檢測
if(b1==1) ///判斷各位數(shù)減
{
ss2--;
if(ss2==255)ss2=9;
}
if(b1==2) ////判斷十位數(shù)減
{
ss1--;
if(ss1==255)ss1=9;
}
}
}
}
if(b1==0) ///啟動電焊鍵
{
if(s0==0)
{
delay(5);
if(s0==0)
{
while(s0==0);
js=ss1*10+ss2;
if(js!=0)
{
TR0=1;
out=0;
}
}
}
}
}
void main()
{
ZD_Init(); //中斷初始化
while(1)
{
xianshi(ss1,ss2); //顯示子函數(shù)
jianpan(); //鍵盤子程序
}
}
void Time0() interrupt 1 using 0 //中斷函數(shù)
{
TH0=(65536-30000)/256; //定時器高8位裝初值 重裝初值
TL0=(65536-30000)%256; //定時器低8位裝初值 重裝初值
if(b1!=0)
{
i++;
if(i==10) //數(shù)碼管的閃爍
{
i=0;
dd=~dd;
}
out=1;
}
else
{
js--;
if(js==0) //點焊延時輸出
{
TR0=0;
out=1;
}
}
}
-
單片機
+關(guān)注
關(guān)注
6063文章
44915瀏覽量
646748 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1889瀏覽量
92207
發(fā)布評論請先 登錄
STM32單片機最小系統(tǒng)電路設(shè)計

單片機怎么寫入程序
32位單片機的電路設(shè)計技巧分享!
單片機為什么被認為是一門簡單的技術(shù)?

評論