找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2321|回复: 5
打印 上一主题 下一主题
收起左侧

如何用51单片机来完成超声波测距

[复制链接]
跳转到指定楼层
楼主
ID:193827 发表于 2017-4-26 14:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求各路大神前来指导啊,首先我先来单片机控制超声波测距模块的程序,只要有大神来帮忙能完成的活,肯定少不了你的好处的
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:188933 发表于 2017-4-26 16:30 | 只看该作者
/***********************************************************************************************************/ //HC-SR04 超声波测距模块 DEMO 程序 //晶振:11。0592 //接线:模块模块 TRIG接 P2.0  ECH0 接P2.1  VCC接单片供电正极5V,GND接单片系统板的GND //蜂鸣器接p2.7 /***********************************************************************************************************/               #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_7      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中断用来计数器溢出,超过测距范围   {     flag=1;                                                         //中断溢出标志   } /********************************************************/    void  StartModule()                          //T1中断用来扫描数码管和计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("超声波串口测量系统\n");           //delayms(100);                 while(1)         {                  StartModule();          while(!RX);                //当RX为零时等待          TR0=1;                            //开启计数          while(RX);                        //当RX为1计数并等待          TR0=0;                                //关闭计数      Conut();                        //计算          //delayms(50);                  }  }  
回复

使用道具 举报

板凳
ID:188933 发表于 2017-4-26 16:31 | 只看该作者
复制的时候格式乱了,将就着看吧
回复

使用道具 举报

地板
ID:193827 发表于 2017-4-26 16:44 | 只看该作者
666,我去调试一下,可以的话在联系你
回复

使用道具 举报

5#
ID:193827 发表于 2017-4-26 16:45 | 只看该作者
美猴王HLM 发表于 2017-4-26 16:31
复制的时候格式乱了,将就着看吧

666,我去调试一下,可以的话在联系你
回复

使用道具 举报

6#
ID:185385 发表于 2017-4-26 21:31 | 只看该作者
楼上有回答了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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