仪器网(yiqi.com)欢迎您!

| 注册 登录
网站首页-资讯-专题- 微头条-话题-产品- 品牌库-搜索-供应商- 展会-招标-采购- 社区-知识-技术-资料库-方案-直播- 视频

问答社区

求51单片机超声波测距代码

6495057 2011-08-20 06:16:46 406  浏览
  •  

参与评论

全部评论(2条)

  • heart3927 2011-08-21 00:00:00
    AVR的有!

    赞(10)

    回复(0)

    评论

  • 巨色啊 2017-12-15 08:43:32
    1602液晶显示 的超声波模块程序 接口程序里边都有、、 #include<reg52.h> //#include<delay.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit lcdrs=P2^3; sbit lcden=P2^2; sbit trig=P2^0; //超声波发送 //sbit echo=P3^2; //超声波接受 //P0____________DB0-DB7 uchar dis[]="Disp_HC-SR04"; uchar num[]="0123456789"; uint distance; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=121;y>0;y--); } void HC_init() { TMOD=0x09; TR0=1; TH0=0;TL0=0; } uint HC_jisuan() { uint dist,timer; timer=TH0; timer<<=8; timer=timer|TL0; dist=timer/53; //晶振11.0592MHz 距离cm=微秒us/58 return dist; //1个机器周期是12个时钟周期 timer*12/(58*11.0592)=timer/53 } void HC_run() { uint tempH=0x00,tempL=0x00; TH0=0;TL0=0; trig=0; trig=1; delay(1); trig=0; while((TH0-tempH!=0||TL0-tempL!=0)||(TH0==0&&TL0==0)) { tempH=TH0; tempL=TL0; } delay(1); } void lcd_write_com(uchar com) //LCD写指令 { lcdrs=0; P0=com; delay(1); lcden=1; delay(1); lcden=0; } void lcd_write_data(uchar date) //LCD写数据 { lcdrs=1; P0=date; delay(1); lcden=1; delay(1); lcden=0; } void lcd_init() //LCD初始化 { lcden=0; lcd_write_com(0x38); lcd_write_com(0x0c); lcd_write_com(0x06); lcd_write_com(0x01); } void lcd_display(uchar temp) { uint i; lcd_write_com(0x82); for(i=0;i<12;i++) { lcd_write_data(dis[i]); } lcd_write_com(0x80+0x41); lcd_write_data('D'); lcd_write_data('i'); lcd_write_data('s'); lcd_write_data('t'); lcd_write_data('a'); lcd_write_data('n'); lcd_write_data('c'); lcd_write_data('e'); lcd_write_data(':'); lcd_write_data(num[temp/100]); lcd_write_data(num[temp/10%10]); lcd_write_data(num[temp%10]); lcd_write_data('c'); lcd_write_data('m'); } void main() { lcd_init(); HC_init(); while(1) { HC_run(); distance=HC_jisuan(); lcd_display(distance); delay(200); } }

    赞(17)

    回复(0)

    评论

获取验证码
我已经阅读并接受《仪器网服务协议》

热门问答

求51单片机超声波测距代码
 
