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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3464|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

想在避障模塊多完善一些 就是讓小車停止一會(huì)兒然后向后轉(zhuǎn)再向左轉(zhuǎn),怎么改寫比較好?

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 50 黑幣 回復(fù)本帖可獲得 5 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:229453 發(fā)表于 2017-9-2 23:35 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include <reg52.h>
#include " LCD1602.h "
sbit zuo = P1^0;
sbit you = P1^1;
sbit zhong = P1^2;
sbit IN1 = P2^1;           //P2.0到P2.3是電機(jī)驅(qū)動(dòng)輸出控制端
sbit IN2 = P2^2;
sbit IN3 = P2^3;
sbit IN4 = P2^4;
sbit Trig = P2^0;      //產(chǎn)生脈沖引腳
sbit Echo = P3^3;      //回波引腳
uint distance[4];      //測(cè)距接收緩沖區(qū)
unsigned char code ASCII[16]  = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
unsigned char disbuff[4]= { 0,0,0,0,};
uint distance1;
bit succeed_flag;      //測(cè)量成功標(biāo)志

void chaoshengbo();
void delay_20us();
void delay_ms(uint x);
void delay(uint t);
void Tracking();
void shunback();
//延時(shí)程序1
void delay(uint t)     
{
        uchar j;
    while(t--)
        {for(j=5;j>0;j--);}
}
//微妙延時(shí)程序
void delay_us(uint x)          
{
do {
     x--;
   }

while(x>1);
}
//毫秒延時(shí)
void delay_ms(uint x)
{
        while(x!=0)
        {
                delay_us(500);
                x--;
        }

}
//20微妙延時(shí)
void delay_20us()
{  
        uchar bt ;
    for(bt=0;bt<100;bt++);
}
void Init()                          
{

    Trig=0;
        TMOD = 0x11;        //T/C1采用16位定時(shí)器/計(jì)數(shù)器
        ET1  = 1;                //定時(shí)器1開中斷
    ET0  = 1;
        TH0 = 0x00;
    TL0 = 0x00;
        TH1 = 0xff;
    TL1 = 0xce;
        TR1=1;
    TR0        = 1;                //定時(shí)計(jì)數(shù)器啟動(dòng)計(jì)數(shù)
        EX0         = 1;                //外部中斷0關(guān)中斷
        PT1  = 1;
        EA         = 1;                //CPU開中斷
}
//超聲波測(cè)距
void chaoshengbo()
{           
        uint distance_data,S;
        Trig=1;
    delay_20us();
    Trig=0;         //產(chǎn)生一個(gè)20us的脈沖,在Trig引腳  

    while(!Echo);   //等待Echo回波引腳變高電平                  
    TR0=1;          //啟動(dòng)定時(shí)器1
        while(Echo);
        TR0=0;
       
        delay_ms(7);
        distance_data=TH0*256+TL0;
        TH0=0;
        TL0=0;
        S=(distance_data*1.7)/100;

        if(succeed_flag==1)
        {        
                distance1=S;
    }
                 
        disbuff[0]=((S/100)%10);
          disbuff[1]=((S/10)%10);
          disbuff[2]=(S%10);
          DisplayOneChar(9, 0, ASCII[disbuff[0]]);
          DisplayOneChar(10, 0, ASCII[10]);               //顯示點(diǎn)
          DisplayOneChar(11, 0, ASCII[disbuff[1]]);
          DisplayOneChar(12, 0, ASCII[disbuff[2]]);
          DisplayOneChar(13, 0, ASCII[12]);               //顯示M

}
//左轉(zhuǎn)
void comeleft()
{
        IN1=0;
        IN2=1;
        IN3=1;
        IN4=1;
}
//右轉(zhuǎn)
void comeright ()
{
        IN1=1;
        IN2=1;
        IN3=1;
        IN4=0;
}
//前進(jìn)加速;
void comeon()
{         
        IN1=0;
        IN2=1;
        IN3=0;
        IN4=1;
}
void stop()                  
{       
                   IN1=0;
                IN2=0;
                IN3=0;
                IN4=0;
}
void backward()
{
                IN1=1;
                IN2=0;
                IN3=1;
                IN4=0;
}
//紅外尋跡
void Tracking()                  
{       
     if(zuo==1&&zhong==1&&you==1)   //0是接受到黑線,1是白線
     {
                comeon();
         }
         else if(zuo==1&&zhong==0&&you==1)
         {
              comeon();
         }

         else if(zuo==0&&zhong==1&&you==1)
         {
                  comeleft();

         }
         else if(zuo==0&&zhong==0&&you==1)
         {
              comeleft();
         }
         else if(zuo==1&&zhong==1&&you==0)
         {
             comeright();
         }
         else if(zuo==1&&zhong==0&&you==0)
         {
             comeright();
         }
                  else
         {
                stop();
        }   
}
//避障
void shunback()
{       
        chaoshengbo();
        delay_ms(50);
    Tracking();// 避障運(yùn)行
        if(distance1<8)                //當(dāng)超聲波測(cè)距距離小于8則
        {
                stop();                        //小車停止運(yùn)動(dòng)
                delay_ms(50);
//                backward();
//                delay_ms(100);
//                comeleft();
//                delay_ms(60);
                 TR1=1;
                 delay_ms(50);
                 TR1=0;
        }
        else
        {

            Tracking();       
          
        }     //否則小車直走
}


