这里整理了超声波测距的资料和对应的源代码
附件是我的超声波模块的资料
编译器 ICC AVR
下面是源代码:
#include
#include
#include"Mydelay.h"
#include"LCD12864.h"
//下面是端口声明
#define TRIG_SET PORTC|=(1<<2) ;DDRC|=(1<<2)
#define TRIG_CLR PORTC&=~(1<<2);DDRC|=(1<<2)
#define ECHO_IN PORTD|=BIT(PD0); DDRD&=~BIT(PD0)
unsigned int ultrasonic_time=0;
//全局变量存放距离,这里虽然是写的时间,实际上是时间转换后的距离
unsigned char tem1[]={"the distance is:"};
//发送触发start信号
void sendsignal(void)
{
TRIG_CLR;
delay_nus(1);
TRIG_SET;
delay_nus(15);
TRIG_CLR;
}
void main(void)
{
Init_lcd12864();
LCD128_Clear();
ECHO_IN;
while(1)
//等待ECHO信号响应
TCNT3H = 0x00;
TCNT3L = 0x00; //定时器T3赋初值
TCCR3B = 0x02;
//内部晶振8M,进行8分频,那么最远的测距理论上为65536*0.17
//这个距离已经超出了实际测距,所以定时器T3不会溢出
while(PIND&0x01); //等待ECHO信号响应结束
ultrasonic_time=(unsigned int)TCNT3*0.17;
//根据定时器的值计算距离的公式
TCCR3B = 0x00;//关闭定时器T3
//下面是将数据显示
send_str_16c8s(0,0,tem1);
LCD128_print_int(15,5,ultrasonic_time);
delay_nms(50);
}
}
上面的LCD12864显示文件这里不写出来了,大家自己把数据显示出来就行了。
文章评论(0条评论)
登录后参与讨论