错题记录:单片机4个数码管分秒表 关于定义数组的细节问题
废话不多说先上代码:
查看代码
//定时器0 分,秒的计时计数
void timer0()interrupt 1
{
static unsigned int speed,count=0;
TH0=0XEE;
TL0=0X00;
count++;
if(second>2&&second<58)speed=10;
else speed=200;
if(count==speed){ //秒的操作
second++;
count=0;
if(second==60){ //60秒则进位:分
minute++;
second=0;
}
}
}
//-------我们来分析以下代码:数码管上显示出来--------
void dispTime(char j,k)
{
char m=0;
char Time[]={'j','j','k','k'};
for(m=0;m<4;m++){
P2=Tube[m];
if(m==0||m==2)
P0=SMG[Time[m]/10];
else
P0=SMG[Time[m]%10];
delay(40);
P0=0X00;
}
}
//主函数的while(1)里边放dispTime(minute,second);
表面上看感觉 dispTime();函数没问题。我开始的想法是:主函数里调用该子函数minute,second都对子函数的j,k传参。所以定义的数组char Time[]={'j','j','k','k'};里边的元素就应该是当前的minute和second对应的值。但是其实这样并不是。编译器执行到char Time[]={'j','j','k','k'};只会认为你是在初始化字符数组,并且0-3元素的值分别为:j,j,k,k。并不会认为是我们预想的分秒对应的值。
那么这个情况应该怎样解决呢?我们下面对各元素赋值就好了:
查看代码
//定时器0 分,秒的计时计数
void timer0()interrupt 1
{
static unsigned int speed,count=0;
TH0=0XEE;
TL0=0X00;
count++;
if(second>2&&second<58)speed=10;
else speed=200;
if(count==speed){ //秒的操作
second++;
count=0;
if(second==60){ //60秒则进位:分
minute++;
second=0;
}
}
}
//-------我们来分析以下代码:数码管上显示出来--------
void dispTime(char j,k)
{
char m=0;
char Time[4]={0};
Time[0]=Time[1]=j;
Time[2]=Time[3]=k;
for(m=0;m<4;m++){
P2=Tube[m];
if(m==0||m==2)
P0=SMG[Time[m]/10];
else
P0=SMG[Time[m]%10];
delay(40);
P0=0X00;
}
}
//主函数的while(1)里边放dispTime(minute,second);
作者QQ4577105