專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

超聲波測(cè)距模塊+AVR單片機(jī)控制程序

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年11月09日   【字體:
【超聲波測(cè)距模塊】-【機(jī)器人的耳朵】
#include<avr/io.h>
#include<avr/iom16.h>
#include<util/delay.h>
int main(void)
 {
 DDRA=0x00;
 PORTA=0x00;    //PA口初始化
 
 DDRD=0xff;
 PORTD=0xff;    //PD口初始化
 char j,i;
 int h,u,l;
  while(1)
  {
   j=1;     //激活while(j)循環(huán)
   i=1;     //激活while(i)循環(huán)
   u=6000;     //還原檢測(cè)循環(huán)     
   PORTA&=(1<<0);   //PA0腳高電平
   _delay_us(20);   //延時(shí)20US
   PORTA&=~(1<<0);   //PA0腳低電平。發(fā)送20US的高電平脈沖
   while(j)
    {
    if(PINA&(1<<1))  //判斷PA1有無返回高電平
     {
     while(i)
      {
      h=0;    //初始計(jì)數(shù)變量
      _delay_us(10);  //延時(shí)及計(jì)數(shù)
      h=h+10;    //計(jì)數(shù)累加10us
      if(!(PINA&(1<<1))) //判斷PA1口是否跳轉(zhuǎn)到低電平
       {
       i=0;   //至while值為零
       j=0;   //檢測(cè)完成,跳出while(j)
       l=h*3;   //計(jì)算出mm
       if(250>=l)
        {
        PORTD=0b00000001;
        }
       else if(500>=l&&l>=250)
        {
        PORTD=0b00000010;
        }
       else if(750>=l&&l>=500)
        {
        PORTD=0b00000100;
        }
       else if(1000>=l&&l>=750)
        {
        PORTD=0b00001000;
        }
       else if(1250>=l&&l>=1000)
        {
        PORTD=0b00010000;
        }
       else if(1500>=l&&l>=1250)
        {
        PORTD=0b00100000;
        }
       else if(1750>=l&&l>=1500)
        {
        PORTD=0b01000000;
        }
       else if(2000>=l&&l>=1750)
        {
        PORTD=0b10000000;
        }
       else
        {
        PORTD=0b00000000;
        }
       _delay_ms(600);   //檢測(cè)完成,延遲顯示
       }
      }
     
     }
    _delay_us(10);  //當(dāng)PA1未返回高電平開始循環(huán)檢測(cè),間隔10us
    u=u-1;    //循環(huán)程序固定循環(huán)U次
    if(u&0)    //當(dāng)循環(huán)U次后,判斷U是否為0,跳出while(j)
     {
     j=0;
     }
    
    }   
  }
 }
關(guān)閉窗口

相關(guān)文章