基于STC89C52的智能小车——蓝牙遥控篇

2023-05-16

蓝牙遥控是依靠单片机的串口通讯来实现的功能。这周我主要学习的内容是串口通讯。在完成学习后我用之前买避障小车时顺便买的蓝牙模块做了一个升级版智能小车,它可以通过蓝牙模块实现避障模式与蓝牙遥控模式的切换以及速度的调整。
蓝牙模块的接线:将vcc与gnd接在单片机最小系统的5v供电口上,将txd和rxd分别接在单片机的rxd与txd上
下面是程序(头文件之前的笔记中有,在此不做赘述了)

#include <REGX52.H>
#include "direction.h"
#include "cd.h"
#define u8 unsigned char
#define u16  unsigned int
sbit BZL=P2^0 ;
sbit BZR=P2^1 ;
u8 iw=0;
u8 mod=0;
u16 time_cnt=0;
u16 freq=100;        //PWM输出频率
u16 duty_cycle=20;  //占空比
void Timer0Init(void)	
{
	TMOD &= 0xF0;
	TMOD |= 0x01;
	TL0 = 0xA4;		
	TH0 = 0xFF;		
	TF0 = 0;	
	TR0 = 1;
	ET0 = 1;
	EA = 1;		
}
void UsartConfiguration()
{	
	SCON=0X50;			
	TMOD&=0X0f;	
	TMOD|=0X20;		
	PCON=0X00;		
	TH1=0Xfd;		    
	TL1=0Xfd;
	TR1= 1;					
	ES = 1;        
  EA = 1;         
}
void main()
{
	UsartConfiguration();
	Timer0Init();
	while(1)
	{
		if(mod)
		{
			if(BZR==0)
			{
				Timer0Init();
				back();
				iw=dd();
				Delay(100);
				Timer0Init();
				left();
				iw=dd();
				Delay(160);
				Timer0Init();
				forward();
				iw=dd();
			}
			if(BZL==0)
			{
				Timer0Init();
				back();
				iw=dd();
				Delay(100);
				Timer0Init();
				right();
				iw=dd();
				Delay(160);
				Timer0Init();
				forward();
				iw=dd();
			}
		}
	}
}
void timer0 () interrupt 1
{
	TR0=0;
	TL0 = 0xA4;		
	TH0 = 0xFF;	
	time_cnt++;
	if(time_cnt>=(10000/freq)) time_cnt=0;
	else if(time_cnt<=(duty_cycle/((10000/freq)/100)))
	{
		cd(iw);
	}
	else 
	{
		stop();
	}
	TR0=1;
}

void Com_Int(void) interrupt 4
{	
	u8 receive_data;	
	Timer0Init();
	EA = 0;
	if(RI == 1) 
	{ 
		RI=0; 
		receive_data = SBUF;
		switch(receive_data)
		{
			case ('0'):
				stop();iw=dd();break;
			case ('1'):
				forward();iw=dd();break;
			case ('2'):
				back();iw=dd();break;
			case ('3'):
				left();iw=dd();break;
			case ('4'):
				right();iw=dd();break;
			case ('5'):
				mod=~mod;stop();iw=dd();break;
			case ('6'):
				duty_cycle+=10;
				if(duty_cycle>100)duty_cycle=10;
				break;
			case ('7'):
				break;
			case ('8'):
				duty_cycle=10;
		}			
	}		
		EA = 1;
}

在将程序烧录进小车里以后,我们就可以用手机操控小车了。

首先在应用商店下载蓝牙串口
在这里插入图片描述打开app后点击连接
在这里插入图片描述
然后切换到键盘,点击编辑模式

在这里插入图片描述
然后按照下图编辑每个按键
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:模式按钮用来开关避障功能;在切换为避障模式之后需再按避障开始按钮小车才会前进;速度复原按钮可以随时将小车速度降至最低。

