欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-31 21:17:06
...
	首先,工程文件夹下有src、inc 和 project三个文件夹,分别存放源文件、头文件和工程文件。
	然后,将所有源文件、头文件都添加到项目里面,并将头文件目录添加到魔术棒下C51的Include Path(如图)

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

//IR_control.h
#ifndef _IR_CONTROL_H
#define _IR_CONTROL_H

#include <reg52.h>

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 <reg52.h>
#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 <reg52.h>
#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