51单片机智能小车寻循迹代码

您所在的位置:网站首页 如何抓取公众号封面 51单片机智能小车寻循迹代码

51单片机智能小车寻循迹代码

2024-01-30 16:21| 来源: 网络整理| 查看: 265

小车可以实现循迹(可以过直角,弯路,前进后退等情况以及PWNM调速等)

如想了解接线的请私聊作者

由于小车的情况比较复杂要考虑的东西很多,有时候接线不合适都跑不起来

如果遇到问题请私聊作者

话不多说直接上代码吧:

//以下为代码段 #include"reg51.h" #include "intrins.h" typedef unsigned int u16; typedef unsigned char u8; sbit HIN1=P1^4;// P1.0Êä³öpwm sbit HIN2=P3^0;// P1.1Êä³öpwm sbit HIN3=P1^6;// P1.2Êä³öpwm sbit HIN4=P1^7;// P1.3Êä³öpwm sbit QIN1=P1^0;// P1.4Êä³öpwm sbit QIN2=P1^1;// P1.5Êä³öpwm sbit QIN3=P1^2;// P1.6Êä³öpwm sbit QIN4=P1^3;// P1.7Êä³öpwm sbit IRIN=P3^2; // ºìÍâ¿ÚΪ3.2 ÖжÏ0 sbit k1=P2^0; //Ñ°¼£Ä£¿ék1λ sbit k2=P2^1; //Ñ°¼£Ä£¿ék2λ sbit k3=P2^2; //Ñ°¼£Ä£¿ék3λ sbit k4=P2^4; //Ñ°¼£Ä£¿ék4λ sbit k5=P2^5; //Ñ°¼£Ä£¿ék5λ u8 time,i; u16 count,count2,count3,count4; //pwmÕ¼¿Õ±È£¨ËٶȴóС£© //u8 z=0, x=0; /********»ù±¾ÑÓʱº¯Êý*******/ void delay(int u) { while(u--); } void minrun() { count=30; count2=30; count3=0; count4=0; } void run() { count=35; count2=35; count3=0; count4=0; } void right() { count=0;//ÓÒת count2=40;//zouÕý´« count3=60;//you·´ count4=0; } void Lefet() { count=30; count2=0; count3=0; count4=50; } void back() { count=0; count2=0; count3=50; count4=50; } void stop() { count=0; count2=0; count3=0; count4=0; } void Lefet1() { count=60; count2=0; count3=0; count4=40; } void lefet_1() { count=60;// count2=0; count3=0; count4=40; } void right_1() { count=0; count2=60; count3=40; count4=0; } void lefet_2() { count=65; count2=0; count3=0; count4=40; } void right_2() { count=0; count2=40; count3=60; count4=0; } void xunji() { u8 m; if(k1==1&&k2==1&&k4==1&&k4==1&&k5==1)//ûÓмì²âµ½ºÚÏß {m=0;} if(k1==1&&k2==1&&k3==0&&k4==1&&k5==1)//Öмä¼ì²âµ½ºÚÏß {m=1;} if(k1==1&&k2==0&&k3==1&&k4==1&&k5==1)//΢µ÷ ×ó {m=2;} if(k1==1&&k2==1&&k3==1&&k4==0&&k5==1)//΢µ÷ ÓÒ {m=3;} if(k1==0&&k2==1&&k3==1&&k4==1&&k5==1)// {m=4;} if(k1==1&&k2==1&&k3==1&&k4==1&&k5==0)//´ó·ùÓÒת {m=5;} if(k1==0&&k3==0&&k4==1&&k5==1)//Ö±½Ç ×ó {m=6;} if(k1==1&&k2==1&&k3==0&&k5==0)//Ö±½Ç ÓÒ {m=7;} /* if(k1==0&&k2==0&&k3==1&&k4==1&&k5==1) {m=8;} if(k1==1&&k2==1&&k3==1&&k4==0&&k5==0) {m=9;} if(k1==1&&k2==1&&k3==1&&k4==1&&k5==0) {m=10;} */ switch(m) { //case (0):lefet_2();break; case (1):run();break; case (2):Lefet();delay(200);break;//΢µ÷ case (3):right();delay(200);break;//΢µ÷ //case (4):Lefet1();delay(900);break;//´ó·ù×óת //case (5):right();delay(900);break;//´ó·ù¶ÈÓÒת case (6):lefet_1();delay(900);break;//Ö±½Ç ×óת case (7):right_1();delay(900);break;//Ö±½Ç ÓÒת //case (8):lefet_2();delay(200);break; //case (9):right_2();delay(200);break; //case (10):right_2();delay(900);break; //default :run();delay(500);stop();break; } } /******************* * ¹¦ÄÜ£º´ò¿ªÐèÒªÓõ½µÄÖÐ¶Ï * Óõ½µÄÖжϣº¶¨Ê±Æ÷0¡¢1 ¹¤×÷·½Ê½1 16λ¶¨Ê±Æ÷ģʽ * ÍⲿÖÕ¶Ë0 *********************/ void timer() { TMOD=0x11;//¶¨Ê±Æ÷0¹¤×÷·½Ê½1 TH0=0xff;//(65536-10)/256;//¸³³õÖµ¶¨Ê± TL0=0xf7;//(65536-10)%256;//0.01ms TH1=0; TL1=0; EA=1;//¿ª×ÜÖÐ¶Ï ET0=1;//¿ª¶¨Ê±Æ÷0ÖÐ¶Ï ET1=1; TR0=1;//Æô¶¯¶¨Ê±Æ÷0 IT0=1; EX0=1; IRIN=1; } /*******Ö÷º¯Êý********/ void main() { timer(); //µ÷ÓÃÖжϴò¿ªº¯Êý while(1) { xunji(); //back(); //run(); //Lefet(); //right(); // delay(3000); //xunji(); } } /****¶¨Ê±Æ÷0Òç³öÀûÓÃpwmµ÷4¸öµç»úµÄËÙ¶È***/ void tim0() interrupt 1 { //TR0=0;//¸³³õֵʱ£¬¹Ø±Õ¶¨Ê±Æ÷ TH0=0xff;//(65536-10)/256;//¸³³õÖµ¶¨Ê± TL0=0xf7;//(65536-10)%256;//0.01ms£¬ÒòΪһ¸öÖÜÆÚ1us //TR0=1;//´ò¿ª¶¨Ê±Æ÷ i++; if(i>=100) //1khz i=0; if(i         count=30;       count2=30;       count3=0;       count4=0; }

