1、HC-SR04使用方法:给触发端子trig一个10us以上的高电平即可触发,触发后echo端子将接受到高电平,高电平的持续时间就是测距的往返时间。
2、例程:
#include<reg52.h>#define uchar unsigned char
#define uint unsigned int
/*位定义*/
sbit CHUFA=P0^1 //位定义超声波触发端(10us以上高电平触发)
sbit JIESHOU=P0^3 //接收端(接受高电平)
sbit BEEP=P2^0 //蜂鸣器
sbit OUT0=P3^2 //外部中断0
uchar JS_FLAG //接收标志
uint CF_TIME,t0,t1,shu
/*函数声明*/
void timer0()
void int0()
void display(uint)
main(){
CHUFA=0 //初始化拉低触发端和接收端电平
JIESHOU=0
JS_FLAG=0
CF_TIME=15 //初始化触发时间(大于10us)
TMOD=0x11 //定时器方式选择
EA=1 //开总中断
ET0=1 //开定时器0中断
EX0=1 //开外部中断0
IT0=0 //外部中断选择下降沿触发
//JIESHOU=1
while(1){
OUT0=JIESHOU //外部中断0被赋值为接收端信号,当出现下降沿是触发外部中断0
if(JS_FLAG==0){ //如果没有接收到高电平则触发
CHUFA=1
while(CF_TIME--) //10us以上高电平触发传感器
}
if(JIESHOU==1){
TR0=1 //如果接收端收到高电平则启动定时器
JS_FLAG=1 //并且标志位置1
BEEP=0 //蜂鸣器响
}
display(t1) //显示测量时间(秒)
}
}
/*定时器0中断程序*/
void timer0() interrupt 1{
TH0=(65536-10000)/256 //装初值 10ms
TL0=(65536-10000)%256
t0++ //每进入一次中断t0加1
}
/*外部中断0中断程序*/
void int0() interrupt 0{
TR0=0 //一旦进入外部中断0,说明接收端收到下降沿信号。关闭定时器0
JS_FLAG=0 //接收标志位置0
BEEP=1 //关闭蜂鸣器
t1=t0*10/1000 //测量时间为 进入定时器中断次数t0乘以每次时间10ms,除以1000化为秒为单位
t0=0 //t0清零
}
/*数码管显数函数*/
void display(uint shu){
//数码管显示函数
}
//Function: 超声波测距,串口显示距离
#include <SR04.h>
#define TRIG_pin 13
#define ECHO_pin 11
SR04 my_SR04 = SR04(ECHO_pin,TRIG_pin)// 创建对象
long distance// 用于储存距离的变量
void setup(){
Serial.begin(9600)
delay(1000)// 适当延时使初始化
}
void loop(){
distance = my_SR04.Distance()
Serial.print(distance)
Serial.print ln ("cm")
//delay(100)
}
*粗体注意
右上角搜索那个图标是打开监测数据,看数据的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)