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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機紅外遙控,現(xiàn)在能控制前后左右,尋跡功能有點異常,紅外探頭只能工作一次

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:703117 發(fā)表于 2020-5-17 09:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
紅外探頭只工作一次,就是按剛開始檢測到的黑線來算,然后只能前進或者右轉(zhuǎn)左轉(zhuǎn),電機一直保持這種狀態(tài),不能按照黑線方向來改變運動狀態(tài)
#include "reg52.h"
#include <intrins.h>
sbit IN1=P1^0;  //定義驅(qū)動模塊IN1為P1.0                  左上電機 M2                OUT1 OUT2
sbit IN2=P1^1;        //定義驅(qū)動模塊IN2為P1.1
sbit IN3=P1^2;        //定義驅(qū)動模塊IN3為P1.2                  左下電機 M3                OUT3 OUT4
sbit IN4=P1^3;        //定義驅(qū)動模塊IN4為P1.3
sbit IN5=P1^4;        //定義驅(qū)動模塊IN5為P1.4                  右上電機 M1                OUT5 OUT6
sbit IN6=P1^5;        //定義驅(qū)動模塊IN6為P1.5
sbit IN7=P1^6;        //定義驅(qū)動模塊IN7為P1.6                  右下電機 M4                OUT7 OUT8
sbit IN8=P1^7;        //定義驅(qū)動模塊IN8為P1.7

sbit left_led=P2^5;           //定義左路尋跡為P2.5
sbit middle_led=P2^6;  //定義中路尋跡為P2.6
sbit right_led=P2^7;   //定義右路尋跡為P2.7

#define Left_moto_go      {IN1=1,IN2=0,IN3=1,IN4=0;}    //左邊兩個電機向前走
#define Left_moto_back    {IN1=0,IN2=1,IN3=0,IN4=1;}         //左邊兩個電機向后轉(zhuǎn)
#define Left_moto_Stop    {IN1=0,IN2=0,IN3=0,IN4=0;}    //左邊兩個電機停轉(zhuǎn)                             
#define Right_moto_go     {IN5=1,IN6=0,IN7=1,IN8=0;}        //右邊兩個電機向前走
#define Right_moto_back   {IN5=0,IN6=1,IN7=0,IN8=1;}        //右邊兩個電機向后轉(zhuǎn)
#define Right_moto_Stop   {IN5=0,IN6=0,IN7=0,IN8=0;}        //右邊兩個電機停轉(zhuǎn)

bit Right_moto_stop=1;
bit Left_moto_stop =1;

sbit IRIN=P3^2;//紅外接收器為P3.2

#define        Imax 14000         //晶振位11.0592時的值                          (12÷11.0592)*13≈14ms
#define        Imin 8000        //                                                                                                        8毫秒
#define        Inum1 1450        //
#define        Inum2 700
#define        Inum3 3000


unsigned char f=0;
unsigned char Im[4]={0x00,0x00,0x00,0x00};
unsigned char show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;

//延時函數(shù)        
void delay(unsigned int k)
{   
     unsigned int x,y;
         for(x=0;x<k;x++)
         for(y=0;y<2000;y++);
}
//接收頭解碼
void intersvr0(void) interrupt 1 using 1        //定時器T0
{
    Tc=TH0*256+TL0;    //提取中斷時間間隔時長
    TH0=0;
    TL0=0;              //定時中斷重新置零
if((Tc>Imin)&&(Tc<Imax))
      {
        m=0;
        f=1;
        return;
      }   //找到啟始碼
if(f==1)
      {
        if(Tc>Inum1&&Tc<Inum3)
    {
   Im[m/8]=Im[m/8]>>1|0x80; m++;
       }
      if(Tc>Inum2&&Tc<Inum1)
        {
         Im[m/8]=Im[m/8]>>1; m++; //取碼
  }
  if(m==32)   //接收完32位數(shù)據(jù) 用戶碼/用戶反碼/數(shù)據(jù)碼/數(shù)據(jù)反碼
   {
         m=0;  
         f=0;
         if(Im[2]==~Im[3])
      {
           IrOK=1;                    //拉高紅外接收頭電平
   }
        else IrOK=0;   //取碼完成后判斷讀碼是否正確
     }
               //準備讀下一碼
   }

}