void run() {   count=35;     count2=35;   count3=0;   count4=0; }

void right() {    count=0;//ÓÒת      count2=40;//zouÕý´«      count3=60;//you·´      count4=0;

}

  void Lefet() {    count=30;      count2=0;      count3=0;      count4=50; }

void back() {   count=0;   count2=0;     count3=50;     count4=50; }

void stop() {   count=0;     count2=0;     count3=0;     count4=0;

}

void Lefet1() {    count=60;      count2=0;      count3=0;      count4=40; }

void lefet_1() {    count=60;//      count2=0;      count3=0;     count4=40;      }

void right_1() {     count=0;       count2=60;       count3=40;       count4=0;

}

void lefet_2() {     count=65;       count2=0;       count3=0;       count4=40; } void right_2() {     count=0;       count2=40;       count3=60;       count4=0;

}    

void xunji() {     u8 m;     if(k1==1&&k2==1&&k4==1&&k4==1&&k5==1)//ûÓмì²âµ½ºÚÏß     {m=0;}          if(k1==1&&k2==1&&k3==0&&k4==1&&k5==1)//Öмä¼ì²âµ½ºÚÏß     {m=1;}          if(k1==1&&k2==0&&k3==1&&k4==1&&k5==1)//΢µ÷  ×ó     {m=2;}     if(k1==1&&k2==1&&k3==1&&k4==0&&k5==1)//΢µ÷  ÓÒ     {m=3;}          if(k1==0&&k2==1&&k3==1&&k4==1&&k5==1)//     {m=4;}     if(k1==1&&k2==1&&k3==1&&k4==1&&k5==0)//´ó·ùÓÒת     {m=5;}          if(k1==0&&k3==0&&k4==1&&k5==1)//Ö±½Ç  ×ó     {m=6;}     if(k1==1&&k2==1&&k3==0&&k5==0)//Ö±½Ç  ÓÒ     {m=7;}                    /*     if(k1==0&&k2==0&&k3==1&&k4==1&&k5==1)     {m=8;}     if(k1==1&&k2==1&&k3==1&&k4==0&&k5==0)     {m=9;}     if(k1==1&&k2==1&&k3==1&&k4==1&&k5==0)     {m=10;}     */                       switch(m)     {         //case (0):lefet_2();break;         case (1):run();break;         case (2):Lefet();delay(200);break;//΢µ÷           case (3):right();delay(200);break;//΢µ÷                  //case (4):Lefet1();delay(900);break;//´ó·ù×óת         //case (5):right();delay(900);break;//´ó·ù¶ÈÓÒת                  case (6):lefet_1();delay(900);break;//Ö±½Ç  ×óת         case (7):right_1();delay(900);break;//Ö±½Ç  ÓÒת                  //case (8):lefet_2();delay(200);break;         //case (9):right_2();delay(200);break;         //case (10):right_2();delay(900);break;                           //default :run();delay(500);stop();break;     }     }

/******************* * ¹¦ÄÜ£º´ò¿ªÐèÒªÓõ½µÄÖÐ¶Ï * Óõ½µÄÖжϣº¶¨Ê±Æ÷0¡¢1 ¹¤×÷·½Ê½1 16λ¶¨Ê±Æ÷ģʽ * ÍⲿÖÕ¶Ë0 *********************/ void timer() {      TMOD=0x11;//¶¨Ê±Æ÷0¹¤×÷·½Ê½1     TH0=0xff;//(65536-10)/256;//¸³³õÖµ¶¨Ê±     TL0=0xf7;//(65536-10)%256;//0.01ms     TH1=0;     TL1=0;     EA=1;//¿ª×ÜÖÐ¶Ï     ET0=1;//¿ª¶¨Ê±Æ÷0ÖÐ¶Ï     ET1=1;     TR0=1;//Æô¶¯¶¨Ê±Æ÷0      IT0=1;   EX0=1;   IRIN=1; }

/*******Ö÷º¯Êý********/ void main() {              timer();   //µ÷ÓÃÖжϴò¿ªº¯Êý

    while(1)     {                    xunji();                                    //back();     //run();          //Lefet();         //right();    // delay(3000);                 //xunji();     } }

/****¶¨Ê±Æ÷0Òç³öÀûÓÃpwmµ÷4¸öµç»úµÄËÙ¶È***/ void tim0() interrupt 1 {     //TR0=0;//¸³³õֵʱ£¬¹Ø±Õ¶¨Ê±Æ÷     TH0=0xff;//(65536-10)/256;//¸³³õÖµ¶¨Ê±     TL0=0xf7;//(65536-10)%256;//0.01ms£¬ÒòΪһ¸öÖÜÆÚ1us     //TR0=1;//´ò¿ª¶¨Ê±Æ÷     i++;     if(i>=100)  //1khz         i=0;               if(i         QIN2=1;            HIN4=1;     }

     if(i         QIN1=1;            HIN3=1;     }          if(i



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3