51单片机数码管动态显示
时间:10-02
整理:3721RD
点击:
数码管显示999-0;个位为什么闪烁?如何改善?现附程序如下,请大神指点!
sbit shi=P1^2;
sbit bai=P1^1;
unsigned int a,b,c, j;
#define uint unsigned int
void delay(uint x)
{
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
main()
{ while(1)
{
for(c=999;c>0;c--)
{
bai=0;
P0=shizhong[c/100] ;
delay(8);
P0=0xff;
bai=1;
shi=0;
P0=shizhong[c%100/10] ;
delay(8);
P0=0xff;
shi=1;
ge=0;
P0=shizhong[c%10];
delay(24);
P0=0xff;
ge=1;
}
}
}
你有什么好的写法?
sbit shi=P1^2;
sbit bai=P1^1;
unsigned int a,b,c, j;
#define uint unsigned int
void delay(uint x)
{
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
main()
{ while(1)
{
for(c=999;c>0;c--)
{
bai=0;
P0=shizhong[c/100] ;
delay(8);
P0=0xff;
bai=1;
shi=0;
P0=shizhong[c%100/10] ;
delay(8);
P0=0xff;
shi=1;
ge=0;
P0=shizhong[c%10];
delay(24);
P0=0xff;
ge=1;
}
}
}
你这样比较乱,扫面数码管数字最好搞一个函数来识别比较好,还有,小编的的写法感觉也存在比较大的问题
在ge=1后面加个小延时试试 虽然 不怎么看的懂整个程序。
这是原理图!我也感觉我的写法有问题。
你有什么好的写法?
你这样写真的很乱!
从你的图片看,你的没有位存端,所以你对每一个数码管的操作必须首先打开相应的位码,建议用带锁存器的,那样操作起来会相对简单一点,还有,从你的程序看,你想扫描999,必须用到三个数码管,所以你开头必须定义三个位锁存端而你只定义了两个