HC-SR04模块
文章更新时间
2021年8月6日19:09:42
概述
基于51单片机,对HC-SR04实现数据获取,并通过串口输出。
时序图
测试结果
成功获取数据;串口连续接受数据。
模块功能
测距
串口介绍及连接
GND:接地; Trig:连接自定引脚; Echo:连接自定引脚; VCC:接电源;
测试代码介绍
单片机串口通过CH340与电脑连接,取两个引脚连接Trig及Echo,获取模块数据。
代码更新时间
2021年8月6日19:09:42
代码文件main.c
#include "HC-SR04.h"
u8 flag1 = 0;
void main(){
u16 distance;
UartConfiguration();
Init();
while(1){
Init_Timer0();
Power_On();
while(Echo == 0);
TR0 = 1;
while(Echo == 1);
TR0 = 0;
distance = Congratulate();
send_num_16(distance);
send_byte('c');
send_byte('m');
flag1 = 0;
}
}
void T0_timer() interrupt 1{
TL0 = 0x00;
TH0 = 0x00;
}
void T1_timer() interrupt 4{
flag1=1;
RI=0;
}
头文件HC-SR04.h
#include "czf.h"
sbit Trig = P2^0;
sbit Echo = P2^1;
void Init();
void Power_On();
void TimeInit();
void Init_Timer0();
float Congratulate();
头文件HC-SR04.c
#include "HC-SR04.h"
void Init(){
Trig = 0;
Echo = 0;
}
void Power_On(){
Trig = 1;
Delay5us();
Delay5us();
Delay5us();
Trig = 0;
}
void Init_Timer0(){
TMOD |= 0x01;
TL0 = 0x00;
TH0 = 0x00;
TF0 = 0;
TR0 = 0;
}
float Congratulate(){
float distance;
distance = 0.017 * (TH0 * 256 + TL0);
return distance;
}
头文件czf.h
#include <REGX52.H>
#include <intrins.h>
#include <math.h>
#define u8 unsigned char
#define u16 unsigned int
void Delay5us();
void UartConfiguration();
void send_byte(u8 byte);
void send_num_16(u16 num);
头文件czf.c
#include "czf.h"
void Delay5us(){
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void UartConfiguration(){
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
PCON = 0x00;
SCON = 0x50;
EA=1;
ES=1;
TR1=1;
}
void send_byte(u8 byte){
SBUF = byte;
while(!TI);
TI = 0;
}
void send_num_16(u16 num){
u8 ge, shi, bai, qian, wan;
u16 temp;
temp = num;
wan = temp / 10000;
temp %= 10000;
qian = temp / 1000;
temp %= 1000;
bai = temp / 100;
temp %= 100;
shi = temp / 10;
ge = temp % 10;
send_byte(wan+0x30);
send_byte(qian+0x30);
send_byte(bai+0x30);
send_byte(shi+0x30);
send_byte(ge+0x30);
}
|