错题记录:单片机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);




 

posted @ 2022-11-15 17:06  iZJ"Qq4577105  阅读(33)  评论(0编辑  收藏  举报