源代码如下:

#include <reg52.h>//A-右电机;B-左电机
sbit MotorA1=P1^0;
sbit MotorA2=P1^1;
sbit MotorB1=P1^2;
sbit MotorB2=P1^3;unsigned char Receiver_buff[1];
void Go_Straight(void)//直走
{MotorA1=1;MotorA2=0;MotorB1=1;MotorB2=0;
}
void Back_Up(void)//后退
{MotorA1=0;MotorA2=1;MotorB1=0;MotorB2=1;
}
void Left(void)//左转
{MotorA1=1;MotorA2=0;MotorB1=0;MotorB2=1;
}
void Right(void)//右转
{MotorA1=0;MotorA2=1;MotorB1=1;MotorB2=0;
}
void Stop(void)//停止
{MotorA1=0;MotorA2=0;MotorB1=0;MotorB2=0;
}
void Bluetooth_Init(void)
{TMOD=0X20;//设置定时器T1-工作方式2TH1=0XFD;//存初值TL1=0XFD;//计数器PCON=0X00;//波特率倍增率为0SCON=0X50;//串口接收数据EA=1;//开启总中断允许位ES=1;//打开中断接收-蓝牙发送数据接收TR1=1;//开启定时器
}
void Bluetooth_Send(unsigned char dat)
{EA=0;//关闭中断TI=0;//清发送完毕中断请求标志位SBUF=dat;//发送while(TI==0);  EA=1;//允许串口中断TI=0;//清发送完毕中断请求标志位
}
void Uart() interrupt 4
{if(RI)//接收中断标准位-接受完一帧字符后RI=1{Receiver_buff[0]=SBUF;RI=0;//清除接收中断标志位}
}int main(void)
{Bluetooth_Init();while(1){switch(Receiver_buff[0]){case 1:Go_Straight();break;case 2:Back_Up();break;case 3:Left();break;case 4:Right();break;case 5:Stop();break; }}}

以下对各个子函数进行分析:

1.电机模块

首先对两个电机定义4个引脚进行控制(一个电机2个引脚,一正一负驱动),然后通过对引脚赋值高低电平进行方向控制。

//A-右电机;B-左电机
sbit MotorA1=P1^0;
sbit MotorA2=P1^1;
sbit MotorB1=P1^2;
sbit MotorB2=P1^3;void Go_Straight(void)//直走
{MotorA1=1;MotorA2=0;MotorB1=1;MotorB2=0;
}
void Back_Up(void)//后退
{MotorA1=0;MotorA2=1;MotorB1=0;MotorB2=1;
}
void Left(void)//左转
{MotorA1=1;MotorA2=0;MotorB1=0;MotorB2=1;
}
void Right(void)//右转
{MotorA1=0;MotorA2=1;MotorB1=1;MotorB2=0;
}
void Stop(void)//停止
{MotorA1=0;MotorA2=0;MotorB1=0;MotorB2=0;
}

2.Bluetooth_Init()

对蓝牙模块进行初始化——即对串口通信进行初始化,通过对串口通信的初始化,后续通过手机蓝牙连接发送数据进行控制小车。

对串口的初始化的内容有:设置波特率,串口接收数据,开启总中断,打开定时器

void Bluetooth_Init(void)
{TMOD=0X20;//设置定时器T1-工作方式2TH1=0XFD;//存初值TL1=0XFD;//计数器PCON=0X00;//波特率倍增率为0SCON=0X50;//串口接收数据EA=1;//开启总中断允许位ES=1;//打开中断接收-蓝牙发送数据接收TR1=1;//开启定时器
}

3.Bluetooth_Send(unsigned char dat)-发送数据

当手机连接上蓝牙后,发送一个数据时,调用Bluetooth_Send()函数,将数据赋值于SBUF,同时触发回调函数,将数据赋于数组Receiver_buff[0]。

unsigned char Receiver_buff[1];
void Bluetooth_Send(unsigned char dat)
{EA=0;//关闭中断TI=0;//清发送完毕中断请求标志位SBUF=dat;//发送while(TI==0);  EA=1;//允许串口中断TI=0;//清发送完毕中断请求标志位
}
//中断回调函数
void Uart() interrupt 4
{if(RI)//接收中断标准位-接受完一帧字符后RI=1{Receiver_buff[0]=SBUF;RI=0;//清除接收中断标志位}
}

4.主函数

先初始化蓝牙模块,然后等待接收蓝牙数据进行控制。

int main(void)
{Bluetooth_Init();//初始化蓝牙模块while(1){switch(Receiver_buff[0])//接收蓝牙数据{case 1:Go_Straight();break;case 2:Back_Up();break;case 3:Left();break;case 4:Right();break;case 5:Stop();break;    }}
}

5.设置蓝牙APP软件

设置方向发送数据,分按下与松开发送的数据,当松开时一直发送数据5(小车停止),按下时发送相应的方向数据。

