C51单片机-蓝牙遥控小车
源代码如下:
#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单片机-蓝牙遥控小车相关推荐
- 89c51控制小车运行c语言,STC89C52单片机蓝牙遥控小车代码
所用模块: 1.蓝牙模块 2.超声波模块 3.LCD1602模块 4.L298N模块 5.寻迹模块 主要功能: 1.蓝牙可以遥控小车 2.超声波可以测距避障 3.小车可以寻黑线 使用逻辑: 串口初始化 ...
- 【毕设项目】基于单片机的遥控小车设计与实现 - 嵌入式 物联网 stm32 c51
文章目录 1 简介 2 主要器件与实现 2.1 电机驱动模块 2.2 蓝牙模块 2.3 蓝牙调试APP 3 实现效果 5 部分参考代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍 ...
- 51单片机蓝牙遥控麦轮小车
一直以来就有想法自己做一个小车玩玩,但是一直没提上日程,这次寒假是个很好的机会,在这里把过程中的一些心得和资源分享给大家,源程序将在文末贴出来供大家参考 目录 硬件部分 底盘 麦克纳母轮 减速电机 主 ...
- 项目小实战:51单片机控制的手机蓝牙遥控小车设计(程序 元件清单 实物图)
这几天有时间做了一个手机控制的蓝牙遥控小车车,终于今天实现了,把过程和心得跟大家分享一下. 废话不多说,先上实物图 一.项目元件清单 1.某宝购买一个智能小车底盘(本人车是四驱的,因此有四个电机,两块 ...
- 基于51单片机的遥控小车
基于51单片机的遥控小车(HC-05模块,L298n模块) 保姆级 1.硬件准备 2.部分硬件说明 USB转TTL模块 可以把串口发送的TTL信号转换成USB信号再发送给电脑,电脑就可以接收到单片机发 ...
- MSP432蓝牙遥控小车
目录 前言 搭建 硬件 软件 原理 源码 前言 这个小车是去年电赛的时候准备的,很遗憾我们赛区因为疫情被取消了比赛,我们也都已经大二大三了,因此我们没有机会再参加两年一次的电赛了.但是这些成果总不能放 ...
- 5.39 综合案例2.0 - STM32蓝牙遥控小车2(语音控制)
综合案例2.0 - 蓝牙遥控小车1- 语音控制 成品展示 案例说明 器件说明 小车连线 小车源码 语音模块遥控 语音遥控连线 模块使用说明 1.MLT-BT05 4.0 蓝牙模块 2.ASRPRO-2 ...
- 【STM32】F103C8T6 蓝牙遥控小车
STM32F103C8T6 蓝牙遥控小车 前言 硬件部分 连线部分 软件部分 代码 问题与解决... 前言 本次项目使用的是STM32F103C8T6核心板作为主控,通过连接蓝牙模块,实现和手机APP ...
- 基于STM32的最简易蓝牙遥控小车
基于STM32的最简易蓝牙遥控小车 硬件准备 硬件连接 STM32cubeMX配置 代码部分 视频演示 本篇博客主要针对的读者为有一定单片机基础,但是第一次自制蓝牙遥控小车的小白同学,所用物件型号选择 ...
- 蓝牙遥控小车2.0版发布啦
蓝牙遥控小车2.0版发布啦! 蓝牙模块的主从机模式 1.主从机模式 2.设置主从机模式 蓝牙遥控器 1.硬件接线 2.程序设计 蓝牙小车 1.硬件接线 2.程序设计 今天要跟大家分享的是两个蓝牙模块之 ...
最新文章
- pandas to_json转换时强制中文而不是unicode
- C语言函数调用过程的汇编分析(停更)
- java 上传文件编码_(java)有什么办法把MultipartFile上传的文件转为utf-8的编码吗
- Python 教你自动发微博,每日一句英语
- java.net.MalformedURLException: unknown protocol: c 这个错一般有两种原因导致: 1、URL协议、格式或者路径错误,...
- Linux网络服务-Web Service之【apache的功能、安装、配置文件介绍以及实验实例】(三)...
- 95-30-030-java.util-hashMap
- web前端基础知识-(六)jQuery-补
- .Net与 WebAssembly 随笔
- keil实验c语言汇编实验一实验报告,KeilC51集成开发环境的使用实验报告
- 使用USBWriter等工具做U盘启动盘后容量变小的解决办法
- 超大文件调用讯飞语音听写解决方案
- ReiBoot(iOS系统修复工具)v6.9.5.0官方版
- 基于B站服务器宕机事故,小鸟云聊聊高防云服务器选择技巧
- 题目内容: 班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一 步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成 了一列,同学按身高从1
- 「Computer keyboard」- 在键盘中,手指的摆放位置 @20210331
- 青龙面板关闭青龙二级验证
- macos U盘引导安装
- 任正非让寒气传递到每个人身上,互联网寒冬程序员该如何破冰?
- Android 短信 彩信 wap push的接收