作者共發了8篇帖子。 內容轉換:不轉換▼
 
點擊 回復
1096 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单片机连接共阴数码管的一般方法。不测什么

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:1096 回複數:8
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2015-7-8 14:46
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。