2011-08-20 06:16:46 406 2
51单片机超声波测距模块代码
****************************************************************************************这是代码原文 我想问一下主函数下的while循环里面 为什么等到echo回波回来了 才打开定时器1和外部中断呢 这时候回波已经回来了啊 不是测不出超声波回波的时间了... ****************************************************************************************这是代码原文 我想问一下主函数下的while循环里面 为什么等到echo回波回来了 才打开定时器1和外部中断呢 这时候回波已经回来了啊 不是测不出超声波回波的时间了吗还有就是 为什么在whlie循环前先打开了总中断 然后进入whlie又立刻关闭 再重新打开 那diyi次打开不是很多余吗 麻烦大神解答一下 展开
2018-06-26 20:47:55 482 1
51单片机 HC-SR04超声波测距 我写的C语言代码,请问
/* HC-SR04使用方法:给触发端子trig一个10us以上的高电平即可触发,触发后echo端子将接受到高电平,高电平的持续时间就是测距的往返时间。 下面是我写的代码:我想测试自己使用该模块是否正确,于是就想实现如果echo端接受到了高电平,蜂鸣器BEEP就响。但... /* HC-SR04使用方法:给触发端子trig一个10us以上的高电平即可触发,触发后echo端子将接受到高电平,高电平的持续时间就是测距的往返时间。 下面是我写的代码:我想测试自己使用该模块是否正确,于是就想实现如果echo端接受到了高电平,蜂鸣器BEEP就响。但是实际使用的时候发现并非预期结果,情高人帮忙看看下面的代码有何问题。代码不长,望大神赐教! */ #include #define uchar unsigned char #define uint unsigned int /*位定义*/ sbit CHUFA=P0^1; //位定义超声波触发端(10us以上高电平触发) sbit JIESHOU=P0^3; //接收端(接受高电平) sbit BEEP=P2^0; //蜂鸣器 sbit OUT0=P3^2; //外部中断0 uchar JS_FLAG; //接收标志 uint CF_TIME,t0,t1,shu; /*函数声明*/ void timer0(); void int0(); void display(uint); main(){ CHUFA=0; //初始化拉低触发端和接收端电平 JIESHOU=0; JS_FLAG=0; CF_TIME=15; //初始化触发时间(大于10us) TMOD=0x11; //定时器方式选择 EA=1; //开总中断 ET0=1; //开定时器0中断 EX0=1; //开外部中断0 IT0=0; //外部中断选择下降沿触发 //JIESHOU=1; while(1){ OUT0=JIESHOU; //外部中断0被赋值为接收端信号,当出现下降沿是触发外部中断0 if(JS_FLAG==0){ //如果没有接收到高电平则触发 CHUFA=1; while(CF_TIME--); //10us以上高电平触发传感器 } if(JIESHOU==1){ TR0=1; //如果接收端收到高电平则启动定时器 JS_FLAG=1; //并且标志位置1 BEEP=0; //蜂鸣器响 } display(t1); //显示测量时间(秒) } } /*定时器0中断程序*/ void timer0() interrupt 1{ TH0=(65536-10000)/256; //装初值 10ms TL0=(65536-10000)%256; t0++; //每进入一次中断t0加1 } /*外部中断0中断程序*/ void int0() interrupt 0{ TR0=0; //一旦进入外部中断0,说明接收端收到下降沿信号。关闭定时器0 JS_FLAG=0; //接收标志位置0 BEEP=1; //关闭蜂鸣器 t1=t0*10/1000; //测量时间为 进入定时器中断次数t0乘以每次时间10ms,除以1000化为秒为单位 t0=0; //t0清零 } /*数码管显数函数*/ void display(uint shu){ //数码管显示函数 } 展开
2013-05-11 19:12:16 487 2
51单片机超声波测距用lcd显示
51单片机超声波测距用lcd显示1602显示屏
2018-11-24 01:55:06 310 0
求个51单片机超声波测距(距离+报警)的c程序
求个51单片机超声波测距(距离+报警)的c程序
2017-05-19 03:18:16 371 1
做一个51单片机超声波测距需要哪些器材
 
2017-02-28 00:10:01 377 1
51单片机 超声波测距 控制直流电机正反转
通过超声波传感器测距,当距离大于设定值A时,直流电机反转;当距离等于设定值A时,直流电机停止;当距离小于设定值A时,直流电机正转。具体要求:1)设定值A能够通过键盘设定;2)电机所处的各个状态(正转、反转和停止)及超声波传感器检测的距离值能够在液... 通过超声波传感器测距,当距离大于设定值A时,直流电机反转;当距离等于设定值A时,直流电机停止;当距离小于设定值A时,直流电机正转。具体要求:1)设定值A能够通过键盘设定;2)电机所处的各个状态(正转、反转和停止)及超声波传感器检测的距离值能够在液晶上实时显示。 展开
2015-07-12 14:27:24 716 1
这个51单片机HC-SR04超声波测距程序哪里错了
//晶振11.0592MHz #include #define uchar unsigned char #define uint unsigned int sbit trig=P0^2; sbit echo=P3^3; float dis=0; uint irtime=0; void delay_20us() { uchar bt ; for(bt=0;bt<100;bt++); } void TI... //晶振11.0592MHz #include #define uchar unsigned char #define uint unsigned int sbit trig=P0^2; sbit echo=P3^3; float dis=0; uint irtime=0; void delay_20us() { uchar bt ; for(bt=0;bt<100;bt++); } void TIM1init(void)//定时器1初始化 { TMOD=0x22;//定时器1工作方式2,TH1是重装值,TL1是初值 TH1=0xd2; //重载值 溢出一次约50us TL1=0xd2; //初始化值 ET1=1; //开中断 } void EX1init(void) //外部中断1初始化 { IT1 = 1; //指定外部中断0下降沿触发,INT1 (P3.3) EA = 1; //开总中断 } /*------------------------------------------------ 定时器1中断处理 ------------------------------------------------*/ void tim1_isr (void) interrupt 3 { irtime++; //用于计数2个下降沿之间的时间 } /*------------------------------------------------ 外部中断1中断处理 ------------------------------------------------*/ void EX1_ISR (void) interrupt 2 //外部中断1服务函数 { dis=340*(irtime/2.0)*50/10000; irtime=0; TR1=0; EX1=0; } void test(void) { trig=1; delay_20us(); trig=0; EX1=1; while(!echo); TR1=1; } void main(void) { TIM1init(); EX1init(); while(1) { test(); display(dis); } } 主函数调用test,然后在数码管上显示(显示函数略过),测试的时候,在数码管上显示的距离明显不对,还各种不稳定,有时就个位数上显示一个1或2,不知道怎么回事 展开
2016-01-25 09:17:10 334 2
想学下51单片机的超声波测距,有几个疑问。
想学下51单片机的超声波测距,有几个疑问。 在百度上看到的超声波模块工作原理:单片机供给超声波信号端Trig一个Z少10us长的高电平信号,模块自动发射8个40khz的方波,自动检测到信号是否返回,有信号返回,Echo端输出一个高电平,高电平持续的实践就是超... 想学下51单片机的超声波测距,有几个疑问。 在百度上看到的超声波模块工作原理:单片机供给超声波信号端Trig一个Z少10us长的高电平信号,模块自动发射8个40khz的方波,自动检测到信号是否返回,有信号返回,Echo端输出一个高电平,高电平持续的实践就是超声波从发射到返回的时间。 我的理解是给Trig一个10微秒以上高电平信号,模块会发射超声波,这个时候Echo应该是低电平,等有声波信号返回时Echo会变高电平,声波从发射到返回用了多长时间,Echo的高电平就持续多长时间。不知道理解的对不对? 这里有个疑问,百度了一下发现都是检测Echo收到返回声波后高电平持续时间来计算距离,为什么不检测从模块发射声波到Echo收到返回声波的时间呢?这样不是可以节约一半的时间吗? 还有一个问题,我在学习板上试了一下程序,给Trig一个20微秒的高电平信号,然后等待Echo变高电平开启定时器,但直到定时器溢出Echo一直都是高电平,超声波模块离墙面只有80厘米左右,模块换了2个都是这样。 第三个问题,百度上说计算测量距离等于定时器记录的时间乘以340除以2,但定时器记录的时间单位不是纳秒吗?还要除以一百万才能乘以340吧?这样得到的距离单位是米。 求教各位答疑解惑。 展开
2018-01-19 02:56:05 374 2
用51单片机做超声波测距都需要什么元件?
用51单片机做超声波测距都需要什么元件(探测的距离5到10米左右)?知道的话发到我邮箱里zhanxiage1994@sina.com谢谢了
2012-03-28 03:51:02 272 1
用51单片机实现超声波测距怎样才可以测到4m?
 
