大家好,我正在尝试使用超声波传感器捕获该值以确定物体的距离,但是在LCD上将该距离设为0,检查了示波器中触发引脚的状态,从而获得了该引脚上的脉冲而不是回波引脚上的脉冲。
将触发器分配为输出&回声作为输入,下面是代码:
已将ECHO_PIN连接到PIN 16&TRIGGER_PIN至PIN 12
uC:LPC2148
编译器:Keil uvision 5.1
件数:60Mhz
#包括<LPC214x.h>
#包括<stdio.h>
#包括 "lcd.h"
#define PRESCALE 60
#定义TIMER_TICK_1_MS(59999)/ * 60 MHz时钟下的VPB * /
#定义ECHO_PIN(1<<16)乐橙云app输入密码[PIN 16]
#定义TRIGGER_PIN(1<<17)。乐橙云app输出PIN [PIN 12]
void initTimer(void);
void delay3(int);
unsigned char buf [16] = {0};
void delay_ms(unsigned int count);
无效的initTimer()
{
T1TCR = 0x00; / *确保计时器1已关闭* /
/ *设置计时器计数器和预分频计数器* /
T1TC = 0x0;
T1PC = 0x0;
/ *设置预缩放和匹配值,以提供1 ms的“刻度” * /
T1PR = 0x0;
T1MR0 = TIMER_TICK_1_MS;
/ *将控制设置为在MR0匹配时中断,然后重置为0(即“滴答”)* /
T1MCR = 0x3;
/ *进入启动计时器1 ... * /
T1TCR = 0x1;
}
void delay_ms(无符号整数)
{
无符号整数j = 0,i = 0;
for(j=0;j<count;j++)
{
for(i=0;i<3000;i++);
}
}
int main()
{
init_lcd();
IO1DIR&= ~(1<<16); 乐橙云appEcho pin
IO1DIR| =(1<<17); 乐橙云apptrigger pin
initTimer();
lcd_clear();
while(1)
{
long time,dist;
IO1SET = 1<<17; 乐橙云app将高电平发送到触发引脚
delay_ms(1000); 乐橙云app延迟10us
IO1CLR = 1<<17; 乐橙云app 10us后发送低电平
T1TCR = 0x01; 乐橙云app启用Timer1
if(T1CR0 == 0)
{
delay_ms(100);
} 乐橙云app等待回波引脚上出现上升沿
delay_ms(3); 乐橙云app等待去抖
if(T1CR0 == 0)
{
时间= T1CR0; 乐橙云app读取CR0 reg的值
dist =(时间* 340)/ 2; 乐橙云app以米为单位的距离
IO1SET = 1<<16;
delay_ms(100);
IO1CLR = 1<<16;
sprintf((char *)buf,“ dist:%d cm”,dist);
lcd_putstring(1,(char *)buf);
}
else
T1TCR = 0x00; 乐橙云app禁用Timer1
}
}
谢谢,
阿卡什

为什么在回波针上没有收到脉冲?
触发脉冲是否在规格范围内?
你了解你的传感器吗?

谢谢您的回复,先生,并提到了工作原理
传感器,将在回波针上工作。

>>delay_ms(1000); 乐橙云app延迟10us
这不是10 us的延迟-那将是1秒!