|
我用的是cc2430来控制超声波模块HC-SR04(网上买的),cc2430里面是一个加强工业型的51。现在把程序下进去之后,发现LCD上显示的一直是6cm的值,不论不模块怎么放,都是6cm。
用示波器测的TRIG,ECHO口,都有脉冲
下面把程序贴出来,程序是我自己写的,大家看看有不有什么问题。
#include "ioCC2430.h"
#include "LCD3310.h"
//#include "LCD3310.c"
#include "hal.h"
#include <stdio.h>
#include <string.h>
#define TRIG P1_1
#define ECHO P0_1
#define LED P2_0
void delay(int n);
void delayms(int n);
int flag=0;
unsigned int data,s,time;
unsigned char disbuff[3]={0,0,0};
void main (void)
{
initLcd();
delay(10);
lcdUpdateLine(0,"ceju (cm)");
P1DIR |= 0x02; // 设置P1.1 TRIG为输出,其他默认数输入
P2INP |= 0x20; //P0口下拉;
CLKCON|=0x28; //选择定时器时钟源1M
T3CTL|=0xE0; //预分频为1/128,即(1/128)Mhz
T3CTL|=0x00; //定时器3 free-run模式
TRIG=0;
while(1)
{
TRIG=1; //发出一个脉冲,启动一个测量周期
delay(200); //延时200us
TRIG = 0;//开始测量
T3CTL|=0x10; //启动定时器3
while(!ECHO);//一直在此等待ECHO变为高电平
if(ECHO)
{
T3CTL &=~0x10; //停止计时
data=T3CNT; //测量结果
time=data*128; //测得的时间 单位us
s=time*0.0172; //单位为厘米
//lcd上显示
disbuff[0]=(int)s/100;
disbuff[1]=(int)(s-disbuff[0]*100)/10;
disbuff[2]=(int)(s-disbuff[0]*100-disbuff[1]*10);
lcdUpdateChar(1,0,disbuff[0]+0x30);
lcdUpdateChar(1,1,disbuff[1]+0x30);
lcdUpdateChar(1,2,disbuff[2]+0x30);
T3CTL|=0x04;//T3计数器清零
}
delayms(10);
}
}
void delay(int n)//延时n微秒
{ int i,j;
for(i=0;i<16;i++)
{for(j=0;j<n;j++);}
}
void delayms(int n)//延时n毫秒
{ long i,j;
for(i=0;i<16000;i++)
{for(j=0;j<n;j++);}
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|