//主函數(shù)
void main(void)
{

    Init();                   //初始化
        LCMInit();             //LCM初始化
        TMOD=0x01;
        TH0=0;          //定時(shí)器1清零
    TL0=0;          //定時(shí)器1清零
        ET0=1;                        //打開外部中斷
        EA=1;
        succeed_flag=0; //清測(cè)量成功標(biāo)志        
       
        while(1)
        {
        displayfun();
        chaoshengbo();
        shunback();                  //循環(huán)調(diào)用超聲波測(cè)距
        Tracking();
}
}

//外部中斷0,用做判斷回波電平
INTO_()  interrupt 0  // 外部中斷是0號(hào)
{   
    succeed_flag=1;   //至成功測(cè)量的標(biāo)志
}







#ifndef __lcd1602__
#define __lcd1602__
//定義引腳
sbit LCM_RS = P2^6;
sbit LCM_RW = P2^5;     
sbit LCM_E  = P2^7;
//數(shù)據(jù)口定義
#define LCM_Data P0
sbit BF=LCM_Data^7;                //忙信號(hào)線
//數(shù)組變量
unsigned char code  yuyiny[18]={
        0x00,0x10,0x18,0x20,0x28,0x30,0x38,0x40,
        0x48,0x50,0x58,0x60,0x68,0x70,0x78,0x80,0x88,0x98};
unsigned char inittime[7]={0x00,0x00,0x12,0x03,0x04,0x06,0x10};         //初始化時(shí)間

//變量
#define uchar unsigned char
#define uint  unsigned int                

/********************************************************************
函 數(shù) 名:unsigned char ReadStatusLCM(void)
功    能:忙檢測(cè)
說    明:
入口參數(shù):無
返 回 值:無  
***********************************************************************/
unsigned char ReadStatusLCM(void)
{
        bit busy =0;
        LCM_Data = 0xFF;
        LCM_RS   = 0;
        LCM_RW   = 1;
        LCM_E    = 1;
        LCM_E    = 1;
        busy     = BF;
        LCM_E    = 0;
        return(busy);
}

/********************************************************************
函 數(shù) 名:void WriteCommandLCM(unsigned char WCLCM,BuysC)
功    能:寫命令
說    明:
入口參數(shù):WCLCM
                   BuysC 需要忙檢測(cè)
返 回 值:無  
***********************************************************************/
void WriteCommandLCM(unsigned char WCLCM,BuysC)  //BuysC為0時(shí)忽略忙檢測(cè)
{
        if (BuysC) ReadStatusLCM();                  //根據(jù)需要檢測(cè)忙

        while (ReadStatusLCM());
        LCM_RS = 0;
        LCM_RW = 0;
        LCM_Data = WCLCM;
        LCM_E = 1;
        LCM_E = 0;
}

/********************************************************************
函 數(shù) 名:void WriteDataLCM(unsigned char WDLCM
功    能:寫數(shù)據(jù)
說    明:
入口參數(shù):WDLCM
返 回 值:無  
***********************************************************************/
void WriteDataLCM(unsigned char WDLCM)
{
        while(ReadStatusLCM());                      //檢測(cè)忙
        LCM_RS = 1;
        LCM_RW = 0;
        LCM_Data = WDLCM;
        LCM_E = 1;
        LCM_E = 0;
}
/********************************************************************
函 數(shù) 名:void LCMInit(void)
功    能:LCM初始化
說    明:
入口參數(shù):無
返 回 值:無  
***********************************************************************/
void LCMInit(void)
{
        WriteCommandLCM(0x38,1);                     //顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào)
        WriteCommandLCM(0x0C,1);                     //顯示開及光標(biāo)設(shè)置
        WriteCommandLCM(0x06,1);                     //顯示光標(biāo)移動(dòng)設(shè)置
        WriteCommandLCM(0x01,1);                     //顯示清屏
}

