超声波
来源:互联网 发布:手机版gps数据采集器 编辑:程序博客网 时间:2024/04/25 09:20
其实超声波贼简单,只是难者不会,会者不难而已。
核心就是先让Trig产生10+us的高电平,然后等待echo的出现高电平,开启定时器进行计数,完了关闭计数。计数对应的时间就是往返的时间。
乘以声速除以2就是距离。
不多说了,看代码一切理解。
#include <stdio.h>#include <reg51.h>#include <intrins.h>sbit echo = P2 ^ 1;//超声波测距的数据返回端口sbit trig = P2 ^ 0;//起始控制端口unsigned char flag = 0;unsigned int time=0;//计数float length;//返回距离unsigned char str[12];extern void InitLcd1602();extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);void LcdFullClear();void FloatToStr(unsigned char *str, float dat){ unsigned int H, L; signed char i = 0; unsigned char buf[12] = {0}; H = (unsigned int)dat; L = dat*100-H*100; do { //先转换为低位在前的十进制数组 buf[i++] = H % 10; H /= 10; } while (H > 0); while (i-- > 0) //将数组值转换为ASCII码反向拷贝到接收指针上 { *str++ = buf[i] + '0'; } *str++ = '.'; *str++ = L/10 + '0'; *str++ = L%10 + '0'; *str = '\0';}void Init()//用于初始化设置定时器和串口波特率{ SCON = 0x50; TH1 = 0xFD; TL1 = 0xFD;//串口设置 TI = 1; TR1 = 1; //开启定时器 TMOD = 0x21; //设T0为方式1 TH0 = 0; TL0 = 0; TR0 = 0;//定时器初始关闭 ET0 = 1; //允许T0中断 EA = 1; //开启总中断}void start_10() //10us+的起始信号{ int i; trig = 1; for (i = 0; i <= 13; i++) { _nop_(); } trig = 0; //重新拉回低电平}void Count(void)//用于将时间换算成长度{ unsigned char str[12]; time = TH0 * 256 + TL0; TH0 = 0; TL0 = 0; length = (time * 1.87)/100; //算出来是CM if(!flag) { //printf("%f\n",length); FloatToStr(str, length); LcdShowStr(2,0, str); } else { flag = 0; //printf("error\n"); LcdShowStr(2,0, "error"); }}void Delay500ms() //@11.0592MHz{ unsigned char i, j, k; i = 22; j = 3; k = 227; do { do { while (--k); } while (--j); } while (--i);}void Scan(){ start_10(); while (!echo); //当RX为零时等待 TR0 = 1; //开启计数 while (echo); //当RX为1计数并等待 TR0 = 0; //关闭计数 Count();//计算出距离 Delay500ms(); LcdFullClear();}void main(){ Init();//定时器初始化 InitLcd1602(); while(1) { Scan(); }}void Timer0() interrupt 1{ flag = 1;}
阅读全文
0 0
- 超声波
- 超声波测距
- 超声波。。。。-原理--
- 超声波模块
- 超声波焊接
- 超声波测距
- 超声波测距
- aduino,超声波
- 超声波模块
- 超声波传感
- 超声波测距仪
- 论超声波捕鱼器
- MC9S12XS128实现超声波测距
- XS128超声波程序
- 超声波测距程序
- US-100超声波 使用
- 关于超声波在线
- schunk超声波焊接设备
- node.js 探索之路(querystring)
- 数据结构排序法之插入法
- hadoop的序列化分析及一个自定义Writable的简单例子
- L V M
- [Leetcode] 15, 81, 4
- 超声波
- Redis的安装及java操作
- python json 解析
- 配置JBOOS到IDEA
- 线程的总结
- Markdown输入空格
- 文件夹备份脚本.bat
- html javascript动态函数
- dedeCMS中的标签"channelartlist” 来获得频道的下级栏目的内容列表