基于51单片机的智能小车(一):Keil4中多文件项目中全局变量、头文件和源文件

	首先,工程文件夹下有src、inc 和 project三个文件夹,分别存放源文件、头文件和工程文件。
	然后,将所有源文件、头文件都添加到项目里面,并将头文件目录添加到魔术棒下C51的Include Path(如图)

基于51单片机的智能小车(一):Keil4中多文件项目中全局变量、头文件和源文件_第1张图片
各文件代码如下:

//IR_control.h
#ifndef _IR_CONTROL_H
#define _IR_CONTROL_H

#include 

sbit IN1 = P0^0;
sbit IN2 = P0^1;
sbit IN3 = P0^2;
sbit IN4 = P0^3;

void move_forward();            //前进
void retreat();                 //后退
void stop();                    //停止
void turn_right();              //右转
void turn_left();               //左转
void speed_up();                //加速
void slow_down();               //减速

#endif
//IR_control.c
#include 
#include "IR_control.h"

void move_forward()
{
    IN1=PWM;
    IN2=0;
    IN3=PWM;
    IN4=0;
}

void stop()
{
    IN1=0;
    IN2=0;
    IN3=0;
    IN4=0;
}

void turn_right()
{
    IN1=PWM;
    IN2=0;
    IN3=0;
    IN4=PWM;
}

void turn__left()
{
    IN1=0;
    IN2=PWM;
    IN3=PWM;
    IN4=0;
}

//main.c
/******************************\
Author:
Time:
E-mail:
\******************************/

#include 
#include "IR_control.h"

char flag;
extern bit PWM;
unsigned int counter;

void init();                    //初始化函数 

void main()
{
    init();
    while(1)
    {
        if(flag==0)
        {
            move_forward();
        }
        if(flag==1)
        {
            stop();
        }
        if(flag==2)
        {
            turn_right();
        }
        if(flag==3)
        {
            turn_left();
        }
    }
}

void init()
{
    counter=0;

    //定时器0初始化
    TH0=(65536-10)/256;     //赋初值
    TL0=(65536-10)%256;     
    TH1=(65536-10)/256;     //赋初值
    TL1=(65536-10)%256;     
    TMOD=0x11;              //设置为工作方式1
    EA=1;                   //开启总中断
    ET0=1;                  //开启定时器中断0
    ET1=1;                  //开启定时器中断1
    TR0=1;                  //启动定时器0计时
    TR1=1;                  //启动定时器1计时

    flag=0;
}



void timer_0() interrupt 1
{
    TR0=0;
    TH0=(65536-10)/256;
    TL0=(65536-10)%256;
    counter++;
    if(counter<30)
    {
        PWM=1;
    }
    else
        PWM=0;
    if(counter>=100)
    {
        counter=0;
    }       
    TR0=1;        
}

有两点要注意:
1、普通类型的变量用作全局变量时(在多个源文件中使用),声明定义方法:(1)在一个头文件中: extern 声明,在其他源文件中定义和使用
(2)在其中一个源文件中: extern 声明,在其他源文件中定义和使用
2、当变量类型为sbit时,要将其声明和定义
sbit IN1 = P0^0;
sbit IN2 = P0^1;
sbit IN3 = P0^2;
sbit IN4 = P0^3;
放在头文件或者对应的源文件(我这里是IR_control.c)中。
(待续)

你可能感兴趣的:(STC)