51单片机超声波测距C程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
51单片机超声波测距C程 51单片机超声波测距C程 51单片机超声波测距C程 51 单片机超声波测距 C 程序 (2018-01-26 14:09:10 超声波检测原理 超声波测距的程序流程图 程序如下: 超声波模块程序 // 超声波模块程序 //Trig = P2^0 //Echo = P3^2 #include reg52.h #define uchar unsigned char #define uint unsigned int // void delay(uint z { uint x,y 。 for(x=z 。x0。x-- for(y=110 。y0。y-- 。 } // void delay_20us( { uchar a 。 for(a=0 。a100。a++。 } //*********************************************************** **** 显示数据转 void display(uint temp { uchar ge,shi,bai 。 bai=temp/100 。 shi=(temp%100/10 。 ge=temp%10。 wela=1 。 P0=0xf7 。 wela=0 。 dula=1 。 P0=table[bai] 。 dula=0 。 delay(1 。 dula=1 。 P0=0x00。 // 关位码 dula=0 。 wela=1 。 P0=0xef 。 wela=0 。 dula=1 。 P0=table[shi] 。 dula=0 。 delay(1 。 dula=1 。 P0=0x00。 // 关位码 dula=0 。 dula=1 。 P0=table[ge] 。 dula=0 。 wela=1 。 P0=0xdf 。 wela=0 。 delay(1 。 dula=1 。 P0=0x00。 // 关位码 dula=0 。 } //*********************************************************** **** void main( { uint distance 。 test =0 。 Trig=0 。 // 首先拉低脉冲输入引脚 EA=1。 // 打开总中断 0 TMOD=0x10。 // 定时器 1,16 位工作方式 while(1 { EA=0。 // 关总中断 Trig=1 。 // 超声波输入端 delay_20us( 。 // 延时 20us Trig=0 。 // 产生一个 20us 的脉冲 while(Echo==0 。 // 等待 Echo 回波引脚变高电平 succeed_flag=0 。 // 清测量成功标志 EA=1。 EX0=1。 // 打开外部中断 0 TH1=0。 // 定时器 1 清零 TL1=0 。 // 定时器 1 清零 TF1=0。 // 计数溢出标志 TR1=1。 // 启动定时器 1 delay(20 。 // 等待测量的结果 TR1=0。 // 关闭定时器 1 EX0=0。 // 关闭外部中断 0 if(succeed_flag==1 { time=timeH*256+timeL 。 distance=time*0.172 。 // 厘M display(distance 。 } if(succeed_flag==0 { distance=0 。 没有回波则清零 test = !test 。 // 测试灯变化 } } } //*********************************************************** **** 外部中断 0,用做判断回波电平 void exter( interrupt 0 // 外部中断 0 是 0 号 { timeH =TH1。 // 取出定时器的值 timeL =TL1 。 // 取出定时器的值 succeed_flag=1 。// 至成功测量的标志 EX0=0。 // 关闭外部中断 } //*********************************************************** ***** 定时器 1 中断 , 用做超声波测距计时 void timer1( interrupt 3 // { TH1=0。 TL1=0 。 }

文档评论(0)

137****7230 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档