//前進函數(shù)
void  run(void)
{
         Left_moto_go ;    //左電機往前走
         Right_moto_go ;   //右電機往前走
}
//后退函數(shù)
void  backrun(void)
{
        Left_moto_back ;   //左電機往后走
        Right_moto_back ;  //右電機往后走
}
//左轉(zhuǎn)函數(shù)
void  leftrun(void)
{
         Left_moto_Stop ;   //左電機往后走
         Right_moto_go ;    //右電機往前走
}
//右轉(zhuǎn)函數(shù)
void  rightrun(void)
{
         Left_moto_go ;     //左電機往前走
         Right_moto_Stop ;  //右電機往后走
}
//小車停止
     void  stop(void)
{
         Left_moto_Stop ;   //左電機往前走
         Right_moto_Stop ;  //右電機往前走
}
void xunji(void)
{
                if(right_led==1&&middle_led==1&&left_led==1) //三路檢測到黑線
                {
                 run();//前進
                }
                  else
                {
            if(right_led==1&&middle_led==0&&left_led==0) //右邊檢測到黑線
                {
                 rightrun();//右轉(zhuǎn)
                }        
                if(right_led==0&&middle_led==0&&left_led==1) //左邊檢測到黑線
                {
                 leftrun();//左轉(zhuǎn)
                }        
       }
}
//主函數(shù)
void main(void)
{
    m=0;
    f=0;
    IT0=1;
    EX0=1;
    TMOD=0x11;//工作方式3
    TH0=0;
        TL0=0;
    TR0=1;
        EA=1;         //總中斷打開

        delay(100);           

        while(1)                                                        /*無限循環(huán)*/
        {
            if(IrOK==1)          //判斷接收頭是否為1
     {
                   switch(Im[2])
                        {
     case 0x18:  run();                              //前進
             break;
     case 0x52:  backrun();                           //后退
             break;
     case 0x08:  leftrun();                          //左轉(zhuǎn)
             break;
         case 0x5A:  rightrun();                          //右轉(zhuǎn)
             break;
         case 0x1C:  stop();                         //停止
             break;
       case 0x55:xunji        ();                    //尋跡
             break;
         default:break;
                   }

           IrOK=0;
     }
         
                                         
         }
}

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 四虎最新视频 | 国产清纯白嫩初高生在线播放视频 | 日美女逼逼 | 日韩精品成人一区二区三区视频 | 国产综合久久 | 偷拍亚洲色图 | 蜜桃传媒一区二区 | 成人免费看片又大又黄 | 日韩乱码在线 | 亚洲国产一区二区在线 | 狠狠婷婷综合久久久久久妖精 | 国产精品特级毛片一区二区三区 | 欧美一级全黄 | 久久国产日韩欧美 | 免费v片在线观看 | 日韩欧美在线一区 | 一区二区三区精品视频 | 精品一区二区三区四区五区 | 天天干天天干 | 成人影院免费视频 | 免费国产一区二区 | 中文日韩在线视频 | 成人综合一区 | 亚洲一区在线日韩在线深爱 | 亚洲午夜视频在线观看 | 国产激情在线观看视频 | 欧美888| 中文字幕av在线播放 | 婷婷色婷婷 | 羞羞视频在线观免费观看 | 国产精品毛片一区二区在线看 | 69性欧美高清影院 | 自拍偷拍3p | a视频在线观看 | 久久精品亚洲 | 一区二区免费在线视频 | 欧美成人免费在线视频 | 精品视频在线免费观看 | 国产免费让你躁在线视频 | 国产精品国产馆在线真实露脸 | www.youjizz.com日韩 |