热度 13
2012-2-1 14:44
2135 次阅读|
0 个评论
这里整理了超声波测距的资料和对应的源代码 附件是我的超声波模块的资料 资料.rar 编译器 ICC AVR 下面是源代码: #include #include #include"Mydelay.h" #include"LCD12864.h" //下面是端口声明 #define TRIG_SET PORTC|=(12) ;DDRC|=(12) #define TRIG_CLR PORTC=~(12);DDRC|=(12) #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(PIND0x01); //等待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显示文件这里不写出来了,大家自己把数据显示出来就行了。