制作單片機驅動數碼管電路
把七或八只發光二極管組合在一個模件上組成了個8字和小數點,用以顯示數字。為了減少管腳,把各個發光管的其中同一個極接在一起作為共用點,因此就產生了共陽極和共陰極數碼之說。共陽管就是把各個發光管的正極接在一起,而共陰管就剛好相反。見下圖:
大部分的邏輯IC的吸收電流要強于輸出電流。因此,大家都愛使用共陰極的數碼管,因為可選的IC多些。很可惜,我的這組數碼管是共陽的,因此公共端我打算用三級管來驅動。最常用的S9012,首先我得計劃好電路方式,就采用最常用的動態掃描顯示。先搭建最簡電路,調試出需采用元件的參數。
先不接上圖的R2和74HC244,將數碼管一個段直接接地。調節R1,測得S9012基極電流為0.21mA時集電極也就是數碼管上已有40mA,說明放大倍數足夠了。這時接上R2和74HC244,調節R2使數碼管電流控制在15mA,這樣當8個段一起點亮時三極管上得通過120mA的電流。而基極上需要0.63mA,為了減小三極管的負荷應使三極管過飽和,,調節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; ///設置鍵
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}; //數碼管段碼
void delay(u16 q) //普通延時函數
{
char d;
while(q--)
for(d=123;d》0;d--);
}
void ZD_Init() //中斷初始化子函數
{
EA=1; //打開總中斷開關
ET0=1; //打開定是器0開關
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) //顯示函數
{
if(b1==2) //判斷各十位數閃爍標志位
{
if(dd)
{
ss=10;
}
}
if(b1==1) //判斷各位數閃爍標志位
{
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) ///設置建
{
delay(5);
if(s3==0)
{
while(s3==0)xianshi(ss1,ss2); //松手檢測
b1++;
TR0=1;
if(b1》=3)
{
b1=0;
TR0=0;
}
}
}
if(b1!=0) ///判斷是否按下設置健
{
if(s2==0) ///加建
{
delay(5);
if(s2==0)
{
while(s2==0)xianshi(ss1,ss2); //松手檢測
if(b1==1) ////判斷各位數加
{
ss2++;
if(ss2==10)ss2=0;
}
if(b1==2) ///判斷十位數加
{
ss1++;
if(ss1==10)ss1=0;
}
}
}
if(s1==0) //減鍵
{
delay(5);
if(s1==0)
{
while(s1==0)xianshi(ss1,ss2); ///松手檢測
if(b1==1) ///判斷各位數減
{
ss2--;
if(ss2==255)ss2=9;
}
if(b1==2) ////判斷十位數減
{
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); //顯示子函數
jianpan(); //鍵盤子程序
}
}
void Time0() interrupt 1 using 0 //中斷函數
{
TH0=(65536-30000)/256; //定時器高8位裝初值 重裝初值
TL0=(65536-30000)%256; //定時器低8位裝初值 重裝初值
if(b1!=0)
{
i++;
if(i==10) //數碼管的閃爍
{
i=0;
dd=~dd;
}
out=1;
}
else
{
js--;
if(js==0) //點焊延時輸出
{
TR0=0;
out=1;
}
}
}
-
單片機
+關注
關注
6067文章
44952瀏覽量
648632 -
數碼管
+關注
關注
32文章
1889瀏覽量
92372
發布評論請先 登錄
單片機Debug工具性能對比 單片機調試常用命令
單片機怎么寫入程序
單片機的中斷機制
32位單片機的電路設計技巧分享!
單片機燒錄程序的基本步驟是什么
單片機引腳懸空是什么電平
單片機為什么被認為是一門簡單的技術?

評論