由于我之前买的所有模块都已学习完成,这是我近期最后一篇关于智能小车的学习笔记了。之后准备开始Linux的学习。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STC89C52的智能小车——蓝牙遥控篇 的相关文章

  • 30天自制C++服务器

    30天自制C 43 43 服务器 如访问慢 xff0c 可以到这里观看 xff1a csblog 教程的配套网络库 xff1a pine xff0c star and fork 先说结论 xff1a 不管使用什么语言 xff0c 一切后台开
  • 【C语言】之实现 printf 函数功能

    span class token comment 文件名 myPrintf c 文件功能 使用putchar函数模拟printf函数的功能 编辑人 王廷云 编辑时间 2017 10 14 修改时间 2018 1 12 span span c
  • 30天自制C++服务器day05-epoll高级用法-Channel登场

    在上一天 xff0c 我们已经完整地开发了一个echo服务器 xff0c 并且引入面向对象编程的思想 xff0c 初步封装了Socket InetAddress和Epoll xff0c 大大精简了主程序 xff0c 隐藏了底层语言实现细节
  • EasyVim:简单强大的VIM配置

    EasyVim 简单易用的vim配置 xff0c 熟练后可大大提高开发效率 xff08 VS Code的两倍以上 xff09 安装 安装过程需要从github下载很多插件 xff0c 国内尽量挂VPN span class token fu
  • README

    EasyVim 简单易用的vim配置 xff0c 熟练后可大大提高开发效率 xff08 VS Code的两倍以上 xff09 安装 安装过程需要从github下载很多插件 xff0c 国内尽量挂VPN span class token fu
  • C语言static和inline

    C语言static和inline C语言的static和inline的用法看似简单 但有很多坑 xff0c 一些编程老手也会犯错误 xff0c 网上也几乎很少有教程能讲清楚 下面先说结论 xff0c 再进行推导 xff1a 头文件里不能单独

