用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

单片机c语言程序中,数组最多能有几个元素?为什么我定定义了一个全局的...
原则上,C语言中数组所包含的元素个数理论上多少都行,如果要开一个很大的数组,比如int arrayint[10000][10000];在main()中声明该数组就会使应用程序退出,但是如果你把该数组的声明放在所有函数体之外,让它变成一个全局变量,就没有任何限制了,你想开多大的数组都可以。但在单片机c语言程序中,实...

单片机技术中所说的“全局变量”和“循环控制变量”什么意思?
全局变量就是在整个程序中都可以使用的变量,需要在全局声明区定义。而循环控制变量其实就是控制循环的变量,一般不使用全局变量但不是不能用全局变量,循环控制变量一般用一个字母比如i来表示。

单片机C语言中的全局变量可以被修改吗
定义了全局变量就表示在这个函数a都为10.如果在主函数里或是其他自定义函数把a的值改变,则a变为了局部变量,则主函数里或是其他自定义函数中的a会覆盖掉全局变量中的a,也就是说在主函数里或是其他自定义函数中的a只是临时变量,当函数运行完,这个函数中的a寿命就终止了。当退出了这个函数后,a...

c语言,如何定义数组为全局变量?
在C语言中,全局变量和函数声明及定义并列,也就是说,声明在最外层作用域的变量即为全局变 如在如下程序中 int i;int main(){int i_copy = i;i = 9;return 0;} int i就是一个全局变量,故在main函数中可以调用或修改i的值 所以,定义数组也和普通全局变量的方法相同,如 char str[10];...

为什么在写单片机程序的时候,主函数声明的变量无效?
变量定义放错位置了,c语言要求变量的定义在赋值或有实际意义的语句之前,你放在调用setting()函数之后肯定是错的。C++才支持随意为之定义。

单片机c语言编程定义和声明问题
定义和声明的语句不影响程序的运行 单片机上电就找main执行 而定义和声明的语句是给编译软件用的

...时数码管显示数字字母的代码定义必须在main函数外吗?要是在main函数...
最好定义在外部,这样声明为全局变量,随时可以调用。而且编辑器是首先编辑全局变量的,如果说是局部变量则是最后编译,如果你一个main函数写那么多代码,看起来乱,而且不实用,到时候代码移植的时候很困难,就比如液晶的驱动函数,你定义好形参往里面传数据,到时候再用到液晶,不是很方便么?

单片机C语言为什么必须要在最前面定义变量?
不是说一定要最前面定义,(函数外)最前面定义的是全局变量(全局变量少用,单片机内存小)。变量定义只要在你第一次使用之前就可以了。至于在函数里为什么都定义在最前面的话,那是因为增加了程序的可读性,方便修改。

c语言如何将数组作为全局变量
在c语言中,全局变量和函数声明及定义并列,也就是说,声明在最外层作用域的变量即为全局变 如在如下程序中 int i;int main(){ int i_copy = i;i = 9;return 0;} int i就是一个全局变量,故在main函数中可以调用或修改i的值 所以,定义数组也和普通全局变量的方法相同,如 char str[10]...

C语言变量的定义与使用
多个函数组成一个程序的功能模块,并安置在某一个C文件中,在这些函数的头部定义的变量是静态变量(局部变量),这种类型的变量模块内部的函数都可以访问。如果在模块内部声明变量,并在该模块的头文件中导出,该类型变量就是全局变量,全局变量在整个工程中的所有函数都可以访问;第三、变量占用的RAM资源,...

相似回答