<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機智能循跡小車制作

          單片機智能循跡小車制作

          作者: 時間:2016-11-30 來源:網(wǎng)絡 收藏
          電路圖和制作詳情請從這里下載附件:http://www.51hei.com/bbs/dpj-18970-1.html,下面是程序源代碼

          /****
          **********************************
          *程序說明:
          *此ATmega128單片機程序
          *包含功能:
          *1、
          *2、
          *3、
          *4、
          *5、
          **********************************
          *文件:main.c
          *用途:系統(tǒng)主程序
          *注意:系統(tǒng)時鐘8MHZ
          *編譯環(huán)境:Code VisionAVR
          **********************************
          *版本:智能循跡小車v1.0
          *作者:吾ARM1
          *修改時間?012年4月19日
          *完成時間:2012年4月16日
          **********************************/

          本文引用地址:http://www.ex-cimer.com/article/201611/323709.htm

          #include
          #include "delay.h"
          #define left1 PORTC.0
          #define left2 PORTC.1
          #define min PORTC.2
          #define right1 PORTC.3
          #define right2 PORTC.4
          #define Turn_Left PORTC.5
          #define Turn_Right PORTC.6
          #define u8 unsigned char
          #define u16 unsigned int

          void Init_IO(void)
          {
          DDRC = DDRC&0xe0; //將C端口低5位定義為輸入,浮空
          PORTC = 0xe0;//
          DDRB = 0xff; //將B端口設為輸出模式
          PORTB = 0xff;
          PORTA = 0xff;
          DDRA = 0xff;
          }

          void Adjust_Speed(u8 Left_Speed,u8 Right_Speed)
          {
          OCR1A = (u16)Right_Speed*10 ;//Left_Speed:1--100,為右電機占空比
          OCR1B = (u16)Left_Speed*10;//Right_Speed:1--100,為左電機的占空比
          }

          void Init_Timer1(void)
          { u16 i,j;
          i = 300; //實際測試發(fā)現(xiàn)1600時電機速度還是很快的。
          j = 300;
          TCCR1A = 0xa0;//相位與頻率修正PWM,TOP值為ICR1,向上計數(shù)匹配清零,向下計數(shù)匹配時置1
          TCCR1B = 0x12;//系統(tǒng)時鐘8分頻,A,B同時輸出PWM
          OCR1A = i; //右電機
          OCR1B = j; //在電機
          ICR1 = 1000;
          }

          void main(void)
          {
          Init_IO();
          Init_Timer1();
          while(1)
          {
          if(PINC==0xfb)//只有中間循跡管檢測到黑線11011
          {
          Adjust_Speed(90,90);//前進(35,35):一圈循跡時間16.3S (38,38)一圈循跡時間15.5s (40,40)一圈循跡時間16.34s (50,50)15.34s(60,60)14.21s
          PORTA = 0xfe; //(80,80)13.68s
          }

          if(PINC==0xf9)//中間和左邊第二個循跡管檢測到黑線10011
          {
          Adjust_Speed(20,60);//左轉(zhuǎn)
          // delay_ms(5);
          PORTA = 0xfd;
          }

          if(PINC==0xfd)//左邊第二個循跡管檢測到黑線10111
          {
          Adjust_Speed(15,65);//左轉(zhuǎn)
          //delay_ms(5);
          PORTA = 0xfb;
          }

          if(PINC==0xfc)//左邊兩個同時檢測到黑線00111
          {

          Adjust_Speed(10,70);//左轉(zhuǎn)
          PORTA = 0xf7;
          }

          if(PINC==0xfe)//左邊第一個循跡管檢測到黑線01111
          {

          Adjust_Speed(7,85);//左轉(zhuǎn)
          // delay_ms(5);
          PORTA = 0xef;
          }

          if(PINC==0xf3)//中間和右邊第二個循跡管檢測到黑線11001
          {

          Adjust_Speed(35,15);//右轉(zhuǎn)
          PORTA = 0xdf;
          }
          if(PINC==0xf7)//右邊第二個循跡管檢測到黑線11101
          {
          Adjust_Speed(70,13);//右轉(zhuǎn)
          PORTA = 0xbf;
          }
          if(PINC==0xe7)//右邊兩個檢測到黑線11100
          {
          Adjust_Speed(80,10);//右轉(zhuǎn)
          PORTA = 0x7f;
          }
          if(PINC==0xef)//右邊第一個檢測到黑線11110
          {
          Adjust_Speed(100,10);//右轉(zhuǎn)
          PORTA = 0xfc;
          }
          if(PINC==0xe3)//右側(cè)三個循跡管同時檢測到黑線(直角)11000
          {
          Adjust_Speed(40,0);//右轉(zhuǎn)
          PORTA = 0xf8;
          }
          if(PINC==0xe7)//左側(cè)三個循跡管同時檢測到黑線(直角)00011左轉(zhuǎn)
          {
          Adjust_Speed(0,40);//左轉(zhuǎn)
          PORTA = 0xf0;
          }
          if(PINC==0xe0)//5個循跡管同時檢測到交叉00000直走
          {
          Adjust_Speed(25,25);//直走
          PORTA = 0xe0;
          }
          // if(PINC==0xff)
          // {
          // Adjust_Speed(0,100);//直走
          // PORTA = 0xc0;
          //}

          }

          }



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();