找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4198|回复: 4
打印 上一主题 下一主题
收起左侧

求c51小车程序 红外蔽障

[复制链接]
跳转到指定楼层
楼主
ID:109977 发表于 2016-3-21 15:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     求程序
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2016-3-21 15:32 | 只看该作者
基于51单片机的 智能小车 能完成循迹蔽障等功能 主要利用红外对管,单片机输出PWM波完成对小车的控制-
  1. #include<reg52.h>
  2. #include <intrins.h>         //内部包含延时函数 _nop_();
  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. unsigned char dj1=0;
  6. unsigned char dj2=0;
  7. uchar t=0;
  8. uchar i=0;
  9. uchar j=0;
  10. sbit P00=P0^0;          //红外对管位定义
  11. sbit P01=P0^1;
  12. sbit P02=P0^2;                                                                                               
  13. sbit P03=P0^3;
  14. sbit P04=P0^4;
  15. sbit P05=P0^5;

  16. sbit ENA=P1^0;          //PWM输入
  17. sbit ENB=P1^1;

  18. sbit IN5=P1^2;          //电机
  19. sbit IN6=P1^3;
  20. sbit IN7=P1^4;
  21. sbit IN8=P1^5;
  22. void delay(uint x) //延时X毫秒
  23. {
  24.    uint y,z;
  25.    for(z=x;z>0;z--)
  26.       for(y=110;y>0;y--);
  27. }
  28. void qianjin()    //小车前进
  29. {
  30.         IN5=1;
  31.         IN6=0;
  32.         IN7=1;
  33.         IN8=0;
  34.         dj1=10;
  35.         dj2=10;
  36. }
  37. void qianjin1()    //小车前进
  38. {
  39.         IN5=1;
  40.         IN6=0;
  41.         IN7=1;
  42.         IN8=0;
  43.         dj1=6;
  44.         dj2=6;
  45. }

  46. void stop()       //停止
  47. {
  48.     IN5=0;
  49.         IN6=0;
  50.         IN7=0;
  51.         IN8=0;
  52.         dj1=0;
  53.         dj2=0;
  54. }
  55. void zuozhuan()          //左转
  56. {
  57.         IN5=0;
  58.         IN6=1;
  59.         IN7=1;
  60.         IN8=0;
  61.         dj1=9;
  62.         dj2=26;
  63. }
  64. void youzhuan()          //右转
  65. {
  66.         IN5=1;
  67.         IN6=0;
  68.         IN7=0;
  69.         IN8=1;
  70.         dj1=27;
  71.         dj2=8;
  72. }

  73. void youzhuan1()          //右转
  74. {
  75.         IN5=1;
  76.         IN6=0;
  77.         IN7=0;
  78.         IN8=1;
  79.         dj1=28;
  80.         dj2=9;
  81. }

  82. void init()                 //初始化
  83. {
  84.         TMOD=0x01;
  85.         TH0=(65536-250)/256;
  86.         TL0=(65536-250)%256;
  87.         EA=1;
  88.         ET0=1;
  89.         TR0=1;
  90. }
  91. void timer0() interrupt 1 using 1                //定时器0中断
  92. {
  93.         TH0=(65536-250)/256;
  94.         TL0=(65536-250)%256;
  95.         t++;
  96.         if(t<dj1)       
  97.     ENA=1;
  98.         else       
  99.     ENA=0;
  100.         if(t<dj2)
  101.         ENB=1;
  102.         else       
  103.     ENB=0;
  104.         if(t>=50)
  105.         {
  106.                 t=0;
  107.         }
  108. }
  109. void main()
  110. {
  111.         init();
  112.     while(1)
  113.     {
  114.             if((P00==0)&&(P01==0)&&(P00==0)&&(P01==0))
  115.                        {qianjin();}
  116.                 if(P00!=0)
  117.                         {zuozhuan();}
  118.                 if(P01!=0)
  119.                         {youzhuan();}
  120.                 if(P03!=0)
  121.                         {youzhuan();}
  122.                 if((P01!=0)&&(P03!=0))
  123.                     {youzhuan();}
  124.                 if(P05!=0)
  125.                         {youzhuan1();}
  126.                 if((P05!=0)&&(P03!=0))
  127.                     {youzhuan();}
  128.                 if((P05!=0)&&(P03!=0)&&(P01!=0))
  129.                     {youzhuan();}
  130.                 if((P02!=0)&&(i==0))
  131.                     {  
  132.                             stop();
  133.                             delay(1000);
  134.                             qianjin();
  135.                                 delay(900);
  136.                                   stop();
  137.                                   delay(800);
  138.                                   youzhuan();
  139.                                   delay(390);
  140.                       qianjin();
  141.                                   delay(300);
  142.                                   stop();
  143.                                   delay(1000);
  144.                                   zuozhuan();
  145.                                   delay(430);
  146.                                   stop();
  147.                                   delay(1000);
  148.                                   i++;
  149.                                   while((P04!=0)&&(j==0))
  150.                               {
  151.                                    stop();
  152.                                    if((P04==0)&&(j==0))
  153.                                {j=1;}       
  154.                               }
  155.                                 qianjin1();
  156.                                 delay(100);
  157.                         }
  158.                 }
  159. }
  160.                                     
