用52单片机控制8位数码管,可相邻的两个数码管出现同样的数,有一个很亮,另一个在光线暗的地方就看得见?

如题所述

第1个回答  2012-04-06
用单片机控制数码管如果不是外界扩张的话是用延时的方法来实现,先让第一个亮,延时一会然后让另一个亮,再延时下。另一个不亮是因为延时过短,时间长点,会亮写。
第2个回答  2012-04-05
用动态显示的原因,主要还是延时设置的问题 ,在这说单片机直接驱动数码管的工作电流很小,建议使用外围扩展电路,像74LS164等。追问

我的显示程序:void display_time()
{
Display_Buffer[0]= DSY_CODE[Current_Time[2]/10];
Display_Buffer[1]= DSY_CODE[Current_Time[2]%10];
for(i=0;i<8;i++)
{
P2=Bit_Code[i];
P0=Display_Buffer[i];
DelayMS(1);
}
}
这里怎么加延时?我用了排阻,亮度还可以

追答

比较笨的办法可以用三极管驱动一下的

第3个回答  2012-04-06
/*时钟显示0~24*/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
uchar code table[]=
{

0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
};
uint a,num,num1=59,num2=23;
void delay(uint z);
void display();
void keyscan();

void main()
{

TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
while(1)
{

display();

}
}
void display()
{

P0=table[num%10];
P2=7;
delay(10);

P0=table[num/10];
P2=6;
delay(10);

P0=table[num1%10];
P2=4;
delay(10);

P0=table[num1/10];
P2=3;
delay(10);

P0=table[num2%10];
P2=1;
delay(10);

P0=table[num2/10];
P2=0;
delay(10);

P0=0x40;
P2=2;
delay(10);

P0=0x40;
P2=5;
delay(10);
}
void dingshi() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
a++;
if(a==20)
{
a=0;
num++;
}
if(num==60)
{
num=0;
num1++;
}

if(num1==60)

{
num1=0;
num2++;
}

if(num2==24)
{
num2=0;

}

}

void delay(uint z)
{
uint x,y;
for(x=z;z>0;z--)
for(y=10;y>0;y--);
} 把延时加长点试试,共同学习哦,。本回答被网友采纳
相似回答