51单片机智能小车C程序 蓝牙遥控+避障+自动寻迹
/*********************************************************
文件名:car.c
文件说明:小车的蓝牙,避障,自动寻迹C程序
编写人员:Seven
编写日期:2017年6月9日
程序说明:MCU采用AT89C52,外接11.0592MHz晶振、3个光电
开关、5个红外对管、HC06蓝牙模块、L298N电机驱
动模块,12V电源供电,L7805稳压输出5V。
版权标注:河南工程学院 电气信息工程系C303创新实验室
*********************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define MAIN_Fosc 11059200
uint i;
uchar tmp;
sbit IN1=P0^0; //控制左前后轮正转 1正转 0停止
sbit IN2=P0^1; //控制左前后轮倒转 1倒转 0停止
sbit IN3=P0^2; //控制右前后轮正转 1正转 0停止
sbit IN4=P0^3; //控制右前后轮倒转 1倒转 0停止
sbit ENA=P0^4; //左轮使能端
sbit ENB=P0^5; //右轮使能端
sbit red1=P1^0; //red是红外对管,从左到右分别是1~~5
sbit red2=P1^1; //红外对管以第三个为准,寻迹时返回为高电平
sbit red3=P1^2; //为1时为高电平,无信号返回
sbit red4=P1^3;
sbit red5=P1^4;
sbit eye1=P2^5; //eye为红外光电开关
sbit eye2=P2^6;
sbit eye3=P2^7;
sbit Beep=P0^7;
/********串*口*初*始*化*函*数*******/
void init()
{
TMOD = 0x20; //工作模式2,8位自动重装
TH1 = 0xfd;
TL1 = 0xfd; //波特率9600bps
SM0 = 1;
SM1 = 1; //串口工作方式1 10位异步收发器
TR1 = 1; //T1定时器启动
REN = 1; //允许串口通讯
EA = 1; //开总中断
ES = 1; //串口中断打开
}
/********* ms*级*延*时*函*数*********/
void Delay_Ms(uint ms)
{
uint i;
do{
i = MAIN_Fosc / 96000;
while(--i);
}while(--ms);
}
/*****运*动*状*态*控*制*函*数*****/
void turnleft()
{
for(i=0;i<7;i++)
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
ENA=ENB=1; //设置占空比,控制小车速度,下同
Delay_Ms(3);
ENA=ENB=0;
Delay_Ms(8);
}
}
void turnright()
{
for(i=0;i<7;i++)
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
ENA=ENB=1;
Delay_Ms(3);
ENA=ENB=0;
Delay_Ms(8);
}
}
void anticlockwise()
{
for(i=0;i<13;i++)
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
ENA=ENB=1;
Delay_Ms(3);
ENA=ENB=0;
Delay_Ms(7);
}
}
void clockwise()
{
for(i=0;i<13;i++)
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
ENA=ENB=1;
Delay_Ms(3);
ENA=ENB=0;
Delay_Ms(7);
}
}
/*******go*函*数*用*于*寻*迹*******/
void go(void)
{
for(i=0;i<10;i++)
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
ENA=ENB=1;
Delay_Ms(2);
ENA=ENB=0;
Delay_Ms(14);
}
}
/*********用*于*180度*转*身*避*障*********/
void turn_round(void)
{
for(i=0;i<58;i++)
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
ENA=ENB=1;
Delay_Ms(4);
ENA=ENB=0;
Delay_Ms(8);
}
}
/*******run*函*数*用*于*蓝*牙*遥*控*******/
void run(void)
{
for(i=0;i<13;i++)
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
ENA=ENB=1;
Delay_Ms(2);
ENA=ENB=0;
Delay_Ms(8);
}
}
void upleft(void)
{
for(i=0;i<13;i++)
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
ENB=1;
Delay_Ms(13);
ENA=1;
Delay_Ms(5);
ENA=ENB=0;
Delay_Ms(12);
}
}
void upright(void)
{
for(i=0;i<13;i++)
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
ENA=1;
Delay_Ms(13);
ENB=1;
Delay_Ms(5);
ENA=ENB=0;
Delay_Ms(12);
}
}
void back(void)
{
for(i=0;i<15;i++)
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
ENA=ENB=1;
Delay_Ms(3);
ENA=ENB=0;
Delay_Ms(7);
}
}
void stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void bottom_left()
{
for(i=0;i<15;i++)
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
ENB=1;
Delay_Ms(13);
ENA=1;
Delay_Ms(5);
ENA=ENB=0;
Delay_Ms(12);
}
}
void bottom_right()
{
for(i=0;i<10;i++)
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
ENA=1;
Delay_Ms(13);
ENB=1;
Delay_Ms(5);
ENA=ENB=0;
Delay_Ms(12);
}
}
/*************蓝*牙*遥*控*函*数*********************/
void ctrl() //接收处理函数
{
switch(tmp)
{
case '1': //led1 = 0;
upleft();
break;
case '2':
run();
break;
case '3':
upright();
break;
case '4':
anticlockwise();
break;
case '5':
stop();
break;
case '6':
clockwise();
break;
case '7':
bottom_left();
break;
case '8':
back();
break;
case '9':
bottom_right();
break;
default:
stop();
}
}
/*******寻*迹*函*数*******/
void Tracing(void)
{
if((red1==0)&&(red3==1)&&(red5==0))
go();
if(((red4==1)||(red5==1))&&(red3==0))
turnleft();
if(((red1==1)||(red2==1))&&(red4==0))
turnright();
if((red1==0)&&(red2==0)&&(red3==0)&&(red4==0)&&(red5==0))
stop();
}
/*************避*障*函*数************/
void Avoid(void)
{
P2=0xe0;
while(((eye1==0)&&(eye2==0))||(eye1==0))
{
Beep=0;
turnleft();
Beep=1;
}
while(((eye2==0)&&(eye3==0))||(eye3==0))
{
Beep=0;
turnright();
Beep=1;
}
while(((eye1==0)&&(eye2==0)&&(eye3==0))||(eye2==0)||((eye1==0)&&(eye2==1)&&(eye3==0)))
{
Beep=0;
turn_round();
Beep=1;
}
}
void main()
{
init();
while(1)
{
// tmp = SBUF;
// if(tmp == '2')
// {
// go();
// }
//
// if(tmp == '8')
// {
// back();
// }
Tracing();
Avoid();
}
}
/*******串*口*中*断*服*务*程*序*******/
void UART() interrupt 4
{
if(RI==1) //是否有数据到来 1为是 0为否
{
tmp = SBUF; //暂存接收到的数据
RI = 0;
}
ctrl();
}
51单片机智能小车C程序 蓝牙遥控+避障+自动寻迹相关推荐
- 51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随)
**51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随+遥控+TFT液晶显示屏) 本人由于使用的液晶显示屏,程序大于8K,所以更换为STC12C5A60S2芯片,与51芯片兼容. 功能比较多 ...
- 单面机51小车程序_车辆工程学院举行“51单片机智能小车”电子设计成果答辩展示...
用理论指导实践,以实践检验理论.6月28日,车辆工程学院在汽车科技馆二楼举行了"51单片机智能小车"电子设计成果展示,旨在加强学生学以致用能力,提升学生实践创新水平.2017级教改 ...
- 基于51单片机智能小车循迹功能的实现
基于51单片机智能小车循迹功能的实现 目录 基于51单片机智能小车循迹功能的实现 一.思路(仅供参考) 二.部分硬件模块介绍 1.L298n电机驱动模块 2.两路红外循迹模块 三.实现 1.代码 2. ...
- matlab智能小车避障,Arduino智能小车系列教程4——超声波避障
Arduino智能小车系列教程4--超声波避障 Arduino智能小车系列教程 准备材料 超声波模块HC-SR04 舵机固定架 舵机安装 超声波接线 代码测试 代码详解 int getDistance ...
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
每天一段单片机小知识,我们的微信公众号:mcu_51 请记得推荐给身边每一位朋友 很多热衷于玩单片机小车.机器人的童靴,往往也向往着有天能自己编写一个Android手机的遥控程序,通过自己的手 ...
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(三)
可以用手机自测一下,这用我们只用Roll 和Pitch两个数据,当手机平置时,它们接近于0,当手机前翻或侧翻时,两个值分别在±90之间变化.利用这两个数据便可搭建传送蓝牙指令的程序了. 4. 我们把发 ...
- 基于51单片机智能小车(超声波+舵机)
基于stc89c52单片机避障+舵机两驱三轮智能小车 前期准备:学会使用Keil4,学好51单片机基本知识,学会控制IO的输入与输出,内容学到外部中断,定时器,(串口通信,可以实现蓝牙控制) 准备材料 ...
- 51单片机智能小车循迹完整程序_电气与信息工程学院双创协会开展循迹小车培训...
为培养青年学子创新意识和创新能力,激发勇于创新的主动性和积极性,营造良好科技创新氛围,10月29日至30日,电气与信息工程学院双创协会于一教609.三教102和三教202开展循迹小车培训,该培训由电子 ...
- 51单片机智能小车——寻迹
材料: (1)51单片机开发板 (2)l298n电机驱动模块1个 (3)四个电机 (4)寻迹红外2个 一.组装 (1)L298N电机驱动模块与开发板接线如下图: 寻迹红外接线: 说明: 红外一OUT接 ...
最新文章
- 从RBM(受限玻尔兹曼机)开始、到深度信念网络(DBN)再到自动编码器(AE)
- 《Hack与HHVM权威指南》——1.5.2 覆盖方法的类型
- 那些很骚很酷很有内涵的话
- Fedora中允许mysql远程访问的几种方式
- zookeeper命令行(zkCli.shzkServer.sh)使用及四字命令
- ribbon超时时长配置参数查询
- PingingLab传世经典系列《CCNA完全配置宝典》-2.7 EIGRP基本配置
- 日常(关于游泳之列的真理问题讨论)
- 2021年度训练联盟热身训练赛第四场,签到题CDF
- PyTorch学习—11.权值初始化
- 你真的会用ABAP, Java和JavaScript里的constructor么? 1
- Ubuntu 10.10 安装新版 Ubuntu One 客户端
- 推荐8个很酷很有用的 HTML5 应用程序
- react项目案例_教程28——使用 react-rewired 配置基本的环境(项目)
- 【C++/Python 双语言实现】Luogu1196 银河英雄传说 + Python函数的定义与调用
- velocity语法
- 西南科技大学oj题66
- 解决Python print 输出文本显示 gbk 编码错误问题
- 每日简报 5月2日简报新鲜事 每天一分钟 了解新鲜事
- 16G BIDI SFP+光模块知识大全