51单片机项目—蓝牙控制小车运动

代码很简单,就一个蓝牙控制和电机控制,四驱车(实测过,可以直接用)

电机用的是L298N

蓝牙用的是JDY-31

  1. 主函数

#include <REGX52.H>
#include "car.h"
#include "Delay.h"

unsigned char receiveData;  //½ÓÊÕµ½µÄÊý¾Ý´æ·Å±äÁ¿

void receive(unsigned char m)  //Ö´Ðк¯Êý
{
     switch(m)
        {
            case '2':       //Ç°½ø
            car_go ();
            break;
            
          case '4':       //ÏòÇ°×óת
            car_leftgo ();
            break;
            
          case '6':       //ÏòÇ°ÓÒת
          car_rightgo ();
            break;
            
            case '8':       //ºóÍË
          car_back ();
            break;
            
          case '5':       //Í£Ö¹
          car_stop ();
          break;
            
            case '7':       //Ô­µØ×ó¹Õ
          car_leftstop ();
          break;
                        
            case '9':       //Ô­µØÓÒ¹Õ
          car_rightstop ();
          break;
        }
}
void Uart_Init()        //9600bps@11.0592MHz
{
    PCON=0x00;        //¹Ø±¶Æµ 
    SCON = 0x50;        //8λÊý¾Ý,¿É±ä²¨ÌØÂÊ
    TMOD = 0x20;        //ÉèÖö¨Ê±Æ÷ģʽ
    TL1 = 0xFd;        //ÉèÖö¨Ê±³õʼֵ
    TH1 = 0xFd;        //ÉèÖö¨Ê±³õʼֵ
    ET1 = 0;        //½ûÖ¹¶¨Ê±Æ÷1ÖжÏ
    TR1 = 1;        //¶¨Ê±Æ÷1¿ªÊ¼¼Æʱ
    EA=1;  //×ÜÖжÏ
    ES=1;  //´ò¿ª´®¿ÚÖжÏ
}
void Uart_Routine() interrupt 4      //ÖжϺ¯Êý
{
    car_stop ();
    RI = 0;                   //Çå³ý½ÓÊÕÖжϱê־λ
    receiveData=SBUF;         //³öÈ¥½ÓÊÕµ½µÄÊý¾Ý
    receive(receiveData);
}
void main ()
{
    Timer0_Init();
    Uart_Init();
    
    while (1){

    } //Ö´Ðк¯Êý
}
  1. 控制小车的代码.c

/************С³µÒƶ¯·½Ïò*************/
/* ÏòÇ°Ö±ÐС¾Ëĵç»úÕýת¡¿                        */
/* ÏòºóÖ±ÐС¾Ëĵç»ú·´×ª¡¿                       */
/* ÏòÇ°×ó¹Õ¡¾ÓÒµç»úÕýת£¬×óµç»úÍ£Ö¹¡¿*/
/* ÏòÇ°ÓÒ¹Õ¡¾ÓÒµç»úÍ£Ö¹£¬×óµç»úÕýת¡¿*/
/* Ïòºó×ó¹Õ¡¾ÓÒµç»ú·´×ª£¬×óµç»úÍ£Ö¹¡¿*/
/* ÏòºóÓÒ¹Õ¡¾ÓÒµç»úÍ£Ö¹£¬×óµç»ú·´×ª¡¿*/
/* Í£    Ö¹¡¾Ëĵç»úÍ£Ö¹¡¿                    */
/************С³µÒƶ¯·½Ïò*************/

#include <REGX52.H>
#include "motor.h"

sbit EN1A = P0^7;//×óÇ°
sbit EN1B = P0^2;//ÓÒÇ°
sbit EN2A = P3^7;//×óºó
sbit EN2B = P3^2;//ÓÒºó

unsigned char counter1,speed;    //¼ÆÊýÖµºÍ±È½ÏÖµ£¬ÓÃÓÚÊä³öPWM