C51单片机-蓝牙遥控小车相关推荐

  1. 89c51控制小车运行c语言,STC89C52单片机蓝牙遥控小车代码

    所用模块: 1.蓝牙模块 2.超声波模块 3.LCD1602模块 4.L298N模块 5.寻迹模块 主要功能: 1.蓝牙可以遥控小车 2.超声波可以测距避障 3.小车可以寻黑线 使用逻辑: 串口初始化 ...

  2. 【毕设项目】基于单片机的遥控小车设计与实现 - 嵌入式 物联网 stm32 c51

    文章目录 1 简介 2 主要器件与实现 2.1 电机驱动模块 2.2 蓝牙模块 2.3 蓝牙调试APP 3 实现效果 5 部分参考代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍 ...

  3. 51单片机蓝牙遥控麦轮小车

    一直以来就有想法自己做一个小车玩玩,但是一直没提上日程,这次寒假是个很好的机会,在这里把过程中的一些心得和资源分享给大家,源程序将在文末贴出来供大家参考 目录 硬件部分 底盘 麦克纳母轮 减速电机 主 ...

  4. 项目小实战:51单片机控制的手机蓝牙遥控小车设计(程序 元件清单 实物图)

    这几天有时间做了一个手机控制的蓝牙遥控小车车,终于今天实现了,把过程和心得跟大家分享一下. 废话不多说,先上实物图 一.项目元件清单 1.某宝购买一个智能小车底盘(本人车是四驱的,因此有四个电机,两块 ...

  5. 基于51单片机的遥控小车

    基于51单片机的遥控小车(HC-05模块,L298n模块) 保姆级 1.硬件准备 2.部分硬件说明 USB转TTL模块 可以把串口发送的TTL信号转换成USB信号再发送给电脑,电脑就可以接收到单片机发 ...

  6. MSP432蓝牙遥控小车

    目录 前言 搭建 硬件 软件 原理 源码 前言 这个小车是去年电赛的时候准备的,很遗憾我们赛区因为疫情被取消了比赛,我们也都已经大二大三了,因此我们没有机会再参加两年一次的电赛了.但是这些成果总不能放 ...

  7. 5.39 综合案例2.0 - STM32蓝牙遥控小车2(语音控制)

    综合案例2.0 - 蓝牙遥控小车1- 语音控制 成品展示 案例说明 器件说明 小车连线 小车源码 语音模块遥控 语音遥控连线 模块使用说明 1.MLT-BT05 4.0 蓝牙模块 2.ASRPRO-2 ...

  8. 【STM32】F103C8T6 蓝牙遥控小车

    STM32F103C8T6 蓝牙遥控小车 前言 硬件部分 连线部分 软件部分 代码 问题与解决... 前言 本次项目使用的是STM32F103C8T6核心板作为主控,通过连接蓝牙模块,实现和手机APP ...

  9. 基于STM32的最简易蓝牙遥控小车

    基于STM32的最简易蓝牙遥控小车 硬件准备 硬件连接 STM32cubeMX配置 代码部分 视频演示 本篇博客主要针对的读者为有一定单片机基础,但是第一次自制蓝牙遥控小车的小白同学,所用物件型号选择 ...

  10. 蓝牙遥控小车2.0版发布啦

    蓝牙遥控小车2.0版发布啦! 蓝牙模块的主从机模式 1.主从机模式 2.设置主从机模式 蓝牙遥控器 1.硬件接线 2.程序设计 蓝牙小车 1.硬件接线 2.程序设计 今天要跟大家分享的是两个蓝牙模块之 ...

最新文章

  1. pandas to_json转换时强制中文而不是unicode
  2. C语言函数调用过程的汇编分析(停更)
  3. java 上传文件编码_(java)有什么办法把MultipartFile上传的文件转为utf-8的编码吗
  4. Python 教你自动发微博,每日一句英语
  5. java.net.MalformedURLException: unknown protocol: c 这个错一般有两种原因导致: 1、URL协议、格式或者路径错误,...
  6. Linux网络服务-Web Service之【apache的功能、安装、配置文件介绍以及实验实例】(三)...
  7. 95-30-030-java.util-hashMap
  8. web前端基础知识-(六)jQuery-补
  9. .Net与 WebAssembly 随笔
  10. keil实验c语言汇编实验一实验报告,KeilC51集成开发环境的使用实验报告
  11. 使用USBWriter等工具做U盘启动盘后容量变小的解决办法
  12. 超大文件调用讯飞语音听写解决方案
  13. ReiBoot(iOS系统修复工具)v6.9.5.0官方版
  14. 基于B站服务器宕机事故,小鸟云聊聊高防云服务器选择技巧
  15. 题目内容: 班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一 步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成 了一列,同学按身高从1
  16. 「Computer keyboard」- 在键盘中,手指的摆放位置 @20210331
  17. 青龙面板关闭青龙二级验证
  18. macos U盘引导安装
  19. 任正非让寒气传递到每个人身上,互联网寒冬程序员该如何破冰?
  20. Android 短信 彩信 wap push的接收

热门文章

  1. 左程云算法体系班笔记
  2. python凹多边形分割_直线切割凹多边形
  3. 点餐小程序源码­|PHP微信点餐小程序
  4. sql与hsql的区别以及分别怎么用!
  5. HSQL 中修改字段的语法
  6. chrome浏览器插件安装步骤
  7. Qt 打印文档(PDF)
  8. 深度学习-对抗神经网络简介
  9. 局域网网站服务器dns设置,简易搭建局域网内部dns服务器
  10. matlab线性规划系列之基础解题-2