|
小弟用的是MEGA128,PB0口是输出Trig,PB1口是输入Echo,麻烦看下,感觉是 计数器 的问题,就是调不出……
#include<iom128v.h>
#include<macros.h >
#define uchar unsigned char
#define uint unsigned int
#include"1602.h"
uint get_srf04(void);
uchar wz[]={"Distance is:"};
uchar gd[]={" cm "};
void main(void)
{
uint range,distance,range1,range2,range3;
DDRB = 0xfd; // RB0 (trig) is output
PORTB = 0xfe;
DDRA=0xff;
PORTA=0xff;
DDRG=0xff;
PORTG=0xff;
LcdInit();
WriteChar(2,1,12,wz);
WriteChar(1,1,12,gd);
while(1)
{ // loop forever
range = get_srf04(); // get range from srf04 (round trip flight time in 0.5uS units)
distance=range/116;
range1=distance/100;
range2=(distance-range1*100)/100;
range3=distance-range1*100-range2*10;
range1+=0x30;
range2+=0x30;
range3+=0x30;
WriteNum(1,5,(range1));
WriteNum(1,6,(range2));
WriteNum(1,7,(range3));
TCNT1H=0; // 52mS delay - this is so that the SRF04 ranging is not too rapid
TCNT1L=0;
SREG|=BIT(7); // and the previous pulse has faded away before we start the next one
TCCR1B = 0x02;
TIMSK|=BIT(2); // 1:8 prescale and running
TIFR=0; //置零
while(!TIFR); // wait for delay time
TIMSK&=~BIT(2); // stop timer
}
}
uint get_srf04(void)
{
uchar key;
TCNT1H = 0xff; // 产生10um的开始脉冲 prepare timer for 10uS pulse
TCNT1L = 0xEB;
TCCR1B = 0x02;
TIMSK|=BIT(2); // 1:8 prescale and running
TIFR=0; // TOV1
PORTB|=BIT(0); // start trigger pulse
while(!TIFR); // wait 10uS
PORTB&=~BIT(0); // end trigger pulse
TIMSK&=~BIT(2); // stop timer
TCNT1H = 0; // prepare timer to measure echo pulse
TCNT1L = 0;
TCCR1B = 0x02; // 1:8 prescale but not running yet
TIFR=0;
PORTB|=BIT(1);
key=PINB;
key&=0x02; //看返回的高电平长度
while(!key& !TIFR); // wait for echo pulse to start (go high)
TIMSK|=BIT(2); // start timer to measure pulse
while( key& !TIFR); // wait for echo pulse to stop (go low)
TIMSK&=~BIT(2); // stop timer
return (TCNT1H<<8)+TCNT1L; // TMR1H:TMR1L contains flight time of the pulse in 0.8uS units
}
以下是用的 SRF04 资料:
点击此处下载 ourdev_471040.pdf(文件大小:130K) (原文件名:SRF04-tech.pdf) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|