51超声波避障小车代码
时间: 2023-09-28 22:06:28 浏览: 469
51红外线避障小汽车
以下是一个用于51单片机的超声波避障小车的代码:
```c
#include <reg51.h>
#define MIDDLE 0
#define LEFT 1
#define RIGHT 2
void Delay450ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 39;
k = 209;
do {
do {
while (--k);
} while (--j);
} while (--i);
}
void Delay150ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 2;
j = 13;
k = 237;
do {
do {
while (--k);
} while (--j);
} while (--i);
}
void Time0Init()
{
// 初始化定时器0
// ...
}
void Time1Init()
{
// 初始化定时器1
// ...
}
void sgMiddle()
{
// 设置超声波传感器朝向中间
// ...
}
void sgLeft()
{
// 设置超声波传感器朝向左边
// ...
}
void sgRight()
{
// 设置超声波传感器朝向右边
// ...
}
double get_distance()
{
// 获取超声波传感器测得的距离
// ...
}
void goForword()
{
// 小车前进
// ...
}
void goBack()
{
// 小车后退
// ...
}
void Stop()
{
// 停止小车
// ...
}
void goRight()
{
// 小车右转
// ...
}
void goLeft()
{
// 小车左转
// ...
}
void main()
{
char dir;
double disMiddle; // 中间距离
double disLeft; // 左边距离
double disRight; // 右边距离
Time0Init(); // 初始化定时器0
Time1Init(); // 初始化定时器1
sgMiddle();
Delay450ms();
Delay450ms();
dir = MIDDLE;
while(1)
{
if(dir != MIDDLE)
{
sgMiddle();
Delay450ms();
dir = MIDDLE;
}
disMiddle = get_distance();
if(disMiddle > 35)
{
goForword();
}
else if(disMiddle < 10)
{
goBack();
}
else
{
Stop();
sgLeft();
dir = LEFT;
Delay450ms();
disLeft = get_distance();
sgMiddle();
Delay450ms();
sgRight();
dir = RIGHT;
Delay450ms();
disRight = get_distance();
if(disLeft < disRight)
{
goRight();
Delay150ms();
Stop();
}
if(disLeft > disRight)
{
goLeft();
Delay150ms();
Stop();
}
}
}
}
```
这段代码实现了一个超声波避障小车的功能。它使用了51单片机,通过超声波传感器测量距离,并根据距离的变化控制小车的运动。具体的代码逻辑和功能实现请参考上述代码。
#### 引用[.reference_title]
- *1* *2* *3* [51单片机实现避障小车](https://blog.csdn.net/m0_68038554/article/details/129938089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文