众所周知,如果把所有你写的所有函数都放在一个文件中,
若你的代码不长还好,若一长就会显得很杂乱,所以有必要
把特定的函数放在特定的文件中。所以在这个过程中就会
涉及到外部文件的调用。
首先来说说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文件就可以调用了如下图: 这样的话就可以使你的程序显得不那么乱了。 总体如下图: 若有错误,还请指正。😊😊😊