超声波检测的程序

上传人:re****.1 文档编号:497768030 上传时间:2022-08-07 格式:DOCX 页数:10 大小:30.26KB
返回 下载 相关 举报
超声波检测的程序_第1页
第1页 / 共10页
超声波检测的程序_第2页
第2页 / 共10页
超声波检测的程序_第3页
第3页 / 共10页
超声波检测的程序_第4页
第4页 / 共10页
超声波检测的程序_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《超声波检测的程序》由会员分享,可在线阅读,更多相关《超声波检测的程序(10页珍藏版)》请在金锄头文库上搜索。

1、本人刚刚接触单片机,不得不从基础学起,由于要完成一个 任务,小车避障,所以我就买了一个超声波模块直接用来测 距测距原理:超声波模块工作原理:(1) 采用IO触发测距,给至少10us的高电平信号;(2) 模块自动发送8个40khz的方波,自动检测是否有信号返 回;(3) 有信号返回,通过IO输出一高电平,高电平持续的时间 就是超声波从发射到返回的时间.测试距离=(高电平时间* 声速(340M/S)/2;然后我就用单片机的P1.3与模块的发射端Trig相连,P3. 3作为外部中断1检测回波信号下降沿产生中断测距,P3.3 与Echo相连。测距后由四位一体的数码管显示并将测得距离 (用厘米表示)发送

2、给PC机。本来一切进行的很顺利,但是出现了一个问题,想了几天 还是不知道怎么回事,希望大家帮忙解决一下,我将不胜感 激。当测距距离显示65cm后,大于65后数码管就重新从0开 始显示,比如实际距离为80CM时,它就显示15CM,不知道 问题所在。急死我了。单片机晶振11.0592Mhz。程序代码:#include #include #include #define LED P0#define uint unsigned int#define uchar unsigned char /#define v 340 sbitNo1=P4;/动态显示控制位sbitNo2=P5;sbitNo3=P6;s

3、bitNo4=P7;sbit t rig二P3;/超声波发射端sbit echo二P33; /超声波接收端/*宏定义,定义数码管显示第几位*/ #defineDIS_NO1No1=0;No2=1;No3=1;No4=1#defineDIS_NO2No1=1;No2=0;No3=1;No4=1#defineDIS_NO3No1=1;No2=1;No3=0;No4=1#define DIS_N04 Nol=l; No2=l; No3=l; No4=0uint t ,distance;uchar i,j,flag;void delay(uint time);void display(uint num

4、);void initial(void);void send_signal(void);void send(uint m);code uchar t able二0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x 82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xal,0x86,0x8e,0xb f,0x7f,0xff;/* */*TRIG端口发一个10US高电平,当TRIG变成0时,超声波模 块开始发射超声波,主控制*/*板就可以在ECHO等待0输出.从TRIG=1到ECH0=0的时间 就为此次测距的时间,可算出距离*/* */void main(void)d

5、elay(50);/去抖动ini tial();/初始化trig=0;delay(50);while(l)send_signal();while(!flag); /等待外部中断或定时器0溢出中断 if(flag=1) /外部中断,测距display(dis tance); /显示距离 send(distance);/发送数据给 PC 机/send(0);else/定时器0溢出中断display(0);send(0);/send(1);delay(lO);/延时TLO=OxOO;/定时器0重新设置值THO=OxOO;flag=0;/测试标志位置0/*延时程序void delay( uint ti

6、me) while(time-); /初始化void initial(void)TMOD = 0x21;/定时器1工作方式2,定时器0工作方式1SCON = 0x50;/ uart 模式 1 (8 bit), REN=1;TL1 = 0xfd;/波特率 9600TH1 = 0xfd;TL0 = 0x00;/初始值;TH0 = 0x00; TR1=1;EA=1;/*x*x*x*x*x*x*x*x*x*x*x* /*产生超声波并计时等待中断*x*x*x*x*x*x*x*x*x*x*x* /* */void send_signal(void)trig=1; for(i=0;i10;i+) _nop_

7、();trig=0;for(j=0;j65;j+) _nop_(); /避免发射波对回波产生干 扰,延时TR0=1;ET0=1;EA=1;EX1=1;IT1=1;/启动定时器1计时/定时器1允许中断 /开总中断/外部中断1开中断/下降沿触发/* */*定时器 0 溢出中断* */* */void timerO(void) interrupt 1TRO=O;EX1=0;ET0=0; flag=2;/* */* 外部中断 1 中断测距* */void test(void) interrupt 2TR0=0;/停止计数ET0=0; /关定时器0中断EX1=0; /关外部中断 EA=0;/关总中断fl

8、ag=1;/测距成功标志t=TH0; /读取测试时间 t=8;t+=TL0;distance=17*t/1000;/声速 340m/s,结果用 cm 表示/* */* 显示* */* */void display( uint num)/ DIS_NO1;/选中第一只灯/ LED=tablenum/1000;/指针指向下一位数据/ delay(50);DIS_NO2;/选中第二只灯LED=tablenum/100; delay(100);DIS_N03;/选中第三只灯LED二table(num%100)/10; delay(lOO);DIS_NO4;/选中第四只灯LED=tablenum%10;

9、delay(lOO);/* */*单片机向 pc 机发送数据* */* */void send(uint m)SBUF=m;whil e(TI=0);TI=0;20110504,19:38:47资料邮件回 复引用回 复 tt 丄_编辑删除广告投诉、提议置酷等【1楼】yuan200 0 积分 派别 等级 来自下载下来看看.17个人爱好:单片机,制作过超声波测距、单片机可编程小模块、手机短信遥控等小 制作。http:/shop60328266. 个人 QQ 空间 http:/ sweet11回复【1楼】yuan2000积分:27派别:等级:来自:广州希望你发现问题了,可以告诉我一下,谢谢了。20

10、11-05-06,13:01:51【3楼】 sweet11积分:27派别:等级:来自:广州2011-05-09,15:22:34问题解决了,将 uint t,distance;改为 unsigned long t,distance;即可,其他 的就再优化一下。继续改进。资料 邮件 回复 引用回复编辑 删除|广告投诉、提议置酷等【4楼】me18923加油,成功了一起分享积分:224派别:等级:来自:广东-深圳2011-05-09,18:32:18【5楼】 sweet11积分:27派别:等级:来自:广州生活无非就是笑笑别人?韦被别人笑笑资料 邮件 回复 引用回复编辑 删除|广告投诉、提议置酷等#include #include #include #define LED P0#define uint unsigned int#define ulong unsigned long#define uchar unsigned charsbit No1 = P4;sbit No2 = P5;sbit No3 = P6;sbit No4 = P7;sbit t rig二P3;sbit echo二P33;/*宏定义,定义数码管显示第几位*/#defineDIS_NO1No1=0;No2=1;No3=1;No4=1#defineDIS_NO2N

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号