基于C的超声波测距程序逐句注释_第1页
基于C的超声波测距程序逐句注释_第2页
基于C的超声波测距程序逐句注释_第3页
基于C的超声波测距程序逐句注释_第4页
基于C的超声波测距程序逐句注释_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/*仲:该程序是可以使用的超声波测距程序,没有使用外部中断, 由于T1中断中使用一点时间,会导致最后的结果 S有误差。 解决方法是把main函数中的while (TX)放在外部中断0中。 另外数码管显示函数在最后可以不使用*/hc-sr04 超声波测距模块DEMO程序/器件配置文件/ 接线:模块 TRIG接 P1.2 ECH0 接 P1.1#include <reg52.H>#include <intrins.h>unsigned int time=0;unsigned int timer=0;unsigned long S=0; /bit flag =0;/sbit

2、dula=P2A6; sbit wela=P2A7;sbit RX=PW1;/用于显示最后计算得到的距离 判断是否溢出用于数码管显示/echosbit TX=P1A2; /trigsbit D5=P1A4;/可以不要。echo高电平时点亮 D5灯unsigned long x; / 用于数码管显示unsigned char code table= / 共阴数码管 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 );void Display(unsigned long num);vo

3、id Delay(unsigned int z);/z=1大概是 1msvoid Conut(void)/计算程序time=TH0*256 TL0; /这是最后算到的时间,往返时间,但应该再乘以/12/11.0593M是一个机器周期!时间应该是time*12/11.0592TH0=0;/定时器0的初始值为0TL0=0;S=(time*1.845)/100;/算出来是 CM/S=(time*1.845)/10; / 算出来是 mm/time*12*170/(11.0592*1000)mm=time*1845/10000 mmif (S>=500)/ 最大距离 5m 即 500cmS=888

4、888;if (flag=1)/判断是否溢出S=888888;flag=0;TH0=0;TL0=0; l*lvoid zd0() interrupt 1/T0中断用来计数器溢出,超过测距范围flag=1;/中断溢出标志/这是最重要的计时0中断,TH0和TL0初始值为01*1void zd3() interrupt 3/T1中断用来扫描数码管和计800MSO动模块/这是计时器1中断TH1=0xf8;/赋初值,应该是2ms?TL1=0x30;timer ;if(timer>=400)timer=0;TX=1;/800MS启动一次模块Delay(30); /一次超声波信号时长30msTX=0;

5、l*lvoid main( void ) (TMOD=0x11;TH0=0;/TL0=0;/TH1=0xf8;TL1=0x30;ET0=1;/ET1=1;TR1=1;EA=1;while(1)/ 设T0为方式1, GATE=1目的都是用中断T0和T1中断0初始化/2MS 定时允许T0中断/ 允许T1中断/开启定时器/开启总中断(while(!RX);/当RX为零时等待,即echo为低电平TR0=1;D5=0;/while(RX);TR0=0;D5=1;/Conut();Display(S); / /开启计数可以不要指示灯/当RX为1计数并等待/关闭计数可以不要指示灯/计算数码管显示void D

6、isplay(unsigned long num) / 定义子函数,用于显示五位数 /调用子函数前,先要在 main函数前面声明位选和段选/*即:sbit dula=P2A6;sbit wela=P2A7; */unsigned int temp; / 用于延迟 for 函数unsigned char shiwanwei,wanwei,qianwei,baiwei,shiwei,gewei;/定义这个六位数的十万位到个位shiwanwei=num/100000;wanwei=num0000/10000;qianwei=num000/1000;baiwei=num00/100;shiwei=nu

7、m0/10;gewei=num;wela=1;P0=0xdf;/1111 1011 /位选个位wela=0;dula=1;P0=tablegewei;dula=0;for(temp=100;temp>0;temp-);if(shiwanwei!=0|wanwei!=0|qianwei!=0|baiwei!=0|shiwei!=0) /判断高位是否都为0,为0的话不显示高位的0 wela=1;P0=0x6f; /1111 0110 /位选十位wela=0;P0=0xff;dula=1;P0=tableshiwei;dula=0;for(temp=50;temp>0;temp-);if

8、(shiwanwei!=0|wanwei!=0|qianwei!=0|baiwei!=0)wela=1;P0=0x77; /1110 1110 /位选百位wela=0;P0=0xff;dula=1;P0=tablebaiwei;dula=0;for(temp=50;temp>0;temp-); if(shiwanwei!=0|wanwei!=0|qianwei!=0)wela=1;P0=0x7b; /1101 1110 /位选千位wela=0;P0=0xff;dula=1;P0=tableqianwei;dula=0;for(temp=50;temp>0;temp-);if(shiwanwei!=0|wanwei!=0)wela=1;P0=0x7d; /1011 1110 /位选万位wela=0;P0=0xff;dula=1;P0=tablewanwei;dula=0;for(temp=50;temp>0;temp-);) if(shiwanwei!=0)wela=1;P0=0x7e; /0111 1110 /位选万位wela=0;P0=0xff;dula=1;P0=tableshiwanwei;dul

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论