久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1422|回復: 1
打印 上一主題 下一主題
收起左側

單片機避障小車程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:562725 發表于 2019-6-16 18:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
main.c
#include<reg52.h>
#include<funcation.h>     //多功能頭文件
#include<bizhang.h>          //避障頭文件
#define uint unsigned int
#define uchar unsigned char
uchar flag,tt=0,a;
void delay2();
int i=10;
void main()
       {
              init();
              while(1)
              {
                     if(flag==1)
                     {
                            ES=0;
                            flag=0;
                            switch(a)
                            {
                                   case0x2f:                //后退
                                   back();
                                   break;
                                   case0x1f:             //·前進
                                   go();
                                   break;
                                   case0x3f:                     //左轉
                                   left();
                                   break;
                                   case0x4f:                     //右轉
                                   right();
                                   break;
                                   case0xa0:                    //避障模式
                                   bizhang();
                                   break;
                                   case0xb0:                    //旋轉模式
                                   spin();
                                   break;
                                   case0xc0:                    //走8字模式
                                   bazizou();
                                   case0xd0:                    //跟隨模式
                                   gensui();
                             }
                     ES=1;
                     }

              }
       }
                                          
void ser() interrupt 4
{
       RI=0;
       a=SBUF;
       flag=1;
}


funcation.h
#include<reg52.h>
sbit A0 = P1^0;  
sbit A1 = P1^1;
sbit A2 = P1^2;
sbit A3 = P1^3;
#define uint unsigned int
#define uchar unsigned char
uchar spinstop;
uchar bazizoustop;
//uchar fangi;
//uchar qii;
void delay3()
{
       uinti=20000;
       while(--i);
}      
void init()              //初始化
{
       TMOD=0x21;   
       TH1=0xfd;
       TL1=0xfd;
       TR1=1;
       REN=1;
       SM0=0;
       SM1=1;
       EA=1;
       ES=1;
       EX0=1;
}
void delay()           //延時函數
{
       uinti=2000;
       while(--i);
}      
void go()        
{                                 
                                    A0 = 1;
                                    A1 = 0;
                                    A2 = 1;
                                    A3 = 0;
                                    delay();
                                    P1=0;
                                   
}
void back()
{                  
                                    A0 = 0;
                                    A1 = 1;
                                    A2 = 0;
                                    A3 = 1;
                                     delay();
                                    P1=0;
}
void left()
{                                 
                                    A0 = 0;
                                    A1 = 1;
                                    A2 = 1;
                                    A3 = 0;
                                     delay();
                                    P1=0;                                                     
}
void right()
{               
                                    A0 = 1;
                                    A1 = 0;
                                    A2 = 0;
                                    A3 = 1;
                                     delay();
                                    P1=0;
}
void spin()
{
       while(1){
                                          right();
                                          RI=0;
                                          spinstop=SBUF;
                                          if(spinstop==0xa0)
                                          {
                                                 RI=0;
                                                 break;
                                          }
                                   }
}
void go3()
{                                 
                                    A0 = 1;
                                    A1 = 0;
                                    A2 = 1;
                                    A3 = 0;
                                    delay3();
                                    P1=0;
                                   
}
void left3()
{                                 
                                    A0 = 0;
                                    A1 = 1;
                                    A2 = 1;
                                    A3 = 0;
                                     delay3();
                                    P1=0;                                                     
}
void right3()
{               
                                    A0 = 1;
                                    A1 = 0;
                                    A2 = 0;
                                    A3 = 1;
                                     delay3();
                                    P1=0;
}
void stop3()
{
       P1=0;
       delay3();
}
void bazizou()
{
       while(1){
                                          go3();go3();stop3();
                                          left3();left3();left3();stop3();
                                          go3();go3();go3();go3();stop3();
                                          right3();right3();right3();stop3();
                                          go3();go3();stop3();
                                          right3();right3();stop3();
                                          go3();go3();stop3();
                                          right3();right3();right3();stop3();
                                          go3();go3();go3();go3();stop3();
                                          left3();left3();left3();stop3();
                                          go3();go3();stop3();
                                          left3();left3();left3();stop3();
                                          RI=0;
                                          bazizoustop=SBUF;
                                          if(bazizoustop==0xd0)
                                          {
                                                 RI=0;
                                                 break;
                                          }
                                   }
}




            


