犯了一個基本錯誤。每一行的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;} //退出循環
}
}
}
}
|