用C语言给单片机编程时,主函数中的变量为什么都得定义成全局变量

如题所述

变量是定义成全局变量还是局部变量得看变量的在程序中所起的作用,比如如下程序:
#include <REGX52.h>
unsigned int int_count=0;
unsigned char count=0;
unsigned char second=0;
unsigned char seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};
unsigned char seg1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98};
Delay_1s() //500m秒延时子程序
{unsigned char l,i,n;
for(l=50;l>0;l--)
for(i=20;i>0;i--)
for(n=248;n>0;n--);
}

void t0(void) interrupt 1 using 0
{int_count++;
if(int_count==4000)
{ int_count=0;
second=1;
}
}
void main (void)
{TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(second)
{
second=0;
P0=seg1[count];
count++;
if(count>=10)
count=0;
}
}
}
定时器输出0到9,每一秒变化一次,其中int_count、second是全局变量这是因为,int_count是中断次数统计,他需要在完成一次次的中断以后数值保持不变,如果定义成局部变量,没发生一次中断,它加一,中断结束又变成0了,所以定义成全局变量,这样他的数值会根据中断发生的次数不断增加。而second则因为是数码管显示的数组的下标,如果定义成局部变量那么每次函数调用结束,内存释放变量值也就没有了,这样就达不到每秒输出不同数字的要求。、
总的来讲呢,如果变量的值在函数调用结束以后还会被其他的函数,活着表达式使用,才定义成全局变量。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-20
汗,你要是写子函数也要定义成全局变量的话,换编译程序吧!!!
第2个回答  2009-04-20
^_^,那是因为主函数就像你家的床,你每天都需要,你不能说昨晚睡了,我今天就把它当柴火烧了,而你的雨伞就不一样了,不下雨的时候你可以做拐杖,下雨的时候可以做雨具

^_^,,还是不够形象

主程序是一个无限循环,它的变量是一直要用到的

而子程序的有些变量,是现在用一下,以后再用的话,会先初始化一下,在没有用的时候,改变了也没有关系
第3个回答  2009-04-20
汗,是可以定义为局部变量的

要在{ 后的第一条指令就定义

PS:多研究研究C