基于AT89S58单片机的超声波测距仪的设计代码
时间: 2023-12-06 21:04:00 浏览: 88
以下是基于AT89S58单片机的超声波测距仪的设计代码,仅供参考:
```c
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define FREQ 11059200L
sbit TRIG = P2^0; //发射端
sbit ECHO = P2^1; //接收端
sbit LED = P1^0; //指示灯
void delay (uint t) //延时函数
{
uint i, j;
for (i = 0; i < t; i++)
for (j = 0; j < FREQ / 1000000; j++);
}
void InitTimer0 (void) //初始化计时器0
{
TMOD |= 0x01; //定时器0,模式1
TH0 = 0x00; //重置计数器
TL0 = 0x00;
}
uint GetDistance (void) //获取距离
{
uchar i;
uint j, k;
TRIG = 1; //发射端发送一个10us的高电平
delay (1);
TRIG = 0;
while (ECHO == 0); //等待接收端输出高电平
InitTimer0 (); //开始计时
while (ECHO == 1) //等待接收端输出低电平
{
if (TH0 > 0x3C) //超时,退出
break;
}
k = (TH0 << 8) | TL0; //计算时间
j = k / 11.0592; //计算距离
return j;
}
void main (void)
{
uint distance;
while (1)
{
distance = GetDistance (); //获取距离
if (distance <= 30) //如果距离小于等于30cm
{
LED = 1; //指示灯亮
}
else
{
LED = 0; //指示灯灭
}
delay (500); //延时
}
}
```
此代码实现了一个简单的超声波测距仪,利用 AT89S58 单片机控制发射端和接收端,并通过计时器0计算声波的传播时间,最终计算出距离并进行指示灯的操作。
阅读全文