标题:
基于51单片机的简单智能小车,实现HC-05蓝牙控制+避障+寻迹等功能
[打印本页]
作者:
孤独者!
时间:
2018-4-22 11:02
标题:
基于51单片机的简单智能小车,实现HC-05蓝牙控制+避障+寻迹等功能
分享一下我的作品。下面是制作出来的实物图:
822005372859072152.jpg
(1.83 MB, 下载次数: 131)
下载附件
2018-4-22 11:01 上传
单片机源程序如下:
#include<reg52.h>
typedef unsigned char u8; //宏定义无符号字符型 8位
typedef unsigned int u16; //宏定义无符号整形 16位
sbit PWM1 = P2^6; //左电机高电平
sbit PWM2 = P2^5; //右电机高电平
sbit IN1 = P2^4;
sbit IN2 = P2^3; //左电机
sbit IN3 = P2^2;
sbit IN4 = P2^1; //右电机
sbit S1 = P1^1; //左红外避障模块
sbit S2 = P1^2; //右红外避障模块
sbit S3 = P1^3; //左红外寻迹模块
sbit S4 = P1^4; //右红外寻迹模块
sbit K1 = P3^2; //功能转换按键
u8 connt; //调速周期
u8 PWM_NO; //高电平时间
u8 COM = 0; //功能控制位
u8 t=0; //判断串口中断是否执行
void time(void) //定时计时器初始化函数
{
TMOD = 0x01; //中断方式1
TH0 = 0xfe;
TL0 = 0x0c; //0.5ms
EA = 1; //打开总中断
ET0 = 1; //打开计时器中断
TR0 = 1; //启动计时器
}
void InitUART(void) //串口中断初始化函数
{
SCON=0x50; //设置为工作方式1
TMOD=0x20; //设置计数器工作方式2
PCON=0x00; //波特率加倍
TH1=0xfd; //计数器初始值设置,注意波特率是9600的
TL1=0xfd;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void delay( u16 k ) //延时大约1ms
{
u16 i,j;
for(i=k;i>0;i--)
for(j=120;j>0;j--);
}
void SC() //刹车
{
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0;
}
void QJ() //前进
{
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void HT() //后退
{
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
}
void ZZ1() //左大转
{
IN1 = 0;
IN2 = 1;
IN3 = 1;
IN4 = 0;
}
void ZZ2() //左小转
{
IN1 = 0;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void YZ1() //右大转
{
IN1 = 1;
IN2 = 0;
IN3 = 0;
IN4 = 1;
}
void YZ2() //右小转
{
IN1 = 1;
IN2 = 0;
IN3 = 0;
IN4 = 0;
}
void HY() //后右转
{
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 1;
}
void lin1() //红外避障程序
{
if( S1 && S2 ) //两探头不反应,小车前进
{
QJ();
}
if( !S1 && S2 ) //左探头反应,小车右转
{
SC();
delay(100);
HT();
delay(400);
YZ1();
delay(550);
SC();
delay(100);
}
if( S1 && !S2 ) //右探头反应,小车左转
{
SC();
delay(100);
HT();
delay(400);
ZZ1();
delay(550);
SC();
delay(100);
}
if( !S1 && !S2 ) //两探头反应,小车后退,右转
{
SC();
delay(100);
HT();
delay(400);
HY();
delay(550);
}
}
void lin2() //寻迹功能程序
{
if( !S3 && !S4 ) //两探头反应,小车前进
{
QJ();
delay(150);
SC();
delay(90);
}
if( S1 && S2 ) //两探头反应,小车停止
{
SC();
}
if( S3 && !S4 ) //左探头不反应,小车右转
{
SC();
delay(90);
YZ2();
delay(120);
}
if( !S3 && S4 ) //右探头不反应,小车左转
{
SC();
delay(90);
ZZ2();
delay(90);
}
}
void lin3() //物块追踪功能程序
{
if( S1 && S2 ) //两探头不反应,小车停止
{
SC();
}
if( !S1 && !S2 ) //两探头反应,小车前进
{
QJ();
}
if( !S1 && S2 ) //右探头不反应,小车左转
{
ZZ1();
}
if( S1 && !S2 ) //左探头不反应,小车右转
{
YZ1();
}
}
void lin4() //魔术手功能程序
{
if( S1 && S2 ) //两探头不反应,小车前进
{
QJ();
}
if( !S1 && !S2 ) //两探头反应,小车后退
{
HT();
}
if( !S1 && S2 ) //左探头反应,小车后退
{
HT();
}
if( S1 && !S2 ) //右探头反应,小车后退
{
HT();
}
}
void konzi() //控制位
{
if( K1 == 0 )
{
delay(10);
if( K1 == 0 )
{
COM++;
}
while( !K1 );
}
if( COM == 5)
{
COM = 0;
t=0;
}
if( COM == 0 )
{
PWM_NO = 14;
}
else
PWM_NO = 15;
}
void main () //主函数
{
time(); //计时器初始化
InitUART(); //串口初始化
connt = 20; //PWM的一个周期
PWM_NO = 14; //调速,数值越大速度越慢
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0; //待机
while(1)
{
konzi();
switch(COM) //功能选择区
{
case 0: lin1();break; //避障
case 1: lin2();break; //寻迹
case 2: lin3();break; //物体跟随
case 3: lin4();break; //魔术手
case 4: t=1;SC();while(1);break; //跳转到蓝牙控制
}
}
}
void Timer0Interrupt(void) interrupt 1 //计时器中断函数
{
u8 non;
TH0 = 0xfe;
TL0 = 0x0c;
non++;
if( non == PWM_NO )
{
PWM1 = 1;
PWM2 = 1;
}
if( non == connt )
{
non = 0;
if( PWM_NO != 0)
{
PWM1 = 0;
PWM2 = 0;
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
小车.rar
(1.77 KB, 下载次数: 585)
2018-4-22 10:56 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
你!
时间:
2018-4-22 17:02
谢谢楼主的分享
作者:
寂寞微积分
时间:
2018-5-4 08:42
谢谢楼主分享,在做毕设
作者:
momoland
时间:
2018-9-3 17:25
魔术手方案代码设计的比较巧妙
作者:
18323097716
时间:
2018-9-17 09:32
谢谢分享
作者:
我就是我啊
时间:
2018-11-1 10:22
谢谢分享,真的很棒
作者:
15163405684
时间:
2018-12-10 20:34
谢谢分享
作者:
偷喝茶的猫
时间:
2019-3-20 08:50
楼主可否私发一下,我这新号没币。。。。。!
1041371533@qq.com
万分感谢!!!
作者:
74HC595
时间:
2019-3-22 23:32
楼主可否私发一下,我这新号没币。。。。。!
2658376041@qq.com
万分感谢!!!
作者:
13219695612
时间:
2019-3-23 16:22
你! 发表于 2018-4-22 17:02
谢谢楼主的分享
感谢楼主分享
作者:
风华12306
时间:
2019-4-1 09:18
这个资料可以的,赞一个
作者:
马良马良
时间:
2019-4-11 14:39
代码写的真好,看了2遍
作者:
风马少年
时间:
2019-6-13 17:50
感谢分享,一直想找的程序
作者:
d6699721
时间:
2020-3-14 15:53
可以可以 感谢分享
作者:
zjdaty
时间:
2020-4-12 20:37
楼主 牛b啊
作者:
区区&致命伤
时间:
2021-2-10 10:22
楼主能帮忙接下疑惑吗?sbit K1 = P3^2; //功能转换按键这一部分是做声吗的?
作者:
小悬
时间:
2021-3-6 11:40
谢谢分享,最近正好在找这些东西!
作者:
3354968205
时间:
2021-3-7 13:21
顶起! 谢谢楼主的分享
作者:
SyingChan
时间:
2022-1-18 17:18
你好,有电路图吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1