bizhang.h
#include<reg52.h>
#include <intrins.h>
sbit trig=P2^4;
sbit Echo=P2^5;
unsigned int duration,distance;  //測距時間,距離
uchar bizhangstop;             //避障模式停止標志
uchar gensuistop;               //跟隨模式停止標志
void delay2()
{
       uinti=20000;
       while(--i);
}      
void trigger()    //超聲波啟動脈沖
{
       trig= 0;
       trig= 1;
       _nop_();_nop_();_nop_();_nop_();
       _nop_();_nop_();_nop_();_nop_();
       _nop_();_nop_();_nop_();_nop_();
       _nop_();_nop_();_nop_();_nop_();
       trig=0;
}

void calc()     //計算距離
{
       duration=TH0*256+TL0;
       duration*=12/11.0592;
       distance=duration*0.017;
       TH0=0;
       TL0=0;
}
void loop()      //啟動脈沖后等待接受時間與計算距離
{
       trigger();
       while(!Echo);
       TR0=1;
       while(Echo);
       TR0=0;
       calc();
}
void setup()
{
       TH0=0;
       TL0=0;
}


void go2()
{                                 
                                    A0 = 1;
                                    A1 = 0;
                                    A2 = 1;
                                    A3 = 0;
                                    delay();
                                    P1=0;
                                   
}
void back2()
{                  
                                    A0 = 0;
                                    A1 = 1;
                                    A2 = 0;
                                    A3 = 1;
                                     delay2();
                                          delay2();  
                                          delay2();
                                          delay2();  
                                    P1=0;
}
void left2()
{                                 
                                    A0 = 0;
                                    A1 = 1;
                                    A2 = 1;
                                    A3 = 0;
                                    delay2();
                                    P1=0;                                                     
}
/*void right2()
{               
                                    A0 = 1;
                                    A1 = 0;
                                    A2 = 0;
                                    A3 = 1;
                                     delay2();
                                    P1=0;
}*/
void stop2()
{                  
                                    P1=0;
                                   delay2();
}


void bizhang()
              {
                     setup();                 
                     while(1)
                                   {
                                          RI=0;
                                          bizhangstop=SBUF;
                                          if(bizhangstop==0xb0)  //停止標志
                                          {
                                                 RI=0;
                                                 break;
                                          }
                                          loop();
                                          if(distance>=25)  //當障礙物距離大于25cm,前進
                                                        go();
                                          if(distance<25)    //當障礙物距離小于25cm,迂回
                                                        {
                                                        stop2();back2();delay2();left2();
                                                               delay2();go2();delay2();
                                                        }
                                   }
              }

void gensui()
{
                     setup();                 
                     while(1)
                                   {
                                          RI=0;
                                          gensuistop=SBUF;
                                          if(gensuistop==0xc0)
                                          {
                                                 RI=0;
                                                 break;
                                          }
                                          loop();
                                          if(distance>=15&&distance<=30)
                                          {go();}else{stop2();}                                    
                                   }
}
            

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2019-6-17 13:00 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久亚洲精品国产精品紫薇 | 99视频久 | 国产精品久久片 | 精品91久久 | 国产精品美女久久久久久免费 | 亚洲品质自拍视频网站 | 一级黄色片在线看 | 精品视频免费 | 久久久蜜桃 | 黄色片视频网站 | 亚洲三区在线观看 | 国产乱码精品一区二区三区忘忧草 | 亚洲欧洲一区二区 | 久久精品一区二区三区四区 | 亚洲欧美日韩中文字幕一区二区三区 | 国产精品精品久久久 | 天天躁日日躁狠狠躁2018小说 | 国产一区二区三区 | 91精品国产乱码久久久 | 欧美一级精品片在线看 | 一区二区成人 | 国产激情福利 | 国产重口老太伦 | 日韩综合网 | 成人在线视 | 国产极品粉嫩美女呻吟在线看人 | 国产精品久久av | 国产黑丝av | 精品国产一区二区三区久久久久久 | 一区二区三区精品在线 | 久久国产精品视频 | 久久中文视频 | www.中文字幕.com | 欧美一级免费观看 | 欧美色综合天天久久综合精品 | 国产视频线观看永久免费 | 欧美黄色大片在线观看 | 精品国产一区二区三区成人影院 | 一区二区三区免费 | 色屁屁在线观看 | 欧美嘿咻 |