void Timer0_Init()        //100΢Ãë@11.0592MHz
{
    TMOD = 0x11;    //ÉèÖö¨Ê±Æ÷ģʽ
    TL0 = 0xA4;        //ÉèÖö¨Ê±³õʼֵ
    TH0 = 0xFF;        //ÉèÖö¨Ê±³õʼֵ
    TF0 = 0;            //Çå³ýTF0±êÖ¾
    TR0 = 1;            //¶¨Ê±Æ÷0¿ªÊ¼¼Æʱ
    ET0 = 1;      //¶¨Ê±Æ÷0µÄÖжËÔÊÐí¿ª¹Ø
    EA  = 1;      //¶¨Ê±Æ÷×Ü¿ª¹Ø
    PT0 = 1;      //ÉèÖö¨Ê±Æ÷Ϊ¸ßµÍ¿ØÖÆÓÅÏȼ¶£¬1Ϊ¸ßÓÅÏȼ¶£¬0ΪµÍÓÅÏȼ¶
}
void Timer0_Routine() interrupt 1  //ÖжϺ¯Êý
{

    TL0 = 0xA4;        //ÉèÖö¨Ê±³õʼֵ
    TH0 = 0xFF;        //ÉèÖö¨Ê±³õʼֵ
    
    counter1++;
    if (counter1 >= 100)
    {
        counter1 = 0;
    }
    if (counter1 < speed)
    {
        EN1A = 1;
        EN1B = 1;
        EN2A = 1;
        EN2B = 1;
    }
    else
    {
        EN1A = 0;
        EN1B = 0;
        EN2A = 0;
        EN2B = 0;
    }
}
void car_go ()        //С³µÏòÇ°Ö±ÐÐ
{
    speed = 10;
    LF_motor_go ();
    RF_motor_go ();
    LR_motor_go ();
    RR_motor_go ();
}
void car_back ()      //С³µÏòºóÖ±ÐÐ
{
    speed = 10;
    LF_motor_back ();
    RF_motor_back ();
    LR_motor_back ();
    RR_motor_back ();
}
void car_stop ()      //С³µÍ£Ö¹
{
    speed = 0;
    RR_motor_stop ();
    LR_motor_stop ();
    RF_motor_stop ();
    LF_motor_stop ();
}
void car_leftgo ()    //С³µÏòÇ°×ó¹Õ
{
    speed = 15;
    RF_motor_go ();
    RR_motor_go ();
    LF_motor_stop ();
    LR_motor_stop ();
}
void car_rightgo ()   //С³µÏòÇ°ÓÒ¹Õ
{
    speed = 15;
    LF_motor_go ();
    LR_motor_go ();
    RF_motor_stop ();
    RR_motor_stop ();
}
void car_leftback ()  //С³µÏòºó×ó¹Õ
{
    speed = 15;
    RR_motor_back ();
    RF_motor_back ();
    LF_motor_stop ();
    LR_motor_stop ();
}
void car_rightback () //С³µÏòºóÓÒ¹Õ    
{
    speed = 15;
    LF_motor_back ();
    LR_motor_back ();
    RF_motor_stop ();
    RR_motor_stop ();
}
void car_rightstop () //С³µÔ­µØÓÒ¹Õ
{
    speed = 15;
    LF_motor_go ();
    LR_motor_go ();
    RF_motor_back ();
    RR_motor_back ();
}
void car_leftstop () //С³µÔ­µØ×ó¹Õ
{
    speed = 15;
    LF_motor_back ();
    LR_motor_back ();
    RF_motor_go ();
    RR_motor_go ();
}
  1. 控制小车的代码.h

#ifndef __CAR_H_
#define __CAR_H_

void car_go ();        //С³µÏòÇ°Ö±ÐÐ
void car_back ();      //С³µÏòºóÖ±ÐÐ
void car_stop ();      //С³µÍ£Ö¹
void car_leftgo ();    //С³µÏòÇ°×ó¹Õ
void car_rightgo ();   //С³µÏòÇ°ÓÒ¹Õ
void car_leftback ();  //С³µÏòºó×ó¹Õ
void car_rightback (); //С³µÏòºóÓÒ¹Õ
void car_leftstop ();  //С³µÔ­µØ×ó¹Õ
void car_rightstop (); //С³µÔ­µØÓÒ¹Õ

#endif
  1. 控制电机的代码.c



#include <REGX52.H>
//붨Òå
sbit IN11 = P0^5;//×óÇ°
sbit IN12 = P0^6;
sbit IN13 = P0^3;//ÓÒÇ°
sbit IN14 = P0^4;
sbit IN21 = P3^5;//×óºó
sbit IN22 = P3^6;
sbit IN23 = P3^3;//ÓÒºó
sbit IN24 = P3^4;

void LF_motor_go ()    //×óÇ°µç»úÕýת
{IN11 = 0;IN12 = 1;}
void LF_motor_back ()  //×óÇ°µç»ú·´×ª
{IN11 = 1;IN12 = 0;}
void LF_motor_stop ()  //×óÇ°µç»úÍ£Ö¹
{IN11 = 1;IN12 = 1;}
void RF_motor_go ()    //ÓÒÇ°µç»úÕýת
{IN13 = 0;IN14 = 1;}
void RF_motor_back ()  //ÓÒÇ°µç»ú·´×ª
{IN13 = 1;IN14 = 0;}
void RF_motor_stop ()  //ÓÒÇ°µç»úÍ£Ö¹
{IN13 = 1;IN14 = 1;}
void LR_motor_go ()    //×óºóµç»úÕýת
{IN21 = 1;IN22 = 0;}
void LR_motor_back ()  //×óºóµç»ú·´×ª
{IN21 = 0;IN22 = 1;}
void LR_motor_stop ()  //×óºóµç»úÍ£Ö¹
{IN21 = 1;IN22 = 1;}
void RR_motor_go ()    //ÓÒºóµç»úÕýת
{IN23 = 1;IN24 = 0;}
void RR_motor_back ()  //ÓÒºóµç»ú·´×ª
{IN23 = 0;IN24 = 1;}
void RR_motor_stop ()  //ÓÒºóµç»úÍ£Ö¹
{IN23 = 1;IN24 = 1;}

  1. 控制电机的代码.h

#ifndef __MOTOR_H_
#define __MOTOR_H_

void LF_motor_go ();    //×óÇ°µç»úÕýת
void LF_motor_back ();  //×óÇ°µç»ú·´×ª
void RF_motor_go ();    //ÓÒÇ°µç»úÕýת
void RF_motor_back ();  //ÓÒÇ°µç»ú·´×ª
void LR_motor_go ();    //×óºóµç»úÕýת
void LR_motor_back ();  //×óºóµç»ú·´×ª
void RR_motor_go ();    //ÓÒºóµç»úÕýת
void RR_motor_back ();  //ÓÒºóµç»ú·´×ª
void LF_motor_stop ();  //×óÇ°µç»úÍ£Ö¹
void RF_motor_stop ();  //ÓÒÇ°µç»úÍ£Ö¹
void LR_motor_stop ();  //×óºóµç»úÍ£Ö¹
void RR_motor_stop ();  //ÓÒºóµç»úÍ£Ö¹

#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#ifndef __JUAN_H__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值