找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1572|回复: 1
收起左侧

51单片机超声波避障思路

[复制链接]
ID:376478 发表于 2018-10-17 15:35 | 显示全部楼层 |阅读模式
/*óö¨ê±Æ÷/¼ÆêyÆ÷1¤×÷·½ê½3£¬tl0λ¿ØÖÆpwmÕ¼¿Õ±è£¬óÃth0λ2aá¿3¬éù2¨¸ßμçƽ3ÖDøê±¼ä*/

#include"reg52.h"
#include"us015.h"
sbit PWM=P2^5;
typedef unsigned char u8;
typedef unsigned int u16;
u16 count,Time;
void delay2s(void)   //Îó2î 0us
{
    unsigned char a,b,c,n;
    for(c=167;c>0;c--)
        for(b=39;b>0;b--)
            for(a=152;a>0;a--);
    for(n=1;n>0;n--);
}
void Time3Init(){
      TMOD=0X03;
      TH0=256-200;
      TL0=256-250;
      ET0=1;
      ET1=1;
      EA=1;
      TR0=1;
      TR1=1;
}
void Timemath(){
         delay(500);
         US015main();
        if(distance<=200){
              Time=2;
              delay2s();
              US015main();
                  if(distance<=200){
                   Time=10;
                   delay2s();
                   US015main();
                   if(distance<=200){Time=6;}//oóíË
                   else{Time=6;}//oóÃæ½ó×aÏò¿ØÖÆ
                   return;
              }
              else{Time=6;}  //oóÃæ½ó×aÏò¿ØÖÆ
              return;
            }
            else{Time=6;} //¼ìDøÇ°½ø
        return;
            delay(1000);
}


void main(){
     Time3Init();
     while(1){
         Time=6;
         Timemath();
     }
}  
void Timer2() interrupt 3
{   TL0=256-250;
    count++;
    if(count<=Time){
    PWM=1;
    }   
    else{PWM=0;}
    if(count>=80){
    count=0;
    TL0=256-250;
    }
}   


us015.c
#include"us015.h"
#include"intrins.h"
uint count0,Time0,distance,disp[4];

uchar code smgduan[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uchar tep){          //Ñóê±oˉêy
            while(tep--);
}
void us015_Start(){    //3õê¼»ˉoˉêy
        Trig=0;
        Echo=0;
        Trig=1;      //Ñóê±12us£¬òaÇó′óóú10us
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        Trig=0;
}
void Digdisplay(){
        uchar i;
        disp[0]=smgduan[distance%1000%100%10];         //¸ö
        disp[1]=smgduan[distance%1000%100/10];         //ê®
        disp[2]=smgduan[distance%1000/100];//°ù
        disp[3]=smgduan[(distance/1000)];    //ǧ
        for(i=0;i<4;i++){
        switch(i){
                  case 0:LSA=0,LSB=0,LSC=0;break;
                  case 1:LSA=1,LSB=0,LSC=0;break;
                  case 2:LSA=0,LSB=1,LSC=0;break;
          case 3:LSA=1,LSB=1,LSC=0;break;
        }
        P0=disp[i];
        delay(100);
        P0=0x00;
        }


}
void US015main(){
        uint i,tp;
        TH0=256-200;
        count0=0;
        us015_Start();
        while(!Echo){;}
        TR0=1;
        while(Echo){;}
        TR0=0;
        tp=TH0-56;
        TH0=0;
        Time0=tp+count0*200;
        distance=(long)(Time0*0.171);    //2aá¿μľààë
        for(i=50;i>0;i--){
         Digdisplay();}
}
void Timer3()interrupt 1
{     
     count0++;
     TH0=256-200;
     if(count0>=400){
     TR0=0;         
     count0=0;
     TH0=256-200;
     }
}


us015.h
#ifndef _US015_H_
#define _US015_H_

#include"reg52.h"

#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint
#define uint unsigned int
#endif

sbit Trig=P2^0;
sbit Echo=P2^1;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
void delay(uchar tep);
void us015_Start();
void Digdisplay();
void US015main();
void Timer3();


extern uint distance;

#endif

回复

使用道具 举报

ID:1 发表于 2018-10-17 16:03 | 显示全部楼层
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表