設置 | 登錄 | 註冊

作者共發了8篇帖子。

【電路+程序】C51單片機接共陰數碼管

1樓 巨大八爪鱼 2013-8-10 18:52

電路圖和要點:

 

2樓 巨大八爪鱼 2013-8-10 18:53
//程序:
//晶振:11.0592MHz
#include
<AT89X52.h> unsigned char code
seg8[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsigned
int number=1970;
unsigned int interval=0;
unsigned char point=0;
//小數點的位置(從左數) sbit LED1=P2^7;
sbit LED2=P2^6;
sbit LED3=P2^5;
sbit
LED4=P2^4; //延遲n毫秒
void delay(unsigned int n)
{
while
(n--)
{
TH2=0xfc;
TL2=0x66; //11.0592MHz
//TL2=0x18;
//12MHz
TF2=0;
TR2=1;
while (TF2==0);
TF2=0;
}
} void
display_seg8()
{
bit display_zero=0; //是否是最高位的0
LED1=1;
if (point!=1
&& display_zero==0 &&
number/1000==0)
P0=0x00;
else
{
P0=~seg8[number/1000]+(point==1)*0x80;
display_zero=1;
}
delay(3);
P0=0x00;
LED1=0;
LED2=1;
if (point!=2 && display_zero==0 &&
number%1000/100==0)
P0=0x00;
else
{
P0=~seg8[number%1000/100]+(point==2)*0x80;
display_zero=1;
}
delay(3);
P0=0x00;
LED2=0;
LED3=1;
if (point!=3 && display_zero==0 &&
number%100/10==0)
P0=0x00;
else
{
P0=~seg8[number%100/10]+(point==3)*0x80;
display_zero=1;
}
delay(3);
P0=0x00;
LED3=0;
LED4=1;
P0=~seg8[number%10]+(point==4)*0x80;
//末尾的0始終顯示
delay(3);
P0=0x00;
LED4=0;
} void main()
{
EA=1;
//開總中斷
TMOD=0x02; //定時器0為8位自動重裝工作方式
//TL0=TH0=0x06;
//定時0.25ms
TL0=TH0=0x19; //11.0592MHz晶振下定時0.25ms
ET0=1; //開定時器中斷
TR0=1;
//開定時器 T2MOD=0x01; //定時器2工作於16位查詢工作方式
TR2=0; P2=0x00;
while
(1)
display_seg8();
} void et0() interrupt
1
{
//4次為1ms,4000次為1s
interval++;
if
(interval>=4000)
{
interval=0;
number++;
if
(number>9999)
number=0;
}
}
3樓 巨大八爪鱼 2013-8-10 18:53




4樓 巨大八爪鱼 2013-8-10 18:56

這是我焊的C51單片機最小系統:


5樓 巨大八爪鱼 2013-8-10 19:02

在程序中,單片機的位選、段選都是高電平點亮,所以都兩邊得加上拉電阻。

段選端上拉電阻只需要200歐姆的排阻就可以了。

但位選上拉電阻接的太小的話會使三極管始終導通,單片機無法熄滅數碼管,使動態掃描出錯。所以應該接5KΩ左右的電阻,本人選擇了5KΩ。

6樓 巨大八爪鱼 2013-8-11 15:24

我看了我買的RZ-51開發板,每個I/O口(也就是從P0到P3)都接了A103J的上拉電阻(大小為10x10^3Ω也就是10kΩ的排阻)

 

所以還有一個更簡單的方法解決共陰數碼管很暗的問題:從P0到P3全部接上10kΩ的上拉電阻。

這樣上面的電路圖中就可以不接任何電阻了。直接I/O口接NPN三極管基極,發射極接地,集電極接位選,段選直接連P0。然後所有的I/O口接103排阻。

7樓 巨大八爪鱼 2013-8-11 15:34

所以,以後接共陰數碼管,只需要先在所有I/O口上接上103上拉電阻,然後按下面的電路連接數碼管。

當然如果你願意,只在操作數碼管的I/O口上接上拉電阻也行。

注意103的上拉電阻不能用221(即220歐)的電阻替代,上拉電阻接小了會導致單片機無法輸出低電平,I/O口始終為高電平。我昨天就吃了這個虧。最後在P0上接了221的排阻,P2上接了5K+200的電阻,才算解決問題。實際上P0口最好也接5K或10K的電阻。

9樓 巨大八爪鱼 2015-7-8 14:46

回復:8樓

這個只是51單片機連接共陰數碼管的一般方法。不測什麼

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。