我举个例子,我经常用的结构。
新建4个文件:main.c、def.h、IIC.c、ICC.h。其中,main.c和ICC.c要加入Keil工程中,头文件可以不加。
(1)main.c文件中:
#include <reg52.h> //特殊功能寄存器定义
#include "def.h" //主函数用到的常量、变量的定义,这样写看起来美观。
#include "IIC.h" //ICC.c的函数声明
void main(void)
{
uchar a,b;
system_init(); //初始化等
//----------------
while(1) //主循环
{
system_task(); //任务
//-----------------------
write_cmd(0x11);
a= read_date(); //我把sum弄成公有变量,想说明extren的应用,注意它的定义。
b = sum;
//--------------------
}
}
(2)def.h中:
#ifndef _XX_H_
#define _XX_H_
#define uchar unsigned char
bit flag_ram;
sbit P11 = P1^1;
uchar date_up;
//----------------------等等
extren uchar sum = 0;
//这里可以赋初值,在IIC.c中的定义不能再赋值了,extren大家可以网上查,也可以根据例子来理解。
#endif
(3)IIC.c中:
#include <reg52.h>
#include "IIC.h" ;为了避免错误,不被其他.c文件中调用的函数不写里面。
#define uchar unsigned char
bit flag_down;
sbit scl = P2^7;
uchar dee;
//等等私有变量
extren uchar sum; //再赋值的话会报错的。
void write_bye(void); //私有函数的声明
//----------------等等函数
void write_bye(void)
{
uchar a,b;
a = 1;
b =1 ;
sum = a+b; //当然,我这里只是举例
//--------------
}
//----------------------等
void write_cmd(uchar date)
{
write_bye();
//-------------------
}
uchar write_date(void)
{
uchar k;
k = 10;
//-----------
eturn k;
}
(4)IIC.h中:
#ifndef _XX_H_
#define _XX_H_
void write_cmd(uchar date);
uchar write_date(void);
#endif
我在这里只是结构的举例,里面的程序是乱来的。
编译的过程貌似,main.c生成main.obj;IIC.c生成IIC.obj,最后才链接。
|