聊聊keil的外部文件引用

众所周知,如果把所有你写的所有函数都放在一个文件中,

若你的代码不长还好,若一长就会显得很杂乱,所以有必要

把特定的函数放在特定的文件中。所以在这个过程中就会

涉及到外部文件的调用。

首先来说说keil中.c和.h这两者的作用,.c文件更多的是需要你

写函数的功能的,.h文件更多的是用来放外部申明的。举个例子

如果我需要把以下函数放在LCD.c这个文件中,首先我需要

创建一个LCD.c

void LCD_SetCursor(unsigned char Line,unsigned char Column)

{

if(Line==1)

{

LCD_WriteCommand(0x80|(Column-1));

}

else if(Line==2)

{

LCD_WriteCommand(0x80|(Column-1+0x40));

}

}

void LCD_Init()

{

LCD_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵

LCD_WriteCommand(0x0c);//显示开,光标关,闪烁关

LCD_WriteCommand(0x06);//数据读写操作后,光标自动加一,画面不动

LCD_WriteCommand(0x01);//光标复位,清屏

}

void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char)

{

LCD_SetCursor(Line,Column);

LCD_WriteData(Char);

}

void LCD_ShowString(unsigned char Line,unsigned char Column,char *String)

{

unsigned char i;

LCD_SetCursor(Line,Column);

for(i=0;String[i]!='\0';i++)

{

LCD_WriteData(String[i]);

}

}

int LCD_Pow(int X,int Y)

{

unsigned char i;

int Result=1;

for(i=0;i

{

Result*=X;

}

return Result;

}

void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)

{

unsigned char i;

LCD_SetCursor(Line,Column);

for(i=Length;i>0;i--)

{

LCD_WriteData(Number/LCD_Pow(10,i-1)%10+'0');

}

}

void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)

{

unsigned char i;

unsigned int Number1;

LCD_SetCursor(Line,Column);

if(Number>=0)

{

LCD_WriteData('+');

Number1=Number;

}

else

{

LCD_WriteData('-');

Number1=-Number;

}

for(i=Length;i>0;i--)

{

LCD_WriteData(Number1/LCD_Pow(10,i-1)%10+'0');

}

}

接着如果我还想再main.c文件中调用LCD.c中的某个函数,那我就还需要再创建一个LCD.h文件,那么再在这个LCD.h文件中写入你main.c文件中需要调用的那个函数的声明如下:

#ifndef __LCD1602_H__

#define __LCD1602_H__

//用户调用函数:

void LCD_Init();

void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char);

void LCD_ShowString(unsigned char Line,unsigned char Column,char *String);

void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);

void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

void LCD_WriteCommand(unsigned char Command);

#endif

第一,二行和最后一行是标准格式必须要有的。

这是函数,若是我想调用变量呢?

如上图,注意sbit定义的不需要加extern,而普通变量则需要加extern,这样只需在你想要调用这些变量的文件中加上它的.h文件就可以调用了如下图:

这样的话就可以使你的程序显得不那么乱了。

总体如下图:

若有错误,还请指正。😊😊😊