2011-08-14 00:36:29 430 4
求US-100(模块)超声波测距的C语言程序,基于51单片机的,3Q哦~
求基于51单片机的US-100超声波测距C语言程序。需要详细点的具体设计程序,O(∩_∩)O~ US-100模块参考资料:http://wenku.baidu.com/view/65e63e35a32d7375a41780ce.html 性能要求:实现2--150cm的测距,测得结果保留4位有效数字(取整数),单位:mm。 哪... 求基于51单片机的US-100超声波测距C语言程序。需要详细点的具体设计程序,O(∩_∩)O~ US-100模块参考资料:http://wenku.baidu.com/view/65e63e35a32d7375a41780ce.html 性能要求:实现2--150cm的测距,测得结果保留4位有效数字(取整数),单位:mm。 哪位大神帮帮忙喽,急啊!!!真心谢谢大神了~ 展开
2017-05-17 15:16:00 512 1
求一段汇编程序,利用51单片机控制超声波传感器测距的程序。
 
2012-04-18 20:35:53 243 2
51单片机接收加速度计传感器数据的代码
速度有加速度和角速度,用51单片机接收并处理数据。求接收数据部分代码
2012-11-23 13:45:28 450 1
求安卓蓝牙测距代码
安卓手机连接蓝牙4.0模块,通过蓝牙信号的强弱状况,来判断蓝牙模块和手机的距离,有没有好心人之前做过这方面,有没有安卓这边的源代码,或者参考资料?O(∩_∩)O~~求求求
2014-04-28 23:41:23 279 2
请问适合51单片机用的50M测距用哪种超声波芯片好
 
2012-10-03 21:03:52 333 2
求一份如图 基于单片机超声波倒车测距的程序
2016-08-01 00:14:58 559 1
用AT89C51单片机做超声波测距
我的是51开发板. 数码管显示部分用段选和位选控制. 要求用C语言,C本人实在是新手,在网上找到很多程序,都只能看个皮毛. 我想控制4位数码管. 显示测距距离, 温度对声速的影响暂时不考虑,刚从网上找到个程序. 烧到板子里, 数码管没反应,求老师指点.谢谢 我的是... 我的是51开发板. 数码管显示部分用段选和位选控制. 要求用C语言,C本人实在是新手,在网上找到很多程序,都只能看个皮毛. 我想控制4位数码管. 显示测距距离, 温度对声速的影响暂时不考虑,刚从网上找到个程序. 烧到板子里, 数码管没反应,求老师指点.谢谢 我的是8位共阴数码管. HS-CR04超声波模块. 求C程序,Z好带多的注释,谢了. 展开
2012-04-09 16:14:45 406 3
超声波测距和单片机的连接
超声波测距四个引脚vcc,gnd,trig,echo和单片机怎么连?直接连到io口就可以了吗?之间需要什么电阻之类的东西吗?谢谢各位好心人了
2013-01-21 23:41:05 450 1
GP2Y0A21YK0F红外测距传感器怎样用怎样接51单片机用51控制它
 
2017-08-06 11:44:06 859 1

9月突出贡献榜

推荐主页

最新话题