微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 超声波测距壁障小车程序问题,求帮助

超声波测距壁障小车程序问题,求帮助

时间:10-02 整理:3721RD 点击:
Lz新手报到,在做一课题设计,超声波测距壁障小车,但程序不会写,网上了一测距程序,测试可以,没什么问题,但不懂加上壁障程序,特此求助,有望大神救命,跪谢!
小车清单:stc89c52单片机,HC-sr04超声波模块,一个4位共阳数码管显示模块,一个L298N模块
下面是超声波测距程序,我想请教大家怎么加上壁障的部分?
上程序:
  /*        *************        超声波测距  数码管显示        ****************        */
/***********************************************************************************************************/
//hc-sr04 超声波测距模块 DEMO 程序
//晶振:11。0592
//接线:模块TRIG接 P0.2  ECH0 接P0.1
//数码管:共阳数码管P0接数据口,P2.5 P2.4 P2.3接选通数码管
/***********************************************************************************************************/            
               
                     #include <AT89x51.H>                //器件配置文件
                         #include <intrins.h>
                         #define  RX  P0_1
                         #define  TX  P0_2
                         

                         unsigned int  time=0;
                         unsigned int  timer=0;
                         unsigned char posit=0;
                         unsigned long S=0;
                         bit      flag =0;
                         unsigned char const discode[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/};
                         unsigned char const positon[3]={ 0xdf,0xef,0xf7};
                         unsigned char disbuff[4]           ={ 0,0,0,0,};
/********************************************************/
    void Display(void)                                 //扫描数码管
        {
         if(posit==0)
         {P0=(discode[disbuff[posit]])&0x7f;}
         else
         {P0=discode[disbuff[posit]];}
          P2=positon[posit];
          if(++posit>=3)
          posit=0;
        }
/******************************************************/
    void Conut(void)
        {
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
       
         S=(time*1.7)/100;     //算出来是CM
         if((S>=700)||flag==1) //超出测量范围显示“-”
         {         
          flag=0;
          disbuff[0]=10;           //“-”
          disbuff[1]=10;           //“-”
          disbuff[2]=10;           //“-”
         }
         else
         {
          disbuff[0]=S%1000/100;
          disbuff[1]=S%1000%100/10;
          disbuff[2]=S%1000%10 %10;
         }
        }
/********************************************************/
     void zd0() interrupt 1                  //T0中断用来计数器溢出,超过测距范围
  {
    flag=1;                                                         //中断溢出标志
  }
/********************************************************/
/********************************************************/
   void  zd3()  interrupt 3                  //T1中断用来扫描数码管和计800MS启动模块
  {
         TH1=0xf8;
         TL1=0x30;
         Display();
         timer++;
         if(timer>=400)
         {
          timer=0;
          TX=1;                                        //800MS  启动一次模块
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          TX=0;
         }
  }
/*********************************************************/
        void  main(  void  )
  {  
    TMOD=0x11;                   //设T0为方式1,GATE=1;
        TH0=0;
        TL0=0;         
        TH1=0xf8;                   //2MS定时
        TL1=0x30;
        ET0=1;             //允许T0中断
        ET1=1;                           //允许T1中断
        TR1=1;                           //开启定时器
        EA=1;                           //开启总中断
        while(1)
        {
         while(!RX);                //当RX为零时等待
         TR0=1;                            //开启计数
         while(RX);                        //当RX为1计数并等待
         TR0=0;                                //关闭计数
     Conut();                        //计算
        }
  }
求帮助

在    void Conut 这个程序里面加上对距离的判断即可,

求大侠指点一二,我试过添加,但调试不出来

同求! 有没有大侠?

帮顶了

免了自己编程的尴尬,自己不怎么会编的

谢谢分享了,先收藏。小编辛苦了

我也挺纠结这个问题!网上下的无法运行!

单片机无底洞,难度很高哦。

问一哈,我现在也在做这个小车,我把程序 加在了 count() 里面判断是否小于5CM,但是程序会一直卡到这,小车就一直都在转弯。 你的能解决吗?

aZAZ'.Z
/?sx'/
sswws

我有调试好的蔽障程序,需要的加578246693

我也在学习做这个  

还没头绪  正在尝试

同求啊啊啊啊啊啊啊啊啊啊

我也要学这了,表示关注

看看,看看

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top