/*********************************************************
    文件名: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程序 蓝牙遥控+避障+自动寻迹相关推荐

  1. 51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随)

    **51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随+遥控+TFT液晶显示屏) 本人由于使用的液晶显示屏,程序大于8K,所以更换为STC12C5A60S2芯片,与51芯片兼容. 功能比较多 ...

  2. 单面机51小车程序_车辆工程学院举行“51单片机智能小车”电子设计成果答辩展示...

    用理论指导实践,以实践检验理论.6月28日,车辆工程学院在汽车科技馆二楼举行了"51单片机智能小车"电子设计成果展示,旨在加强学生学以致用能力,提升学生实践创新水平.2017级教改 ...

  3. 基于51单片机智能小车循迹功能的实现

    基于51单片机智能小车循迹功能的实现 目录 基于51单片机智能小车循迹功能的实现 一.思路(仅供参考) 二.部分硬件模块介绍 1.L298n电机驱动模块 2.两路红外循迹模块 三.实现 1.代码 2. ...

  4. matlab智能小车避障,Arduino智能小车系列教程4——超声波避障

    Arduino智能小车系列教程4--超声波避障 Arduino智能小车系列教程 准备材料 超声波模块HC-SR04 舵机固定架 舵机安装 超声波接线 代码测试 代码详解 int getDistance ...

  5. 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)

    每天一段单片机小知识,我们的微信公众号:mcu_51     请记得推荐给身边每一位朋友 很多热衷于玩单片机小车.机器人的童靴,往往也向往着有天能自己编写一个Android手机的遥控程序,通过自己的手 ...

  6. 无需编程,DIY自己智能小车的Android蓝牙遥控软件(三)

    可以用手机自测一下,这用我们只用Roll 和Pitch两个数据,当手机平置时,它们接近于0,当手机前翻或侧翻时,两个值分别在±90之间变化.利用这两个数据便可搭建传送蓝牙指令的程序了. 4. 我们把发 ...

  7. 基于51单片机智能小车(超声波+舵机)

    基于stc89c52单片机避障+舵机两驱三轮智能小车 前期准备:学会使用Keil4,学好51单片机基本知识,学会控制IO的输入与输出,内容学到外部中断,定时器,(串口通信,可以实现蓝牙控制) 准备材料 ...

  8. 51单片机智能小车循迹完整程序_电气与信息工程学院双创协会开展循迹小车培训...

    为培养青年学子创新意识和创新能力,激发勇于创新的主动性和积极性,营造良好科技创新氛围,10月29日至30日,电气与信息工程学院双创协会于一教609.三教102和三教202开展循迹小车培训,该培训由电子 ...

  9. 51单片机智能小车——寻迹

    材料: (1)51单片机开发板 (2)l298n电机驱动模块1个 (3)四个电机 (4)寻迹红外2个 一.组装 (1)L298N电机驱动模块与开发板接线如下图: 寻迹红外接线: 说明: 红外一OUT接 ...

最新文章

  1. 从RBM(受限玻尔兹曼机)开始、到深度信念网络(DBN)再到自动编码器(AE)
  2. 《Hack与HHVM权威指南》——1.5.2 覆盖方法的类型
  3. 那些很骚很酷很有内涵的话
  4. Fedora中允许mysql远程访问的几种方式
  5. zookeeper命令行(zkCli.shzkServer.sh)使用及四字命令
  6. ribbon超时时长配置参数查询
  7. PingingLab传世经典系列《CCNA完全配置宝典》-2.7 EIGRP基本配置
  8. 日常(关于游泳之列的真理问题讨论)
  9. 2021年度训练联盟热身训练赛第四场,签到题CDF
  10. PyTorch学习—11.权值初始化
  11. 你真的会用ABAP, Java和JavaScript里的constructor么? 1
  12. Ubuntu 10.10 安装新版 Ubuntu One 客户端
  13. 推荐8个很酷很有用的 HTML5 应用程序
  14. react项目案例_教程28——使用 react-rewired 配置基本的环境(项目)
  15. 【C++/Python 双语言实现】Luogu1196 银河英雄传说 + Python函数的定义与调用
  16. velocity语法
  17. 西南科技大学oj题66
  18. 解决Python print 输出文本显示 gbk 编码错误问题
  19. 每日简报 5月2日简报新鲜事 每天一分钟 了解新鲜事
  20. 16G BIDI SFP+光模块知识大全

热门文章

  1. CSDN周赛29题解-订班服、争抢糖豆、走楼梯、打家劫舍
  2. android 傻瓜式 MultiDex 插件,从此再也不用担心方法数问题!
  3. 高速收费员计算机常用知识,(收费员应知应会)车道设备基本维护、维修
  4. 控制阿托斯比例溢流阀放大器
  5. 我的2011—浮夸与踏实
  6. 如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染技术
  7. Java多线程 - 线程安全问题
  8. mq Too many publishes in progress
  9. 高分植物线粒体研究:揭示棉花细胞质雄性不育的花粉败育机制
  10. STM32在线升级 (IAP)