基于51单片机的智能小车(一):Keil4中多文件项目中全局变量、头文件和源文件
程序员文章站
2022-03-31 21:17:06
...
首先,工程文件夹下有src、inc 和 project三个文件夹,分别存放源文件、头文件和工程文件。
然后,将所有源文件、头文件都添加到项目里面,并将头文件目录添加到魔术棒下C51的Include Path(如图)
各文件代码如下:
//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)中。
(待续)
上一篇: Vuex--项目全局变量