/********************************************************************
函 數(shù) 名:void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
功    能:按指定位置顯示一個(gè)字符
說    明:
入口參數(shù):X 一行顯示個(gè)數(shù)限制
           Y 上下行限制
                   DData 數(shù)據(jù)
返 回 值:無  
***********************************************************************/
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
        Y &= 0x1;
        X &= 0xF;                         //限制X不能大于15,Y不能大于1
        if (Y) X |= 0x40;                 //當(dāng)要顯示第二行時(shí)地址碼 0x40;
        X |= 0x80;                        // 算出指令碼
        WriteCommandLCM(X, 0);            //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
        WriteDataLCM(DData);
}

/********************************************************************
函 數(shù) 名:void displayfun(void)
功    能:界面顯示
說    明:
入口參數(shù):無
返 回 值:無  
***********************************************************************/
void displayfun(void)
{
        WriteCommandLCM(0x0c,1);                                    //顯示屏打開,光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)

        /*顯示 鬧鐘 設(shè)置*/   
        DisplayOneChar(0,0,'D');
        DisplayOneChar(1,0,'i');
        DisplayOneChar(2,0,'s');
        DisplayOneChar(3,0,'t');
        DisplayOneChar(4,0,'a');
        DisplayOneChar(5,0,'n');
        DisplayOneChar(6,0,'c');
        DisplayOneChar(7,0,'e');
        DisplayOneChar(8,0,':');
       
}


#endif





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

使用道具 舉報(bào)

沙發(fā)
ID:198530 發(fā)表于 2017-9-3 11:16 | 只看該作者
可以判斷超聲波距離小于一定大小時(shí)小車停止延時(shí)一定時(shí)間在執(zhí)行其他操作
回復(fù)

使用道具 舉報(bào)

板凳
ID:229453 發(fā)表于 2017-9-3 13:14 | 只看該作者
king_zxt 發(fā)表于 2017-9-3 11:16
可以判斷超聲波距離小于一定大小時(shí)小車停止延時(shí)一定時(shí)間在執(zhí)行其他操作

我也是這樣想的不過當(dāng)我在避障模塊加入其它指令,實(shí)測(cè)小車就一直執(zhí)行我加的命令,比如先停止,然后后退最后左轉(zhuǎn),就一直這樣循環(huán)執(zhí)行,超聲波測(cè)的顯示的數(shù)據(jù)變化不準(zhǔn),如果不加直stop,就會(huì)執(zhí)行尋跡指令...
回復(fù)

使用道具 舉報(bào)

地板
ID:219796 發(fā)表于 2017-9-6 01:43 來自手機(jī) | 只看該作者
轉(zhuǎn)彎前加個(gè)延遲
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人午夜视频在线观看 | 九九99久久 | 成年人的视频免费观看 | 日本不卡免费新一二三区 | 日韩成人免费 | 日本三级电影在线观看视频 | 国产成人精品午夜 | 91视频免费视频 | 国产精品欧美一区二区三区不卡 | 免费毛片www com cn | 午夜亚洲 | 99久久国产综合精品麻豆 | 波多野结衣二区 | 亚洲综合无码一区二区 | 日韩综合在线 | 国产精品久久国产精品 | 一区二区三区成人 | 国产主播第一页 | 国产福利在线 | 天天久久 | 日本一区二区三区精品视频 | 日日夜夜免费精品 | 国产精品一区二区欧美黑人喷潮水 | 天天干天天操天天爽 | 成人精品国产一区二区4080 | 国产精品久久久久久52avav | 国产成人黄色 | www.日本在线播放 | 亚欧精品 | 亚洲最大的成人网 | 精品久久香蕉国产线看观看亚洲 | 国产在线播放av | 日本不卡一区二区三区在线观看 | 一区二区三区视频在线 | 国产男女精品 | 国产激情在线看 | 久久久观看 | 久久精品网 | 精品久久电影 | 国产欧美一区二区三区日本久久久 | 日本高清aⅴ毛片免费 |