克莱斯特彻奇_MSP430F149超声波测距C语言编程,距离小于1M则用蜂鸣器发出警报,距离越近,蜂鸣器声响越高。。求程序

2020-07-12 作者 : 浏览量:397
MSP430F149超声波测距C语言编程,距离小于1M则用蜂鸣器发出警报,距离越近,蜂鸣器声响越高。。求程序
不难写的,你是要做什么?
我看看
#include //恩 头文件
void main(void)//主函数
{
1,设置一下定的初始化把(定时器关闭状态)//刚刚下在了一个430程序里头没见定时器,这个比较尴尬.
P1DIR |= SCL;//将SCL管脚(P1.2)设置为输出管脚 用这个管脚接超声波的控制端吧
P1DIR &= ~(SDA);//将SDA设置为输入方向 用它来接受超声波的接受信号把(超声波剩下的两个引脚是电源了)
P1OUT &= ~(SDA);//SDA管脚输出为低电平
while(1)
{
P1OUT |= SCL;//SCL管脚输出为高电平
延时20us
P1OUT &= ~(SCL);//一个20us的脉冲
2. 打开定时器
while(!SDA);//等待消息
3.关闭定时器
4.读定时器的数
5.计算一下得出meter
if(meter>1)//你就再随便找个引脚接蜂鸣器给她高点平好了
}
不是为了分.....是希望你少copy点代码 这样会比较好

}
cc2530超声波测距编程
这样添加应该是没有问题的。不过奇怪的现象,肯定是简单的问题造成的,比如是不是字符全角半角的问题?本回答被提问者采纳
51用c语言怎么编程检测US-100超声波测距模块echo/rx引脚输出高电平时间长度,,谁能给我个模板
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char code smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};
sbit tr=P1^0;
sbit ec=P1^1;
uint distance,time,tl,th;
void delay_20us(void )
{
uchar a ;
for(a=0;a<100;a++);
}
void delay(uint a )
{
while(a--);
}
void display(void )
{
P2=0xff;
P2=0xfe;
P0=smg[distance/100];
delay(200);
P2=0xff;
P2=0xfd;
P0=smg[distance%100/10];
delay(200);
P2=0xff;
P2=0xfb;
P0=smg[distance%10];
delay(200);
}
void main(void )
{
uchar i;
TMOD=0X10;
while(1)
{
tr=1; //超声波输入端
delay_20us(); //延时20us
tr=0; //产生一个20us的脉
while(ec==0); //等待Echo回波引脚变高电平
TH1=0; //器1清零
TL1=0; //定时器1清零
TF1=0; //计数溢出
TR1=1; //启动定时器1
while(ec==1);
th=TH1;
tl=TL1;
TL1=0;
TH1=0;
TR1=0; //关闭定时器1
time=th*256+tl;
distance=time*0.017; //厘米*/
display();

}
}追问

谢谢
arduino 编程 超声波测距 请教下


没arduino 不过看程序你用的应该是那种拉高10然后检电平时间来获取超声波往返时间的超声波,每次测距结果波动不大的话正常的。没加IF你这个程序看程序名是循环,所以会不停的发射超声波然后输出距离,加了以后只有串口接收到字符'r' 才启动超声波发射,输入的r是ascii,至于Serial.write(bbb);串口发送的时候是不管你发的是什么的,发送的是二进制串,具体要看你接收端怎么处理,打个比方你测得距离是20 bbb=20,发送bbb,上位机把接收到的数据按16进制处理 显示接收到的就是0x14 当asc处理,显示接收到的就是20对应的字符,串口收发都只是收发二进制串,具体含义是看你程序的