谁知道DYP-ME007怎么使用,用AVR128
单片机控制,进行避障没有任何效果,下面是用来测试流水灯的程序,大神们帮忙改正一下,多谢!!!!!!
#include<iom128v.h>
#include<macros.h>
#define uint unsigned int
#define uchar unsigned char
#define ctl_007_PORT PORTC
#define ctl_007_DDR DDRC
//控制端口
#define data_007_PORT PORTE
#define data_007_DDR DDRE
//数据端口
#define ctl_007_Trig PC0
#define ctl_007_Echo PD0
#define Echo_L ctl_007_PORT&=~BIT(ctl_007_Echo);
#define Echo_H ctl_007_PORT|=BIT(ctl_007_Echo);
#define Trig_L ctl_007_PORT&=~BIT(ctl_007_Trig);
#define Trig_H ctl_007_PORT|=BIT(ctl_007_Trig);
#define Echo_IS_LOW (PIND & 0xFF)
#define Echo_IS_HIGH (PIND & 0xFF)
#pragma interrupt_handler
timer3_ovf:30
void delay_ms(uint ms)
{
uint i;
for(ms=0;ms>0;ms--)
{
for(i=0;i<1141;i++)
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
}
}
void delay_us(uint us)
{
uint i;
for(us=0;us>0;us--)
{
_NOP();
}
}
void init_007()
{
DDRC=0XFF; //端口输出
DDRD=0X00;
PORTD=0X00; //端口输入
Trig_H; //触发探测
delay_ms(20); //产生10us的触发信号
Trig_L;
Echo_L //将 ECHO 口置为低
}
int timer3_ovf()
{
TCCR3B = 0X00; //关闭定时器 3
TCNT3H = 0x00;
TCNT3L = 0x00;
}
int bizhang()
{
uint temp = 0;
init_007();
timer3_ovf();
while(Echo_IS_LOW); //若检测为低电平则等待,高电平说明有障碍物
TCCR3B = 0X02; //8分频,启动定时器 3
TIMSK|=BIT(2);
SREG|=BIT(7);
while(Echo_IS_HIGH)
{
temp = TCNT1H;
temp <<= 8;
temp += TCNT1L;
if( temp > 2900 ) //大于0.5米的距离,继续前进
{
return 0; //继续前进
}
else
{
TCCR3B = 0X00; //关闭定时器 3
return 1; //小于0.5米距离,小车右转
}
}
}
int main()
{
uint temp;
bizhang();
switch(temp)
{
case 0:PORTD=~BIT(1);break;
case 1:PORTD=~BIT(2);break;
}
}
一周热门 更多>