单片机数码管动态显示6个数码管显示012345问题

想实现数码管动态显示6个数码管显示012345,现在的代码for循环不起作用,只能第一个数码管显示0。求大神帮忙啊
//数码管动态显示6个数码管显示012345
#include <reg52.h> //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; // 申明U1锁存器的锁存端
sbit wela=P2^7; // 申明U2锁存器的锁存端
uchar code table[]={ //共阴极数码管编码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //位选数据,6位数码管的位选数据
uint i;
void delay(uint x) //延时x毫秒
{
uint a,b;
for(a=x;a>0;i--)
for(b=110;b>0;b--);
}
void main()
{
while(1)
{
for(i=0;i<6;i++)
{
dula=1;
P0=table[i]; //送段选数据
dula=0;
P0=0xff; //关闭显示
wela=1;
P0=wei[i]; //送位选数据
wela=0;
delay(500); //延时
}
}
}

#include <reg52.h> //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; // 申明U1锁存器的锁存端
sbit wela=P2^7; // 申明U2锁存器的锁存端
uchar code table[]={ //共阴极数码管编码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //位选数据,6位数码管的位选数据
uint i=0;
void delay(uint x) //延时x毫秒
{
uint a,b;
for(a=x;a>0;i--)
for(b=110;b>0;b--);
}
void main()
{
while(1)
{
dula=1;
P0=table[i]; //送段选数据
dula=0;
P0=0xff; //关闭显示
wela=1;
P0=wei[i]; //送位选数据
wela=0;
delay(500); //延时
i++;
if(i==7)i=0;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-09
楼下 NJGQZF 的答案,最后if括号里条件应该为 i==6,如果i==7,则显示6时,六个数码管同时显示6。我刚刚测试的!
第2个回答  2015-06-06
有原理图吗追问

相似回答