hc-sr04超声波测距模块 90c54代码
时间: 2023-09-24 20:13:07 浏览: 145
HC-SR04超声波测距模块的工作原理是利用超声波在空气中的传播速度进行测距,我这里提供一份基于90C54单片机的HC-SR04超声波测距模块的代码,供你参考。
```
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="distance:"; //显示字符串
sbit TRIG=P3^5;
sbit ECHO=P3^2;
void delay_us(uint us)
{
while(us--);
}
void delay_ms(uint ms)
{
while(ms--)
{
delay_us(114);
delay_us(114);
delay_us(114);
delay_us(114);
delay_us(114);
delay_us(114);
delay_us(114);
delay_us(114);
delay_us(104);
}
}
void send_wave()
{
TRIG=1;
delay_us(10);
TRIG=0;
}
uint measure()
{
uint distance;
uint time1,time2;
send_wave();
while(!ECHO);
TR0=1;
while(ECHO);
TR0=0;
time1=TH0;
time1<<=8;
time1|=TL0;
distance=time1*0.017; //计算距离
return distance;
}
void main()
{
uchar i;
TMOD=0x09; //定时器0为工作方式1,定时器1为工作方式0
TH1=0xfd; //计数器初值,用于波特率的设置
TL1=0xfd; //计数器初值,用于波特率的设置
TR1=1; //启动定时器1
SCON=0x50; //串口工作方式1
PCON=0x80; //波特率加倍
ES=1; //开串口中断
EA=1; //开总中断
while(1)
{
P0=0xfe; //打开数码管
for(i=0; i<9; i++) //显示字符串
{
SBUF=table[i];
while(TI==0);
TI=0;
delay_ms(1);
}
P0=0xff; //关闭数码管
delay_ms(200); //等待200ms
P0=0xfe; //打开数码管
while(1)
{
P0=0xfe; //打开数码管
P2=measure(); //读取超声波测距结果
delay_ms(200); //等待200ms
}
}
}
void serial() interrupt 4
{
if(RI)
{
RI=0;
}
if(TI)
{
TI=0;
}
}
```
该代码实现了测距功能,并将结果通过串口发送给上位机。请注意,代码中的波特率为9600,如果需要修改,请修改 TH1 和 TL1 的值。另外,代码中使用了定时器0和定时器1,需要在开发环境中将其设置为工作方式1和工作方式0。
阅读全文