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口, ...
最新文章
- 在接触到服务器时破解密码、及改ssh端口
- [转]带宽计算-大B与小b的区别
- 赛门铁克公告:解密Kneber恶意软件
- 我的秋招之路之c++中static的用法
- repeater 的解释说明 用法
- python 词云手把手_手把手教你用python制作属于你的第一个词云
- 正文获取摘要 去除html标记
- 家里也是不知不觉就电脑有不能开启了
- Spring第三篇【Core模块之对象依赖】
- python 和 iphone 通过socket传数据注意
- Java进阶:SpringMVC文件上传
- jchdl - GSL实例 - LogicalLeft
- 数据统计学习的5个基本流程
- 想自学编程?这么多编程自学网站,总有一个适合你吧!
- 初学html 的重要知识点
- github官网连接超时解决方案(图解版,亲测成功)
- php离线bt下载,transmission + nginx = 离线BT下载站
- QT技巧系列(5)按时间顺序列出目录下所有的文件名
- 79元限抢Jeep专柜「冰丝速干裤」!穿上它让你“胯下生风”,比裸奔还爽!
- 最新友价T5仿虚拟交易商城网站源码+PHP内核