在初次接触51单片机代码编写时,我们大多数人一般都会选择将所调用子函数的声明统一放在主函数之前,亦或干脆将子函数的编写工作放在主函数之前,以保证程序的正常运行。但以上两种函数定义或声明方式并不能满足我们编写程序时所有情形的要求,如:子函数相互调用时,即使子函数在主函数前进行定义,对子函数的相对位置仍有要求。如下
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1=P1^0;
sbit key1=P3^4; //定义按键按下小灯泡发亮
void LED()
{
key(); //小灯函数调用键盘函数
}
void key() //键盘函数控制led1的亮和灭
{
if(key1==0)
{
delaytool(5);
if(key1==0) //键盘防抖动操作
{
led1=0;
}
else
{
led1=1;
}
while(!key1); //等待按键松手检测
}
}
void main()
{
void delaytool(uint z); //声明延时子函数
LED(); //调用子函数
}
void delaytool(uint z) //延时函数,此处z=1,延时时间大约是1ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
如上图所示,将LED函数称为子函数a,key函数成为子函数b,两个子函数均在主函数之前定义,且子函数a调用子函数b,主函数调用子函数a