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

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

QQ登錄

只需一步,快速開(kāi)始

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

求助,新手搞了一個(gè)小車程序基本能實(shí)現(xiàn)功能,但有點(diǎn)錯(cuò)誤,希望大神們能幫忙指出來(lái)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:183982 發(fā)表于 2017-4-3 21:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
從網(wǎng)上買了一個(gè)能夠循跡,避障,紅外的小車,自己加入了能夠調(diào)速的程序,本來(lái)能按下按鍵功能能循環(huán)的,加入調(diào)速的程序后就不循環(huán)了。(新人第一次做小車,程序是拿別人的拼出來(lái)的,但感覺(jué)邏輯上沒(méi)什么大問(wèn)題),程序如下,希望大神們能幫忙指出問(wèn)題(第三個(gè)紅外的相關(guān)程序因不需要已經(jīng)刪除)#include <REGX52.H> //包含51單片機(jī)相關(guān)的頭文件
#include <intrins.h>
sbit LeftLed=P2^0;                        //定義前方左側(cè)指示燈端口
sbit RightLed=P0^7;                       //定義前方右側(cè)指示燈端口
sbit FontLled=P1^7;

sbit LeftIR=P3^5;                         //定義前方左側(cè)紅外探頭端口
sbit RightIR=P3^6;                        //定義前方右側(cè)紅外探頭端口
sbit FontIR=P3^7;                         //定義前方正前方紅外探頭端口

sbit M1A=P0^0;                            //定義左側(cè)電機(jī)驅(qū)動(dòng)A端
sbit M1B=P0^1;                            //定義左側(cè)電機(jī)驅(qū)動(dòng)B端

sbit M2A=P0^2;                            //定義右側(cè)電機(jī)驅(qū)動(dòng)A端
sbit M2B=P0^3;                            //定義右側(cè)電機(jī)驅(qū)動(dòng)B端

sbit B1=P0^4;                             //定義語(yǔ)音識(shí)識(shí)別傳感器端口
sbit SB1=P0^6;                            //定義蜂鳴器端口
sbit IRIN=P3^3;                                       //定義紅外接收端口

