huo_hu 发表于 2014-8-10 22:39
时间差折算成距离就是了
我也是这样,不过还是得不到结果,以下是我的程序,麻烦帮看下有什么问题
#include //包括一个52标准内核的头文件
#include
#include "lcd1602.h" //1602LCD的头文件,这个没问题
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
sbit Trig = P3^3; //产生脉冲引脚
sbit Echo = P3^2; //回波引脚
sbit VCC = P1^1;
sbit GND = P1^0;
uchar count = 0;
uchar time = 0;
uint distance[4]; //测距接收缓冲区
uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定义寄存器
bit succeed_flag; //测量成功标志
//********函数声明
void conversion(uint temp_data);
void delay_20us();
void Init_timer(); //初始化定时器
void main(void) // 主程序
{
uint distance_data;
uint t = DELAY;
delay_20us();
Init_timer();
lcd1602_Init();
Trig=0; //首先拉低脉冲输入引脚
VCC = 1;
GND = 0;
while(1) //程序循环
{
TH0=0x3c; //写入定时器0初始值
TL0=0xb0;
count = 0;
Trig=1;
delay_20us();
Trig=0; //产生一个20us的脉冲,在Trig引脚
while(!Echo); //等待Echo回波引脚变高电平
TR0 = 1;
while(Echo);
TR0 = 0;
outcomeH =TH0; //取出定时器的值
outcomeL =TL0; //取出定时器的值
succeed_flag = 1;
distance_data=outcomeH; //测量结果的高8位
distance_data