复制代码
回复

使用道具 举报

板凳
ID:109977 发表于 2016-3-22 13:19 | 只看该作者
admin 发表于 2016-3-21 15:32
基于51单片机的 智能小车 能完成循迹蔽障等功能 主要利用红外对管,单片机输出PWM波完成对小车的控制-

这是小车的原理图C:\Users\samsung\Desktop
回复

使用道具 举报

地板
ID:110154 发表于 2016-3-22 13:39 | 只看该作者
//鄙视下载要财富值的人
#include<reg51.h>
#define middle_point 1540



sbit S1=P0^0;
sbit S2=P0^1;
sbit S3=P0^2;

sbit E_L=P2^0;
sbit E_R=P2^1;
void delay_nus(unsigned int i)  //延时:i>=12 ,i的最小延时单位12 us   单位是US
{
  i= i*7/9;
  while(--i);
}   

void delay_nms(unsigned int n)  //延时n ms
{
  n=n+1;
  while(--n)  
  delay_nus(970);         //延时 1ms,同时进行补偿
}  

void delay_s(int t)
{
   int i,j;
   for(i=0;i<125;i++)
      for(j=0;j<t;j++);
}

void LowForward(void)//?ò?°DD×?×ó3ìDò
{
   E_L=1;
   delay_nus(middle_point+20);
   E_L=0;
   E_R=1;
   delay_nus(middle_point-20);
   E_R=0;
   delay_nms(20);

//         delay_s(50);
}


void Only_Left(void)//×ó×a×ó3ìDò
{
          E_L=1;
          delay_nus(middle_point-100);  // ×ó
          E_L=0;

          E_R=1;
          delay_nus(middle_point-100);  //         ?ì
   // delay_nus(middle_point-30);           //?y
        E_R=0;
          delay_nms(20);
}

void Only_Right(void)//óò×a×ó3ìDò
{
          E_L=1;
          delay_nus(middle_point+10);        //?ì
//        delay_nus(middle_point+30);           //?y
          E_L=0;
          E_R=1;
          delay_nus(middle_point+100);
          E_R=0;
          delay_nms(20);
}

void Turn_Around(void)//?3ê±??×?×a×ó3ìDò
{
          E_L=1;
          delay_nus(1640);  //?3ê±??
          E_L=0;

          E_R=1;
          delay_nus(1640);
        E_R=0;
          delay_nms(20);
}
void Turn_Around_left(void)//??ê±??×?×a×ó3ìDò
{
          E_L=1;
          delay_nus(1510);  //?3ê±??
          E_L=0;

          E_R=1;
          delay_nus(1510);
        E_R=0;
          delay_nms(20);
}


void Stop_Run(void)        //D?3μ ?Yí£
{
   E_L=0;
   delay_nus(middle_point);
   E_L=0;

   E_R=0;
   delay_nus(middle_point);
   E_R=0;
   delay_nms(20);
}


//1是无反射,灯灭。
void main(void)
{
   unsigned int z=0;
        while(1)
        {

                if(S1==1&&S2==0&&S3==0)
                             Only_Right();

                if(S1==0&&S2==1&&S3==0)
                LowForward();
                if(S1==0&&S2==0&&S3==0)
                LowForward();

                if(S1==0&&S2==0&&S3==1)
                          Only_Left();

        }
}
采用对射式红外传感器!!!!!
回复

使用道具 举报

5#
ID:109977 发表于 2016-3-22 13:40 | 只看该作者
admin 发表于 2016-3-21 15:32
基于51单片机的 智能小车 能完成循迹蔽障等功能 主要利用红外对管,单片机输出PWM波完成对小车的控制-

[img][/img]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表