unsigned int chaosheng()
{
unsigned int temp1,temp2;//定义两个无符号整型的变量用于存储距离值
{
unsigned int temp1,temp2;//定义两个无符号整型的变量用于存储距离值
INPUT = 1;
delay(50);//延时
INPUT = 0;
delay(50);//延时
INPUT = 0;
while(!OUTPUT);//当超声波的输出引脚输出高电平时,打开定时器0,开始计时
TMR1ON = 1;
while(OUTPUT);//当超声波的输出引脚输出低电平时,关闭定时器0,停止计时
TMR1ON = 0;
TMR1ON = 1;
while(OUTPUT);//当超声波的输出引脚输出低电平时,关闭定时器0,停止计时
TMR1ON = 0;
//计算超声波测出的距离
temp1 = TMR1L;//将TMR1的低8位赋值给temp1变量
temp2 = TMR1H;//将TMR1的高8位赋值给temp2变量
temp2 = (temp2 << 8) + temp1;//temp2左移8位,加上temp1
temp1 = TMR1L;//将TMR1的低8位赋值给temp1变量
temp2 = TMR1H;//将TMR1的高8位赋值给temp2变量
temp2 = (temp2 << 8) + temp1;//temp2左移8位,加上temp1
TMR1H = 0;//TMR1的高8位清零,为下一次测距做准备
TMR1L = 0;//TMR1的低8位清零,为下一次测距做准备
//距离 = 时间/2 * 速度
//距离:distance;时间:temp2/2单位为μs;速度:340m/s
//这里注意下单位,需要进行换算让最终距离的单位为cm/s
distance = temp2 * 1.7/100;//有一定的误差,可以软件填补误差,根据实测值,在右侧的表达式上加减一误差数值。
return distance;//返回超声波测得的距离值,这里的distance为全局变量,可以在其他程序中用到,例如液晶显示部分,可以作为实参传递给其对应程序,用于显示。
}
最后:很欣赏Google的面试题:用3句话向老太太讲清楚什么是数据库。乔布斯说:“最好的东西就是关注简单”,因为简单的东西比复杂的东西更难做到。
TMR1L = 0;//TMR1的低8位清零,为下一次测距做准备
//距离 = 时间/2 * 速度
//距离:distance;时间:temp2/2单位为μs;速度:340m/s
//这里注意下单位,需要进行换算让最终距离的单位为cm/s
distance = temp2 * 1.7/100;//有一定的误差,可以软件填补误差,根据实测值,在右侧的表达式上加减一误差数值。
return distance;//返回超声波测得的距离值,这里的distance为全局变量,可以在其他程序中用到,例如液晶显示部分,可以作为实参传递给其对应程序,用于显示。
}
最后:很欣赏Google的面试题:用3句话向老太太讲清楚什么是数据库。乔布斯说:“最好的东西就是关注简单”,因为简单的东西比复杂的东西更难做到。