基于51单片机的智能小车系统设计

Posted 白茶茶668

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于51单片机的智能小车系统设计相关的知识,希望对你有一定的参考价值。

原理图:

 程序运行图:

部分程序:

/*******************************************************************************

* 文件名称:main.c                         

* 说明:本文件为小车控制的主函数

* 功能:1.看门狗定时器初始化

        2.调用函数,进行小车直流电机的开环控制

*******************************************************************************/

#include  <AT89X52.h>

#include  <kongzhi.h>

/********************************************************

*函数名称:void main()

*函数功能:调用函数

*函数入口:无

*函数出口:无

********************************************************/

void main()

           WDT_CONTR=0x3b;

           timer_init();                  //初始化

           while(1)

        

           keyboard();          //键盘扫描

          // jieshou();            //遥控信号检测,要与传感器实物连接才能正常使用.

           xunji();                  //循迹检测

           bizhang();             //避碍物检测

           stop();                   //目标站点检测

           WDT_CONTR=0x3b;         //喂狗

        

/*******************************************************************************

* 文件名称:kongzhi.c                        

* 说明:本文件为小车控制的c文件

* 功能:1.检测障碍物传感器查询

        2.小车的状态控制

*******************************************************************************/

#include  <AT89X52.h>

#define     kongzhi_GLOBAL 1

#include  <kongzhi.h>

  uchar      PWM_t,PWM_t0;                //PWM_t为脉冲宽度(0~100)时间为0~10ms

  uchar      time_count;                  //定时计数

  uint       number,number1;

  uchar      flag;                //flag为小车状态标志,0:停止,1:前进,2:后退

  uchar      flag2;              //flag2为小车状态恢复寄存区,当小车遇到障碍物停止,等到障碍物排除之后,小车在停止之前的状态就寄存在flag2中

  uchar      flag3;              //flag3为小车避障停止延时标志,初始化为0,等待障碍排除之后赋值为1,开始计时,数秒之后恢复停止前的行进状态

  uchar      flag4;     //--flag4为看门狗复位后状态恢复寄存区

  uchar      kind = 0;         //传感器的种类

/********************************************************

*函数名称:void bizhang()

*函数功能:遇到障碍物时的处理函数

*函数入口:无

*函数出口:无

********************************************************/

void bizhang()

      

                  zhang_ai = 1;

                  if(zhang_ai == 0)

               

                  flag2=flag;

                  flag=0;

                  while(zhang_ai == 0)

                        

                  keyboard();

                  xunji();

                  stop();

                  WDT_CONTR=0x3b;

                 

                  flag3=1;

        

/********************************************************

*函数名称:void stop()

*函数功能:到达目标点的控制函数

*函数入口:无

*函数出口:无

********************************************************/

void stop()

                  stop_1=1;                                    //目标站点1

                  if(stop_1==0)flag=0;

                  stop_2=1;                                    //目标站点2

                  if(stop_2==0)flag=0;        

                  stop_3=1;                                    //目标站点3

                  if(stop_3==0)flag=0;

 

       

/*******************************************************

*函数名称:void timer_init()

*函数功能:定时器初始化设置

*函数入口:无

*函数出口:无

********************************************************/

void timer_init()

                  flag=0;flag3=0;

                  key = 0xFF;

             TMOD = 0x20;                                                     //定时器1为模式2(8位自动重装)

                  TF1 = 0;                                                        //清中断标志

                  TH1 = timer_data;                                     //保证定时时长为0.1ms

                  TL1 = TH1;

                  ET1 = 1;                                                        //允许T0中断

                  TR1 = 1;                                                       //开始计数

                  EA = 1;                                                          //中断允许

                  ENA = 0;                                                       //电机禁止

             PWM_t = PWM_t0;                                           //看门狗复位后速度恢复

             flag = flag4;                                                //看门狗复位后小车状态恢复

/*******************************************************

*函数名称:void IntTime1() interrupt 3 using 2

*函数功能:定时器中断处理,小车行走控制

*函数入口:无

*函数出口:无

********************************************************/

void IntTime1()interrupt 3      using        2

      time_count++;

               if(flag3)number++;

                  if(number==6000)number=0;number1++;

                  if(number1==8)flag3=0;number1=0;flag=flag2;        

               if(flag==0)ENA=0;                             //小车停止,flag=0,小车停止标志

                  if(flag==1)                                                   //小车前进,flag=1,小车前进标志

        

                  ENA=1;                                                         //PWM波输出使能

                  DR=0;                                                           //直流电机一端接低电平

                  DR2=0;                                                         //直流电机一端接低电平

                  if(kind==0)                                                   //没有传感器检测到黑线,走直线

               if(time_count<PWM_t)

                PWM=1;PWM2=1;

                else

                PWM=0;PWM2=0;

                 

                  if(kind==1)                                                   //左边第一个传感器检测到黑线

              

                          if(time_count<(PWM_t-20))

                PWM=1;

                else

                PWM=0;                        

                          if(time_count<PWM_t)

                PWM2=1;

                else

                PWM2=0;

                 

                  if(kind==2)                                                   //左边第二个传感器检测到黑线

              

                          if(time_count<3)

                PWM=1;

                else

                PWM=0;                        

                          if(time_count<PWM_t)

                PWM2=1;

                else

                PWM2=0;

                 

                  if(kind==3)                                                   //右边第一个传感器检测到黑线

              

                          if(time_count<(PWM_t-20))

                PWM2=1;

                else

                PWM2=0;                      

                          if(time_count<PWM_t)

                PWM=1;

                else

                PWM=0;

                 

                  if(kind==4)                                                   //右边第二个传感器检测到黑线

              

                          if(time_count<3)

                PWM2=1;

                else

                PWM2=0;                      

                          if(time_count<PWM_t)

                PWM=1;

                else

                PWM=0;

                 

        

                  if(flag==2)                                                   //小车倒退,flag=2,小车倒退标志

        

                  ENA=1;

                  PWM=0;

                  PWM2=0;

                  if(kind==0)                                                   //没有传感器检测到黑线,走直线

                    if(time_count<PWM_t)

                         DR=1;DR2=1;

                         else

                         DR=0;DR2=0;

                 

                  if(kind==1)                                                   //左边第一个传感器检测到黑线

                   

                          if(time_count<(PWM_t-20))

                 DR=1;

                 else

                 DR=0;                    

                          if(time_count<PWM_t)

                 DR2=1;

                 else

                 DR2=0;

                 

                  if(kind==2)                                                   //左边第二个传感器检测到黑线

                   

             

        

      if(time_count >= PWM_T)                //每输出一个PWM波计数器清一次零,也即PWM波周期长度

       

         time_count=0;

       

资料包括:

需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。

纷传点击用微信打开即可,过程有点繁琐请见谅。

 

以上是关于基于51单片机的智能小车系统设计的主要内容,如果未能解决你的问题,请参考以下文章

基于单片机多功能循迹避障无线遥控蓝牙智能小车-设计资料

基于单片机智能自动循迹小车控制系统设计 毕设课设资料

基于单片机智能睡眠枕系统设计-基于单片机智能自动循迹小车控制系统设计-基于单片机病房温度监测与呼叫系统设计-资料转发分享

毕业设计:基于单片机的超声波智能跟随小车 - 物联网 智能小车 嵌入式单片机 stm32 跟随小车

本人大四(面向嵌入式和单片机的),要做毕设,求建议,以下是题目,本人成绩中下。

基于单片机智能灯光光控照明系统设计基于单片机HX711电子秤自动计价系统设计基于单片机GPRS远程测控系统设计基于单片机多功能循迹避障无线遥控蓝牙智能小车-设计资料