51单片机蓝牙小车程序详解
1.串口初始化
void UART_Init(void) //函数初始化。9600bps@11.0592MHz
{PCON &= 0x7F; //波特率不倍速SCON = 0x50; //8位数据,可变波特率//AUXR |= 0x40; //定时器1时钟为Fosc,即1T(删除。高级的单片机才有这个选项)//AUXR &= 0xFE; //串口1选择定时器1为波特率发生器(删除。高级的单片机才有这个选项)TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xFD; //设定定时初值TH1 = 0xFD; //设定定时器重装值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1EA=1; // CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。ES=1; //串行口中断允许位,ES=1,允许串行口中断,ES=0,禁止串行口中断。
}
2.配置端口及驱动程序
sbit IN1=P0^0;
sbit IN2=P0^1;
sbit IN3=P0^2;
sbit IN4=P0^3;void stop()
{IN1=0;IN2=0;IN3=0;IN4=0;
}void forward()
{IN1=1;IN2=0;IN3=1;IN4=0;
}void back()
{IN1=0;IN2=1;IN3=0;IN4=1;
}void left()
{IN1=1;IN2=0;IN3=0;IN4=0;
}void right()
{IN1=0;IN2=0;IN3=1;IN4=0;
}
3.主函数
void main()
{UART_Init();while(1){}
}
4.中断函数
void UART_Routine() interrupt 4 //8个中断请求源中的串口中断。
{unsigned char S; //定义一个S存放 SBUF中的数据。if(RI==1) //判断接收中断请求标志位,TI为1 表示用开始可以开始接收了。{stop(); //电机控制,先停止再执行指令。S=SBUF; //手机蓝牙信号发送指令 储存在SBUF中。从SBUF里面 拿出指令赋给S。switch(S) {case ('1'): //判断S中是不是指令“1”forward();break;case ('2'): //判断S中是不是指令“2”back();break;case ('3'):left();break;case ('4'):right();break;case ('0'):stop();break;} RI=0; //单片机接收中断请求标志位,接收完之后自动变为1,接收完成之后要手动置为0。为0下次才可以接收。}
注意:
1.中断函数里面的1,2,3,4,0要在手机蓝牙APP中设置。
2.手机蓝牙APP中设置,按下按键/松开按键,电机转动的。
或者按下按键电机转动,松开按键 电机停止等。
完整代码:
#include <REGX52.H>sbit IN1=P0^0;
sbit IN2=P0^1;
sbit IN3=P0^2;
sbit IN4=P0^3;void stop()
{IN1=0;IN2=0;IN3=0;IN4=0;
}void forward()
{IN1=1;IN2=0;IN3=1;IN4=0;
}void back()
{IN1=0;IN2=1;IN3=0;IN4=1;
}void left()
{IN1=1;IN2=0;IN3=0;IN4=0;
}void right()
{IN1=0;IN2=0;IN3=1;IN4=0;}void UART_Init(void)
{PCON &= 0x7F; SCON = 0x50; TMOD &= 0x0F; TMOD |= 0x20; TL1 = 0xFD; TH1 = 0xFD; ET1 = 0; TR1 = 1; EA=1; ES=1;
}void main()
{UART_Init();while(1){}
}void UART_Routine() interrupt 4
{unsigned char S;if(RI==1) {stop();S=SBUF;switch(S) {case ('1'): forward();break;case ('2'): back();break;case ('3'):left();break;case ('4'):right();break;case ('0'):stop();break;} RI=0;}
}
接线:
51单片机蓝牙小车接线(L298N供电,分别电源供电)
51单片机蓝牙小车程序详解相关推荐
- 51单片机蓝牙小车(精要版)
51单片机蓝牙小车(精要版) 实现:通过手机与小车的蓝牙通信,实现手机控制小车前后左右的移动. 这是博主学了51单片机第一次做的单片机项目,选择了许多人喜欢的蓝牙小车作为第一个项目. 准备材料: 1. ...
- MATLAB与51单片机进行串口通信详解
目录 一.51单片机与电脑进行串口通信 二.MATLAB串口通信函数 三.串口属性 四.示例Demo 4.1 MATLAB接收单片机发来的数据 4.2 MATLAB向单片机发送数据控制LED 五.总结 ...
- 单片机 rs232 c语言,完全手册 51单片机C语言开发详解系列之第8章 串口通讯实战—RS232...
完全手册 51单片机C语言开发详解系列 技术凝聚实力 专业创新出版 第8章 串口通讯实战-RS232接口电路与软件设计 本章主要通过实际的例子讲解AT89S51单片机的RS232串行通讯接口设计. 随 ...
- 硬件篇:手把手教你制作属于你的遥控车(51单片机蓝牙小车)
重要声明 本人为软件工程专业,硬件不是本专业的学习范畴,因为本人对硬件感兴趣,自学了部分51单片机知识,这个小车是20年上半年因为疫情被困在家中突发奇想做的,现在有空闲时间就想着写一篇博客,分享给同样 ...
- ws2812b程序51单片机_51单片机串口通信程序详解
串口通信简介 串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串行接口电路 ...
- 基于51单片机蓝牙小车
文章目录 接线 电机控制模块接线(需要额外电源) 单片机接线 实物图 代码相关 目录树 .c文件 main.c Serial.c(不会参考我写的串口文章) CarTurn.c(车的相关操作) dela ...
- 51单片机定时器初值计算详解
前言: 本文详细介绍了51单片机学习过程中定时器的初值计算问题以及相关概念,力求把每一个学习过程中的可能会遇到的难点说清楚,并举相关的例子加以说明.学习完毕,又顺手利用刚学到定时器的相关知识写了一个& ...
- 51单片机读写内部EEPROM详解
文档共包含三个程序. 第一个程序最简单易懂,看懂了基本就会读写51单片机内部EEPROM了. 第二个程序和第一个读写EEPROM原理差不多,包含有LCD1602操作方法,有写字符串的方法. 第三个程序 ...
- c语言流水灯程序详细讲解,用c语言编写单片机流水灯程序详解
用C语言编写的单片机流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. ? 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组 ...
- 单片机c语言程序编写步骤,用c语言编写单片机流水灯程序详解
用C语言编写的流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组I/O口, ...
最新文章
- 如何快速融入一个团队?
- 元宇宙新地王2740万元刷爆纪录!虚拟炒房一周成交6.37亿
- 【实验】如何实现远程同一网段互通?
- 线性表应用之线性表算法设计六大经典案例
- jmeter学习笔记(八-1)
- Spring jndi连接数据库
- DreamweaverCS6手把手教你安装并破解
- Node.JS EXCEL 读取操作
- css 白色背景如何实现半透明
- mysql中的查找算法_7种查找算法解析
- 面试突击63:distinct 和 group by有什么区别?
- python爬取知乎网页图片
- 8款能让打工人效率原地飞起的神仙软件,含泪公开
- vue 超出三行隐藏_文字超出三行省略...显示全文
- linux键盘错位1格,键盘按键错乱,教您修复键盘按键错乱的方法
- python9行代码_如何用9行Python代码编写一个简易神经网络
- javax.servlet.jsp.*和javax.servlet.http.*
- 链栈的定义、构建、入栈、出栈和取栈顶元素
- 服务之星网络评选视频投票小程序如何进行视频投票免费公众号投票
- python绘图库turtle_Python绘图库Turtle详细分析