unsigned char code  LedShowData[]={0x03,0x9F,0x25,0x0D,0x99,  //定義數(shù)碼管顯示數(shù)據(jù)
                                   0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9
unsigned char code  RecvData[]={0x19,0x46,0x15,0x43,0x44,0x40,0x0D,0x0E,0x00,0x0F};
unsigned char IRCOM[7];
static unsigned int LedFlash;                         //定義閃動(dòng)頻率計(jì)數(shù)變量
bit EnableLight=0;                                    //定義指示燈使能位
#define ShowPort P2                                   //定義數(shù)碼管顯示端口
unsigned char temp = 1;
unsigned char timer1;
void tingzhi()
{
   M1A=0;                                   //將M1電機(jī)A端初始化為0
   M1B=0;                                   //將M1電機(jī)B端初始化為0
   M2A=0;                                   //將M2電機(jī)A端初始化為0
   M2B=0;

}

void qianjin()
{
   M1A=1;                                   
   M1B=0;                                   
   M2A=1;                                   
   M2B=0;
}

void houtui()
{
   M1A=0;                                   
   M1B=1;                                   
   M2A=0;                                   
   M2B=1;
}

void zuozhuan()
{
   M1A=0;                                   
   M1B=1;                                   
   M2A=1;                                   
   M2B=0;
}

void youzhuan()
{
   M1A=1;                                   
   M1B=0;                                   
   M2A=0;                                   
   M2B=1;
}

void Delay1ms(unsigned int i)
{
unsigned char j,k;
do{
  j = 10;
  do{
   k = 50;
   do{
    _nop_();
   }while(--k);     
  }while(--j);
}while(--i);

}

void delay_nus(unsigned int i)  //延時(shí):i>=12 ,i的最小延時(shí)單12 us
{
  i=i/10;
  while(--i);
}   
void delay_nms(unsigned int n)  //延時(shí)n ms
{
  n=n+1;
  while(--n)  
  delay_nus(900);         //延時(shí) 1ms,同時(shí)進(jìn)行補(bǔ)償

}  

void delayms(unsigned char x)                         //0.14mS延時(shí)程序
{
  unsigned char i;                                    //定義臨時(shí)變量
  while(x--)                                          //延時(shí)時(shí)間循環(huán)
  {
    for (i = 0; i<13; i++) {}                         //14mS延時(shí)
  }
}

void Delay()                                          //定義延時(shí)子程序
{
  unsigned int DelayTime=30000;                       //定義延時(shí)時(shí)間變量
  while(DelayTime--);                                 //開(kāi)始進(jìn)行延時(shí)循環(huán)
  return;                                             //子程序返回
}
void ControlCar(unsigned char ConType)    //定義電機(jī)控制子程序
{

  tingzhi();
switch(ConType)                          //判斷用戶設(shè)定電機(jī)形式
{
  case 1:  //前進(jìn)                         //判斷用戶是否選擇形式1
  {
    //tingzhi();                                                      //進(jìn)入前進(jìn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
        //Delay1ms(50);
        LeftLed = 0 ;
        qianjin();
    break;
  }
  case 2: //后退                          //判斷用戶是否選擇形式2
  {
   // tingzhi();                                                              //進(jìn)入后退之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
   // Delay1ms(50);
    LeftLed = 1 ;          
        houtui();                                //M2電機(jī)反轉(zhuǎn)
    break;
  }
  case 3: //左轉(zhuǎn)                          //判斷用戶是否選擇形式3
  {
     //tingzhi();                                                                  //進(jìn)入左轉(zhuǎn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
        // Delay1ms(50);
         zuozhuan();                               //M2電機(jī)正轉(zhuǎn)
         break;
  }
  case 4: //右轉(zhuǎn)                          //判斷用戶是否選擇形式4
  {
   // tingzhi();                                                                  //進(jìn)入右轉(zhuǎn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
//        Delay1ms(50);
        youzhuan();                                //M1電機(jī)正轉(zhuǎn)
                                          //M2電機(jī)反轉(zhuǎn)
        break;
  }
  case 8: //停止                          //判斷用戶是否選擇形式8
  {
    tingzhi();
        break;                                //退出當(dāng)前選擇
  }
}
}

void ControlCar_yaokong(unsigned char ConType)    //定義電機(jī)控制子程序        (紅外遙控單獨(dú)設(shè)置一個(gè) switch  case  語(yǔ)句  )
{

  tingzhi();
switch(ConType)                          //判斷用戶設(shè)定電機(jī)形式
{
  case 1:  //前進(jìn)                         //判斷用戶是否選擇形式1
  {
    tingzhi();                                                      //進(jìn)入前進(jìn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
        Delay1ms(150);
        LeftLed = 0 ;
        qianjin();
    break;
  }
  case 2: //后退                          //判斷用戶是否選擇形式2
  {
    tingzhi();                                                              //進(jìn)入后退之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
    Delay1ms(150);
    LeftLed = 1 ;          
        houtui();                                //M2電機(jī)反轉(zhuǎn)
    break;
  }
  case 3: //左轉(zhuǎn)                          //判斷用戶是否選擇形式3
  {
     tingzhi();                                                                  //進(jìn)入左轉(zhuǎn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
         Delay1ms(150);
         zuozhuan();                               //M2電機(jī)正轉(zhuǎn)
         break;
  }
  case 4: //右轉(zhuǎn)                          //判斷用戶是否選擇形式4
  {
     tingzhi();                                                                  //進(jìn)入右轉(zhuǎn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
         Delay1ms(150);
     youzhuan();                                //M1電機(jī)正轉(zhuǎn)  //M2電機(jī)反轉(zhuǎn)
         break;
  }
  case 8: //停止                          //判斷用戶是否選擇形式8
  {
    tingzhi();
        break;                                //退出當(dāng)前選擇
  }
}
}
void Robot_Avoidance()                   //機(jī)器人避障子程序
{

   LeftLed=LeftIR;                        //前方左側(cè)指示燈指示出前方左側(cè)紅外探頭狀態(tài)
   RightLed=RightIR;                      //前方右側(cè)指示燈指示出前方右側(cè)紅外探頭狀態(tài)
   FontLled= FontIR;
   SB1=FontIR;

    if(FontIR == 0)                          //如果前面避障傳感器檢測(cè)到障礙物
   {
      ControlCar(8);                       //停止
      delay_nms (300);                                           //停止300MS   防止電機(jī)反相電壓沖擊  導(dǎo)致系統(tǒng)復(fù)位
          ControlCar(2);                                           //后退  
          delay_nms (1000);                                           //后退1500MS  
          ControlCar(3);                                           //
          delay_nms (1800);       
  }
   else
   {
      ControlCar(1);                      //右側(cè)沒(méi)有信號(hào)時(shí),開(kāi)始向左轉(zhuǎn)一定的角度
      delay_nms (10);
   }
    ControlCar(1);
}
//機(jī)器人循跡子程序
void Robot_Traction()                     //機(jī)器人循跡子程序
{
   LeftLed=LeftIR;                        //前方左側(cè)指示燈指示出前方左側(cè)紅外探頭狀態(tài)
   RightLed=RightIR;                      //前方右側(cè)指示燈指示出前方右側(cè)紅外探頭狀態(tài)
   FontLled= FontIR;
   SB1=LeftIR;
   if(LeftIR == 0 && RightIR == 0)    //三個(gè)紅外檢測(cè)到黑線,就前進(jìn)
   {
      ControlCar(1);                      //左側(cè)沒(méi)有信號(hào)時(shí),開(kāi)始向右轉(zhuǎn)一定的角度
      delay_nms (10);
   }

   else if(LeftIR == 0 && RightIR == 1)
   {
      ControlCar(3);                      //右側(cè)沒(méi)有信號(hào)時(shí),開(kāi)始向左轉(zhuǎn)一定的角度
      delay_nms (10);
   }

   else if(LeftIR == 1 && RightIR == 0)
   {
      ControlCar(4);                      //右側(cè)沒(méi)有信號(hào)時(shí),開(kāi)始向左轉(zhuǎn)一定的角度
      delay_nms (10);
   }
    ControlCar(8);
}
/*******************************************************************************
* 函 數(shù) 名       : Time1
* 函數(shù)功能                 : 定時(shí)器1的中斷函數(shù)
* 輸    入       : 無(wú)
* 輸    出       : 無(wú)
*******************************************************************************/

void Time1Config();
void RobotV1()                     //機(jī)器人循跡子程序
{
   Time1Config();
   while (temp==4)
        {
                if(timer1>100)  //PWM周期為100*0.5ms
                {
                        timer1=0;
                }
                if(timer1 <50)        //改變30這個(gè)值可以改變直流電機(jī)的速度
                {
                        M1A=1;
                        M2A=1;
                }
                else
                {
                        M1A=0;
                        M2A=0;
                }
       
        }
}





/*******************************************************************************
* 函 數(shù) 名       : Time1Config
* 函數(shù)功能                 : 設(shè)置定時(shí)器
* 輸    入       : 無(wú)
* 輸    出       : 無(wú)
*******************************************************************************/

void Time1Config()
{
        TMOD|= 0x10;   //設(shè)置定時(shí)計(jì)數(shù)器工作方式1為定時(shí)器

        //--定時(shí)器賦初始值,12MHZ下定時(shí)0.5ms--//  
        TH1 = 0xFE;
        TL1 = 0x0C;

       
        ET1 = 1;          //開(kāi)啟定時(shí)器1中斷
        EA = 1;
        TR1 = 1;         //開(kāi)啟定時(shí)器       
}

/*******************************************************************************
* 函 數(shù) 名       : Time1
* 函數(shù)功能                 : 定時(shí)器1的中斷函數(shù)
* 輸    入       : 無(wú)
* 輸    出       : 無(wú)
*******************************************************************************/

void Time1(void) interrupt 3    //3 為定時(shí)器1的中斷號(hào)  1 定時(shí)器0的中斷號(hào) 0 外部中斷1 2 外部中斷2  4 串口中斷
{
        TH1 = 0xFE;  //重新賦初值
        TL1 = 0x0C;
        timer1++;   
}

void main()                               //主程序入口
{

  bit RunFlag=0;                          //定義小車運(yùn)行標(biāo)志位
  LedFlash=3000;                                       //對(duì)閃燈數(shù)據(jù)進(jìn)行初始化
  ControlCar(8);
  while(1)                                //程序主循環(huán)
  {
             if(P3_2 == 0)
          {
           delay_nms(10);
           if(P3_2 == 0)
           {
                     temp++;
                  while(!P3_2);
           }
          }
          if(temp > 4)
          {
          temp = 1;
          }
          switch(temp)
          {
                   case 1:        ShowPort = LedShowData[1];Robot_Traction();break;
                case 2: ShowPort = LedShowData[2];Robot_Avoidance();break;
                case 3: ShowPort = LedShowData[3];break;
                case 4: ShowPort = LedShowData[4];RobotV1();break;
          }
  }
  }




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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91极品尤物在线播放国产 | 中文字幕在线视频观看 | 视频精品一区二区三区 | 精品一区二区三区在线视频 | 国产成人免费视频网站高清观看视频 | 欧美一区二区大片 | 日本一卡精品视频免费 | 九九热在线免费视频 | 成人亚洲网站 | 日韩中文字幕在线观看视频 | 久久网国产 | 日韩在线不卡 | 日本精品视频在线观看 | 在线观看av网站永久 | 色约约视频 | 亚洲精品久久区二区三区蜜桃臀 | cao在线| av中文字幕在线观看 | 日韩欧美二区 | 91精品久久| 波多野结衣电影一区 | 成人三级在线观看 | 国产精品日韩欧美一区二区三区 | 欧美激情va永久在线播放 | 91久久| 欧美日韩国产精品一区 | 午夜精品视频在线观看 | 凹凸日日摸日日碰夜夜 | 天天看天天操 | 国产精品欧美一区二区三区不卡 | 国产精品毛片一区二区三区 | www.亚洲一区二区三区 | 成人国产精品久久久 | 99re超碰| 免费一区| 欧美日韩在线免费 | 色综合久久久久 | 欧美激情国产日韩精品一区18 | 国产精品99久久久久久动医院 | 午夜伊人 | 国产一区二区三区视频 |