犯了一个基本错误。每一行的table没有赋值给P0端,只是写出来而已;另外if语句中应该是等于2时为真,还有最后一个if语句内容也稍作修改,才能加满后循环,感谢大家的帮助;下面把代码附上,亲测可用;
#include<reg52.h>
sbit A=P2^2; //定义控制数码管管脚
sbit C=P2^3;
sbit D=P2^4;
typedef unsigned char u16;
typedef unsigned int u8;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
0x79,0x71,0x00};
void delay(u16 z) //延时函数
{
u16 x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void main() //数码管显示二进制累加函数
{
u16 k,j,i,g;
u16 h,f,m,a,l; //定义变量
j=0;i=0;g=0;h=0;f=0;m=0;l=0;
while(1) //大循环
{ for(k=0;k<3;k++) //控制1数码管显示
{
for(a=50;a>0;a--) //使数码管显示时间足够人眼识别
{
A=0;C=0;D=0;P0=table[k];delay(3); //1数码管显示0或1
if(k==2){j++;k=0;} //当1数码管显示1后,使二数码管显示1;
A=1;C=0;D=0;P0=table[j];delay(3); //控制2数码管显示0或1;
if(j==2){i++;j=0;} //以下相同;
A=0;C=1;D=0;P0=table[i];delay(3);
if(i==2){g++;i=0;}
A=1;C=1;D=0;P0=table[g];delay(3);
if(g==2){h++;g=0;}
A=0;C=0;D=1;P0=table[h];delay(3);
if(h==2){f++;h=0;}
A=1;C=0;D=1;P0=table[f];delay(3);
if(f==2){m++;f=0;}
A=0;C=1;D=1;P0=table[m];delay(3);
if(m==2){l++;m=0;}
A=1;C=1;D=1;P0=table[l];delay(3);
if(l==2){k=3;l=0;} //退出循环
}
}
}
}
|