74hc573驱动数码管显示的问题,求教高手,
我用74hc573驱动5个数码管显示,voidAD_date(ulongADdate){uchari;buf_nb[0]=(ADdate/10000)%10;buf_nb...
我用74hc573驱动5个数码管显示,
void AD_date(ulong ADdate)
{
uchar i;
buf_nb[0]=(ADdate/10000)%10;
buf_nb[1]=(ADdate/1000)%10;
buf_nb[2]=(ADdate/100)%10;
buf_nb[3]=(ADdate/10)%10;
buf_nb[4]=ADdate%10;
//buf_nb[3]=buf_nb[3]+24;
if(buf_nb[0]==0)
{
buf_nb[0]=23;
if(buf_nb[1]==0)
{
buf_nb[1]=23;
if(buf_nb[2]==0)
{
buf_nb[2]=23;
if(buf_nb[3]==0)
buf_nb[3]=23;
}
}
}
if((fuhao==1)&&(ADdate!=0))
{
if(buf_nb[3]==23)
buf_nb[3]=22;
else if(buf_nb[2]==23)
buf_nb[2]=22;
else if(buf_nb[1]==23)
buf_nb[1]=22;
else if(buf_nb[0]==23)
buf_nb[0]=22;
}
for(i=0;i<5;i++)
disbuf[i]=buf_nb[i];
}
void display()
{
uchar x;
for(x=0;x<5;x++)
{
dula=1;
coner=disbuf[x];
coner=table[coner];
P0=coner;
dula=0;
P0=0x00;
wela=1;
P0=tablewe[x];
wela=0;
P0=0xff;
delay(1);
}
}
void main()
{
//fuhao=1;
init();
while(1)
{
AD_date(ADdate);
display();
}
}
void timer0() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65536-50000)%256;
temp++;
if(temp==20)
{
temp=0;
ADdate++;
}
}
功能都正常,就是显示的时候有影子,比如显示10,百位上就有个很暗的和十位上的数一样的数在动,我加了消影了,还是这样,这是怎么回事呢,烦请那位高手指点指点!
还有那位有我这种接法的573的静态扫描的帮我发一个在这里谢谢了,能用的话还会加分!!!!375223692@qq.com 展开
void AD_date(ulong ADdate)
{
uchar i;
buf_nb[0]=(ADdate/10000)%10;
buf_nb[1]=(ADdate/1000)%10;
buf_nb[2]=(ADdate/100)%10;
buf_nb[3]=(ADdate/10)%10;
buf_nb[4]=ADdate%10;
//buf_nb[3]=buf_nb[3]+24;
if(buf_nb[0]==0)
{
buf_nb[0]=23;
if(buf_nb[1]==0)
{
buf_nb[1]=23;
if(buf_nb[2]==0)
{
buf_nb[2]=23;
if(buf_nb[3]==0)
buf_nb[3]=23;
}
}
}
if((fuhao==1)&&(ADdate!=0))
{
if(buf_nb[3]==23)
buf_nb[3]=22;
else if(buf_nb[2]==23)
buf_nb[2]=22;
else if(buf_nb[1]==23)
buf_nb[1]=22;
else if(buf_nb[0]==23)
buf_nb[0]=22;
}
for(i=0;i<5;i++)
disbuf[i]=buf_nb[i];
}
void display()
{
uchar x;
for(x=0;x<5;x++)
{
dula=1;
coner=disbuf[x];
coner=table[coner];
P0=coner;
dula=0;
P0=0x00;
wela=1;
P0=tablewe[x];
wela=0;
P0=0xff;
delay(1);
}
}
void main()
{
//fuhao=1;
init();
while(1)
{
AD_date(ADdate);
display();
}
}
void timer0() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65536-50000)%256;
temp++;
if(temp==20)
{
temp=0;
ADdate++;
}
}
功能都正常,就是显示的时候有影子,比如显示10,百位上就有个很暗的和十位上的数一样的数在动,我加了消影了,还是这样,这是怎么回事呢,烦请那位高手指点指点!
还有那位有我这种接法的573的静态扫描的帮我发一个在这里谢谢了,能用的话还会加分!!!!375223692@qq.com 展开
2个回答
展开全部
试试看:
void display()
{
uchar x;
for(x = 0; x < 5; x++) {
wela=1;
P0 = 0; //关闭所有的位,才能消隐.
// P0 = 255; //0、255,根据你的电路,只能选用其中一种.
wela=0;
dula = 1;
P0 = table[disbuf[x]];
dula = 0;
wela=1;
P0 = tablewe[x];
wela=0;
delay(1);
}
}
void display()
{
uchar x;
for(x = 0; x < 5; x++) {
wela=1;
P0 = 0; //关闭所有的位,才能消隐.
// P0 = 255; //0、255,根据你的电路,只能选用其中一种.
wela=0;
dula = 1;
P0 = table[disbuf[x]];
dula = 0;
wela=1;
P0 = tablewe[x];
wela=0;
delay(1);
}
}
更多追问追答
追问
谢谢你的指导,我根据你说的改了一下,影子是没了,正常了可是现实的亮度不一样了,最低位很亮,其余几位亮度都是一样的,为什么会这样呢? 修改过的程序
void display()
{
uchar x;
for(x=0;x<5;x++)
{
wela=1;
P0=0;
wela=0;
dula=1;
coner=disbuf[x];
coner=table[coner];
P0=coner;
dula=0;
P0=0x00;
wela=1;
P0=tablewe[x];
wela=0;
//P0=0xff;
delay(1);
}
}
追答
这回差不多了:
for(x=0;x<5;x++)
{
coner=disbuf[x];
coner=table[coner];
dula=1;
P0=coner;
dula=0;
wela=1;
P0=tablewe[x];
wela=0;
delay(1);
wela=1;
P0=0;
wela=0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询