標題: 用51單片機怎么實現(xiàn)HC-SR04測距 [打印本頁]

作者: 趙文斌    時間: 2016-6-15 19:00
標題: 用51單片機怎么實現(xiàn)HC-SR04測距

用12864 51單片機  HC-SR04
超聲波測距設計。
要求:
1.      第一排顯示:超聲波測距儀
2.      第二排顯示  超聲波測距儀
3.      第三排顯示:電子科學與技術
4.      第四排顯示:當前距離為:
.同時蜂鳴器的報警聲隨距離縮短而加快(倒車雷達設計)
作者: 美猴王HLM    時間: 2017-4-20 20:10
/***********************************************************************************************************/
//HC-SR04 超聲波測距模塊 DEMO 程序
//晶振:11。0592
//接線:模塊模塊 TRIG接 P2.0  ECH0 接P2.1  VCC接單片供電正極5V,GND接單片系統(tǒng)板的GND
//蜂鳴器接p2.5
/***********************************************************************************************************/         
    #include   <AT89X51.H>
    #include   <intrins.h>
    #include   <STDIO.H>

    #define uchar unsigned  char
    #define uint  unsigned   int  
    #define  RX  P2_1
    #define  TX  P2_0
    #define  buzzer P2_5

    unsigned int  time=0;
    unsigned int  timer=0;
    float         S=0;
    bit           flag =0;
        
/********************************************************/
void delayms(unsigned int ms)
{
        unsigned char i=60,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}
/********************************************************/
    void Conut(void)
        {
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
         S=(time*1.87)/100;     //算出來是CM
         if((S>=42000)||flag==1)                    //超出測量
         {
          flag=0;
          buzzer=1;//printf("S=-----CM\n");
         }
          else
          {
           buzzer=1;
                   //delayms(500);
                   delayms(S);        //printf("S=%fCM\n",S);                       
            buzzer=0;
                   delayms(S);
                   }
         
        }

/********************************************************/
     void zd0() interrupt 1                  //T0中斷用來計數(shù)器溢出,超過測距范圍
  {
    flag=1;                                                         //中斷溢出標志
  }
/********************************************************/
   void  StartModule()                          //T1中斷用來掃描數(shù)碼管和計800MS啟動模塊
  {
          TX=1;                                         //800MS  啟動一次模塊
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();         
         
          TX=0;
  }
/********************************************************/
void main(void)
{  
    TMOD=0x21;                   //設T0為方式1,GATE=1;
        SCON=0x50;
        TH1=0xFD;
        TL1=0xFD;
        TH0=0;
        TL0=0;
        TR0=0;  
        ET0=1;             //允許T0中斷
        TR1=1;                           //開啟定時器
        TI=1;
        EA=1;                           //開啟總中斷
    //delayms(100);               
        //printf("超聲波串口測量系統(tǒng)\n");

        //delayms(100);        
        while(1)
        {        
         StartModule();
         while(!RX);                //當RX為零時等待
         TR0=1;                            //開啟計數(shù)
         while(RX);                        //當RX為1計數(shù)并等待
         TR0=0;                                //關閉計數(shù)
     Conut();                        //計算
         //delayms(50);        

        }

}  

作者: 美猴王HLM    時間: 2017-4-20 20:11
距離越短蜂鳴器頻率越高




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1