随机推荐

  • STC51单片机学习笔记4——stc12c56 串口

    stc12c56 串口 xff08 没有用独立波特率发生器 xff0c 用T1不分频 中断式接受与发送 xff09 烧写程序时 xff0c 一定要选用外部晶振 xff08 烧写软件默认为内部晶振 xff08 5M 6M xff09 xff0
  • 如何直接使用别人的conda环境(免安装)

    如何直接使用别人的conda环境 xff08 免安装 xff09 1 复制conda文件夹2 修改配置文件3 修改环境路径和包路径4 修改环境路径和包路径 有时候为了更加方便 xff0c 可以直接使用其他用户的环境 xff0c 而不是自己重
  • 元组,字典,列表排序

    经常需要对元组或者字典等序列按照特定的规则进行排序 xff0c 如按照年龄进行排序 gt gt gt student tuples 61 39 john 39 39 A 39 15 39 jane 39 39 B 39 12 39 dave
  • Enable VT-x in your BIOS security settings (refer to documentation for your computer)

    创建一个安卓模拟器的时候无法运行 提示为 Intel HAXM 要求运行AVD 但是VT x 没有被允许 意思就是说主机支持VT x xff0c 但是处于未开启状态 你需要进入BOIS中进行设置 BOIS出现Lenovo时按F2进入 选择S
  • numpy数组的操作取前行和取列

    这个数组跟MATLAB简直不要太像 首先得导包 xff0c from numpy import 如果你要取前几行 a 61 c 0 3 前0 1 2行 b 61 c 0 2 4 第0行的第2和第3列不包括第4列 xff0c 因为列下标也是从
  • CMake官方教程

    很好的一个官方教程翻译文档 CMake简介 CMake是一个跨平台的 开源的构建工具 cmake是makefile的上层工具 xff0c 它们的目的正是为了产生可移植的makefile xff0c 并简化自己动手写makefile时的巨大工
  • TeamTalk HttpParser详解

    1 简介 TeamTalk http解析实际上是利用了ngnix的http parse解析库 2 HTTP简介 请求报文 参考图解HTTP 上野宣 响应报文 参考图解HTTP 上野宣 URI格式 参考图解HTTP 上野宣 3 ngnix h
  • MATLAB随机生成大小也是随机的矩形(地形图一)

    有一个需求需要要生成地貌一样的随机地形图 xff0c 首先我通过在固定大小的矩形面板上生成多个大小不一的矩形 xff0c 然后赋予每个矩形随机的高度 xff0c 然后再进行滤波得到想要的地形图 先直接贴一段代码 xff0c 看看是如何在面板
  • nvidia-smi:command not found 问题解决,Failed to initialize NVML: Driver/library version mismatch

    在装驱动之后 发现nvidia smi不能用了 于是在网上找到了解决方案 简单来看 xff0c 就两步 1 unload nvidia kernel mod 2 reload nvidia kernel mod 执行起来就是 1 sudo
  • 基于OpenCV的双目深度估计实现与改进

    双目深度估计 一 传统方法 常用的方法有SAD匹配算法 xff0c BM算法 xff0c SGBM算法 xff0c GC算法 1 1 SAD算法 SAD Sum of absolute differences 是一种图像匹配算法 xff0c
  • Libstdc++.so.6: version `GLIBCXX_3.4.22’ not found(conda)

    error Libstdc 43 43 so 6 version 96 GLIBCXX 3 4 22 not found fix 在conda环境下 xff0c 由于安装了某些模块 xff0c 使得模块的版本不一样 其中libstdc 43
  • pytoch报错OSError: [Errno 24] Too many open files

    因为默认的file descriptor共享策略使用文件描述符作为共享内存句柄 xff0c 并且当DataLoader上有太多批次时 xff0c 这将达到限制 要解决此问题 xff0c 您可以通过将其添加到脚本来切换到file system
  • MXNet的gluon转symbol并保存

    from mxnet gluon model zoo import vision import mxnet as mx import numpy as np mobilenetv205 61 vision get model 39 mobi
  • 激光雷达技术路线:机械式、MEMS是主流,OPA、Flash、FMCW发展空间大

    激光雷达是通过发射激光束来探测物体与传感器之间精准距离的主动测量装置 xff0c 包含发射单元 接收单元 扫描单元以及数据处理单元 激光雷达通过激光器和探测器组成的收发阵列 xff0c 结合光束扫描 xff0c 可以对广义机器人所处环境进行
  • C++ 错误解决 —— internal compiler error

    问题 xff1a g 43 43 编译时 xff0c 报错 xff1a g 43 43 internal compiler error Killed program cc1plus 出错原因 xff1a 出错的原因是 xff08 虚拟机 x
  • 基于STC89C52的智能小车——红外避障篇

    做这个小车真是历尽波折 因为我的零件是散买的 xff0c 所以在组装时出了各种幺蛾子 先是装马达的时候发现螺丝买短了 xff0c 之后又是单片机最小单元装不到小车底板上 千辛万苦把小车组装好了 xff0c 终于可以开心 xff08 并不 x
  • make、makefile、cmake之间的区别与联系

    make makefile cmake之间的区别与联系 首先说明一下make makefile cmake存在的原因 在进行编译时 xff0c 如果程序只有一个源文件 xff0c 那么我们可以直接利用gcc命令对其进行编译 xff1b 但是
  • 基于STC89C52的智能小车——PWM调速篇

    虽然我的小车因为电池电压太低慢的要死 xff0c 不过PWM还是要学的 PWM简单来说就是通过调整占空比 xff08 一个时间段 t 内电机运行的时间占总时间的比例 xff09 来调整小车速度 当然为了小车运行稳定 t 必须很小 xff0c
  • 基于STC89C52的智能小车——红外避障+PWM调速篇

    这篇学习笔记虽然看起来很水 xff0c 毕竟红外避障和PWM在之前的学习笔记里都写过了 xff0c 但这次确实是我耗时最久的一次作业 用软件实现PWM真是一个深渊巨坑 首先是由于小车的方向函数的运作方式是切换运动状态 xff0c 而我们用P
  • 基于STC89C52的智能小车——蓝牙遥控篇

    蓝牙遥控是依靠单片机的串口通讯来实现的功能 这周我主要学习的内容是串口通讯 在完成学习后我用之前买避障小车时顺便买的蓝牙模块做了一个升级版智能小车 xff0c 它可以通过蓝牙模块实现避障模式与蓝牙遥控模式的切换以及速度的调整 蓝牙模块的接线