c语言多文件编程单片机例子,第68节:单片机C语言的多文件编程技巧

{

for(j=0;j<500;j++)

{

;

}

}

}

/*------分割线--------------------------------------------------*/

/*以下是 initial.h 的内容*/

#ifndef _INITIAL_ //标志变量_INITIAL_是用它本身的文件名称命名

#define _INITIAL_ //标志变量_INITIAL_是用它本身的文件名称命名

void initial_myself(); //这个是函数声明,每一个源文件里的函数都要在它的头文件里声明

void initial_peripheral(); //这个是函数声明,每一个源文件里的函数都要在它的头文件里声明

#endif

/*------分割线--------------------------------------------------*/

/*以下是 initial.c 的内容*/

#include "REG52.H"//必须包含的单片机系统头文件

#include "initial.h"//必须包含它本身的头文件

/* 注释一:

由于本源文件中用到了led_dr的语句,而led_dr是在led文件里宏定义的,所以必须把led.h也包含进来

*/

#include "led.h"//由于本源文件中用到了led_dr的语句,所以必须把led.h也包含进来

void initial_myself()//这个是函数定义

{

TMOD=0x01;//以下能直接用TMOD,TH0,TL0,EA,ET0,TR0这些寄存器关键字,是因为包含了REG52.H头文件

TH0=0xf8;

TL0=0x2f;

led_dr=0;//led_dr是在led文件里定义和声明的

}

void initial_peripheral() //这个是函数定义

{

EA=1;

ET0=1;

TR0=1;

}

/*------分割线--------------------------------------------------*/

/*以下是 interrupt.h 的内容*/

#ifndef _INTERRUPT_ //标志变量_INTERRUPT_是用它本身的文件名称命名

#define _INTERRUPT_ //标志变量_INTERRUPT_是用它本身的文件名称命名

void T0_time();//这个是函数声明,每一个源文件里的函数都要在它的头文件里声明

/* 注释一:

声明一个外部全局变量必须加extern关键字,同时千万不能在声明全局变量的时候赋初始值,比如:

extern unsigned int uiTimeCnt=0; 这样是绝对错误的。

*/

extern unsigned int uiTimeCnt; //这个是全局变量的声明,不能赋初始值

#endif

/*------分割线--------------------------------------------------*/

/*以下是 interrupt.c 的内容*/

#include "REG52.H"//必须包含的单片机系统头文件

#include "interrupt.h"//必须包含它本身的头文件

unsigned int uiTimeCnt=0; //这个是全局变量的定义,可以赋初值

void T0_time() interrupt 1//这个是函数定义

{

TF0=0; //以下能直接用TF0,TR0,TH0,TL0这些寄存器关键字,是因为包含了REG52.H头文件

TR0=0;

if(uiTimeCnt<0xffff)

{

uiTimeCnt++;

}

TH0=0xf8;

TL0=0x2f;

TR0=1;

}

/*------分割线--------------------------------------------------*/

/*以下是 led.h 的内容*/

#ifndef _LED_ //标志变量_LED_是用它本身的文件名称命名

#define _LED_ //标志变量_LED_是用它本身的文件名称命名

#define const_time_level 200 //宏定义都放在头文件里

/* 注释一:

IO口的宏定义也放在头文件里,

如果是PIC单片机,以下IO口定义相当于宏定义 #defineled_dr LATBbits.LATB4等语句

*/

sbit led_dr=P3^5; //如果是PIC单片机,相当于宏定义 #defineled_dr LATBbits.LATB4等语句

void led_flicker(); //这个是函数的声明,每一个源文件里的函数都要在它的头文件里声明

/* 注释三:

声明一个全局变量必须加extern关键字,同时千万不能在声明全局变量的时候赋初始值,比如:

extern unsigned char ucLedStep=0; 这样是绝对错误的。

*/

extern unsigned char ucLedStep; //这个是全局变量的声明

#endif

/*------分割线--------------------------------------------------*/

/*以下是 led.c 的内容*/

#include "REG52.H"//必须包含的单片机系统头文件

#include "led.h"//必须包含它本身的头文件

/* 注释一:

由于本源文件中用到了uiTimeCnt全局变量,而uiTimeCnt是在interrupt文件里声明和定义的,

所以必须把interrupt.h也包含进来

*/

#include "interrupt.h"//必须包含它本身的头文件

unsigned char ucLedStep=0; //这个是全局变量的定义,可以赋初值

void led_flicker() //这个是函数的定义

{

switch(ucLedStep)

{

case 0:

if(uiTimeCnt>=const_time_level)

{

ET0=0;//以下能直接用ET0寄存器关键字,是因为包含了REG52.H头文件

uiTimeCnt=0; //uiTimeCnt此变量是在interrupt文件里声明和定义的,所以必须把interrupt.h也包含进来

ET0=1;

led_dr=1;//此IO口定义已经在led.h头文件中定义了

ucLedStep=1; //切换到下一个步骤

}

break;

case 1:

if(uiTimeCnt>=const_time_level)

{

ET0=0;

uiTimeCnt=0;

ET0=1;

led_dr=0;

ucLedStep=0; //返回到上一个步骤

}

break;

}

}

/*------分割线--------------------------------------------------*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值