基于51单片机的蓝牙循迹小车 代码方案分享

这是本人最近瞎搞搞出来的红外循迹+蓝牙遥控双功能小车。在此开源,若有任何疑问或建议请发评论,乐意解答 :)

一、硬件

        包括:

                STC89C52RC 单片机

                sg90舵机(阿克曼转向)

                TCRT5000红外模块(黑白线检测)

                小车用电机x2(使用L298N电机驱动板驱动)

                HC-06蓝牙模块

                L2596M降稳压模块

        各硬件之间的连接非常简单,无非就是信号线连IO口,正极连正极负极连负极,在此不作描述。(可以参考其他教程的连线,最后修改自己的IO口定义就好了)

二、代码结构

        为每个部件都写了单独的头文件,具体如下:

        主函数

        basic部分的头文件是基础头文件,包括寄存器定义(regx52.h)延时(其实整个程序基本没用到, delay.h),定时器(timer.h)

        functional部分则是每个部件的头文件,包括舵机(servo.h)电机(motor.h)红外循迹(ir.h)以及蓝牙(bluetooth.h)

        主函数内只有每个部件的初始化函数和蓝牙/循迹函数的循环。

//basic
#include 
#include 
#include 

//functional
#include 
#include 
#include 
#include 

void main() {
    motorInit();
    servoInit();
    bluetoothInit();
    while (1) {
        if (mode == 0) {
            ES = 0;				    //关闭蓝牙中断
            detectLine();
            ES = 1;				    //重新打开蓝牙中断
        } else if (mode == 1) {
            ES = 1;				    //打开蓝牙中断
        }
    }
}

        头文件

        如之前所说,共有7个头文件(虽多,但是能使之后的更新和维护变得简单)。

        头文件之间的关系如下图所示:        基于51单片机的蓝牙循迹小车 代码方案分享_第1张图片

        下面依次附上代码和注释:

        (1)寄存器定义(regx52.h)

                对原始的REGX52头文件做了少许修改,如把P0^1改为P01,这样更符合我的习惯

#ifndef __AT89X52_H__
#define __AT89X52_H__

/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr P0      = 0x80;
sfr SP      = 0x81;
sfr DPL     = 0x82;
sfr DPH     = 0x83;
sfr PCON    = 0x87;
sfr TCON    = 0x88;
sfr TMOD    = 0x89;
sfr TL0     = 0x8A;
sfr TL1     = 0x8B;
sfr TH0     = 0x8C;
sfr TH1     = 0x8D;
sfr P1      = 0x90;
sfr SCON    = 0x98;
sfr SBUF    = 0x99;
sfr P2      = 0xA0;
sfr IE      = 0xA8;
sfr P3      = 0xB0;
sfr IP      = 0xB8;
sfr T2CON   = 0xC8;
sfr T2MOD   = 0xC9;
sfr RCAP2L  = 0xCA;
sfr RCAP2H  = 0xCB;
sfr TL2     = 0xCC;
sfr TH2     = 0xCD;
sfr PSW     = 0xD0;
sfr ACC     = 0xE0;
sfr B       = 0xF0;

/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P00 = 0x80;
sbit P01 = 0x81;
sbit P02 = 0x82;
sbit P03 = 0x83;
sbit P04 = 0x84;
sbit P05 = 0x85;
sbit P06 = 0x86;
sbit P07 = 0x87;

/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_    0x01

#define STOP_   0x02
#define PD_     0x02    /* Alternate definition */

#define GF0_    0x04
#define GF1_    0x08
#define SMOD_   0x80

/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit IT0  = 0x88;
sbit IE0  = 0x89;
sbit IT1  = 0x8A;
sbit IE1  = 0x8B;
sbit TR0  = 0x8C;
sbit TF0  = 0x8D;
sbit TR1  = 0x8E;
sbit TF1  = 0x8F;

/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/

你可能感兴趣的:(51单片机,嵌入式硬件,单片机)