请问你能不能也给我发一份超声波测距C语言程序呢?现在急需,非常感谢!
4个回答
展开全部
PIC16F877 + HC-SR04 + LCD03
#include <pic.h>
#include <stdio.h>
__CONFIG(0x3b32);
#define trig RB0
#define echo RB1
void clrscn(void); // prototypes
void cursor(char pos);
void print(char *p);
void setup(void);
unsigned int get_srf04(void);
char s[21]; // buffer used to hold text to print
void main(void)
{
unsigned int range;
setup(); // sets up the PIC16F877 I2C port
clrscn(); // clears the LCD03 disply
cursor(2); // sets cursor to 1st row of LCD03
sprintf(s,"SRF04 Ranger Test"); // text, printed into our buffer
print(s); // send it to the LCD03
while(1) { // loop forever
range = get_srf04(); // get range from srf04 (round trip flight time in 0.8uS units)
cursor(24); // sets cursor to 2nd row of LCD03
sprintf(s,"Range = %dcm ", range/72); // convert to cm
print(s); // send it to the LCD03
cursor(44); // sets cursor to 3rd row of LCD03
sprintf(s,"Range = %dinch ", range/185); // convert to inches
print(s); // send it to the LCD03
TMR1H = 0; // 52mS delay - this is so that the SRF04 ranging is not too rapid
TMR1L = 0; // and the previous pulse has faded away before we start the next one
T1CON = 0x21; // 1:4 prescale and running
TMR1IF = 0;
while(!TMR1IF); // wait for delay time
TMR1ON = 0; // stop timer
}
}
unsigned int get_srf04(void)
{
TMR1H = 0xff; // prepare timer for 10uS pulse
TMR1L = -14;
T1CON = 0x21; // 1:4 prescale and running
TMR1IF = 0;
trig = 1; // start trigger pulse
while(!TMR1IF); // wait 10uS
trig = 0; // end trigger pulse
TMR1ON = 0; // stop timer
TMR1H = 0; // prepare timer to measure echo pulse
TMR1L = 0;
T1CON = 0x20; // 1:4 prescale but not running yet
TMR1IF = 0;
while(!echo && !TMR1IF); // wait for echo pulse to start (go high)
TMR1ON = 1; // start timer to measure pulse
while(echo && !TMR1IF); // wait for echo pulse to stop (go low)
TMR1ON = 0; // stop timer
return (TMR1H<<8)+TMR1L; // TMR1H:TMR1L contains flight time of the pulse in 0.8uS units
}
void clrscn(void)
{
SEN = 1; // send start bit
while(SEN); // and wait for it to clear
SSPIF = 0;
SSPBUF = 0xc6; // LCD02 I2C address
while(!SSPIF); // wait for interrupt
SSPIF = 0; // then clear it.
SSPBUF = 0; // address of register to write to
while(!SSPIF); //
SSPIF = 0; //
SSPBUF = 12; // clear screen
while(!SSPIF); //
SSPIF = 0; //
SSPBUF = 4; // cursor off
while(!SSPIF); //
SSPIF = 0; //
PEN = 1; // send stop bit
while(PEN); //
}
void cursor(char pos)
{
SEN = 1; // send start bit
while(SEN); // and wait for it to clear
SSPIF = 0;
SSPBUF = 0xc6; // LCD02 I2C address
while(!SSPIF); // wait for interrupt
SSPIF = 0; // then clear it.
SSPBUF = 0; // address of register to write to
while(!SSPIF); //
SSPIF = 0; //
SSPBUF = 2; // set cursor
while(!SSPIF); //
SSPIF = 0; //
SSPBUF = pos; //
while(!SSPIF); //
SSPIF = 0; //
PEN = 1; // send stop bit
while(PEN); //
}
void print(char *p)
{
SEN = 1; // send start bit
while(SEN); // and wait for it to clear
SSPIF = 0;
SSPBUF = 0xc6; // LCD02 I2C address
while(!SSPIF); // wait for interrupt
SSPIF = 0; // then clear it.
SSPBUF = 0; // address of register to write to
while(!SSPIF); //
SSPIF = 0; //
while(*p) {
SSPBUF = *p++; // write the data
while(!SSPIF); //
SSPIF = 0; //
}
PEN = 1; // send stop bit
while(PEN); //
}
void setup(void)
{
unsigned long x;
TRISB = 0xfe; // RB0 (trig) is output
PORTB = 0xfe; // and starts low
TRISC = 0xff;
PORTC = 0xff;
SSPSTAT = 0x80;
SSPCON = 0x38;
SSPCON2 = 0x00;
SSPADD = 50; // SCL = 91khz with 20Mhz Osc
for(x=0; x<300000L; x++); // wait for LCD03 to initialise
}
#include <pic.h>
#include <stdio.h>
__CONFIG(0x3b32);
#define trig RB0
#define echo RB1
void clrscn(void); // prototypes
void cursor(char pos);
void print(char *p);
void setup(void);
unsigned int get_srf04(void);
char s[21]; // buffer used to hold text to print
void main(void)
{
unsigned int range;
setup(); // sets up the PIC16F877 I2C port
clrscn(); // clears the LCD03 disply
cursor(2); // sets cursor to 1st row of LCD03
sprintf(s,"SRF04 Ranger Test"); // text, printed into our buffer
print(s); // send it to the LCD03
while(1) { // loop forever
range = get_srf04(); // get range from srf04 (round trip flight time in 0.8uS units)
cursor(24); // sets cursor to 2nd row of LCD03
sprintf(s,"Range = %dcm ", range/72); // convert to cm
print(s); // send it to the LCD03
cursor(44); // sets cursor to 3rd row of LCD03
sprintf(s,"Range = %dinch ", range/185); // convert to inches
print(s); // send it to the LCD03
TMR1H = 0; // 52mS delay - this is so that the SRF04 ranging is not too rapid
TMR1L = 0; // and the previous pulse has faded away before we start the next one
T1CON = 0x21; // 1:4 prescale and running
TMR1IF = 0;
while(!TMR1IF); // wait for delay time
TMR1ON = 0; // stop timer
}
}
unsigned int get_srf04(void)
{
TMR1H = 0xff; // prepare timer for 10uS pulse
TMR1L = -14;
T1CON = 0x21; // 1:4 prescale and running
TMR1IF = 0;
trig = 1; // start trigger pulse
while(!TMR1IF); // wait 10uS
trig = 0; // end trigger pulse
TMR1ON = 0; // stop timer
TMR1H = 0; // prepare timer to measure echo pulse
TMR1L = 0;
T1CON = 0x20; // 1:4 prescale but not running yet
TMR1IF = 0;
while(!echo && !TMR1IF); // wait for echo pulse to start (go high)
TMR1ON = 1; // start timer to measure pulse
while(echo && !TMR1IF); // wait for echo pulse to stop (go low)
TMR1ON = 0; // stop timer
return (TMR1H<<8)+TMR1L; // TMR1H:TMR1L contains flight time of the pulse in 0.8uS units
}
void clrscn(void)
{
SEN = 1; // send start bit
while(SEN); // and wait for it to clear
SSPIF = 0;
SSPBUF = 0xc6; // LCD02 I2C address
while(!SSPIF); // wait for interrupt
SSPIF = 0; // then clear it.
SSPBUF = 0; // address of register to write to
while(!SSPIF); //
SSPIF = 0; //
SSPBUF = 12; // clear screen
while(!SSPIF); //
SSPIF = 0; //
SSPBUF = 4; // cursor off
while(!SSPIF); //
SSPIF = 0; //
PEN = 1; // send stop bit
while(PEN); //
}
void cursor(char pos)
{
SEN = 1; // send start bit
while(SEN); // and wait for it to clear
SSPIF = 0;
SSPBUF = 0xc6; // LCD02 I2C address
while(!SSPIF); // wait for interrupt
SSPIF = 0; // then clear it.
SSPBUF = 0; // address of register to write to
while(!SSPIF); //
SSPIF = 0; //
SSPBUF = 2; // set cursor
while(!SSPIF); //
SSPIF = 0; //
SSPBUF = pos; //
while(!SSPIF); //
SSPIF = 0; //
PEN = 1; // send stop bit
while(PEN); //
}
void print(char *p)
{
SEN = 1; // send start bit
while(SEN); // and wait for it to clear
SSPIF = 0;
SSPBUF = 0xc6; // LCD02 I2C address
while(!SSPIF); // wait for interrupt
SSPIF = 0; // then clear it.
SSPBUF = 0; // address of register to write to
while(!SSPIF); //
SSPIF = 0; //
while(*p) {
SSPBUF = *p++; // write the data
while(!SSPIF); //
SSPIF = 0; //
}
PEN = 1; // send stop bit
while(PEN); //
}
void setup(void)
{
unsigned long x;
TRISB = 0xfe; // RB0 (trig) is output
PORTB = 0xfe; // and starts low
TRISC = 0xff;
PORTC = 0xff;
SSPSTAT = 0x80;
SSPCON = 0x38;
SSPCON2 = 0x00;
SSPADD = 50; // SCL = 91khz with 20Mhz Osc
for(x=0; x<300000L; x++); // wait for LCD03 to initialise
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
艾因蒂克
2024-11-28 广告
2024-11-28 广告
超声阵列探头是艾因蒂克科技(上海)有限公司在超声检测领域的一项重要技术产品。它采用先进的阵列设计,能够显著提高超声检测的精度和效率。该探头通过多个超声传感器的协同工作,实现对被检测物体的全方位、多角度扫描,从而更准确地发现物体内部的缺陷和问...
点击进入详情页
本回答由艾因蒂克提供
展开全部
超声波测距C语言程序,你到“百度文库”中去找一下,可以找到很多的参考程序的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
975217433@qq.com 非常非常感谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
发到哪里???
步行者===电子单片机团
步行者===电子单片机团
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询