场地中有四个相同大小的圆,分别为A、B、C、D.其直径为18CM。四个圆呈矩形排列,AB、BC、CD、AD间距均为80CM。用stc12c5a单片机控制小车 要求1,小车初始位于A圆中。启动后,行驶至B圆中停住,再行驶至C圆中停住,再行驶至D圆中停住,最后行驶至A圆中停止。要求在每个圆中停止的时间约1秒,且小车的车轮投影完全在圆中。(5分) 要求2,同要求1类似。行驶顺序改为A->C->B->D。(5分) 要求3,不修改程序,仅通过显示屏及按键修改参数,实现以上功能。
时间: 2023-05-19 22:00:38 浏览: 74
对于要求1和要求2,可以使用以下代码实现:
```c
#include <reg52.h>
#define FREQ 11059200UL // 单片机工作频率
#define DELAY_TIME 1000 // 停留时间,单位为毫秒
sbit IN1 = P1^0; // 左轮正转
sbit IN2 = P1^1; // 左轮反转
sbit IN3 = P1^2; // 右轮正转
sbit IN4 = P1^3; // 右轮反转
void delay(unsigned int ms) // 延时函数,单位为毫秒
{
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < FREQ / 10000; j++);
}
void move_forward() // 小车前进
{
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void move_backward() // 小车后退
{
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
}
void stop() // 小车停止
{
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0;
}
void main()
{
while (1)
{
// 要求1:A->B->C->D->A
move_forward(); // A->B
delay(800);
stop();
delay(DELAY_TIME);
move_forward(); // B->C
delay(800);
stop();
delay(DELAY_TIME);
move_forward(); // C->D
delay(800);
stop();
delay(DELAY_TIME);
move_forward(); // D->A
delay(800);
stop();
delay(DELAY_TIME);
// 要求2:A->C->B->D->A
move_forward(); // A->C
delay(1600);
stop();
delay(DELAY_TIME);
move_forward(); // C->B
delay(800);
stop();
delay(DELAY_TIME);
move_forward(); // B->D
delay(1600);
stop();
delay(DELAY_TIME);
move_forward(); // D->A
delay(800);
stop();
delay(DELAY_TIME);
}
}
```
对于要求3,可以使用按键和显示屏来修改程序中的参数。例如,可以使用一个按键来切换要求1和要求2,使用另一个按键来增加停留时间,使用显示屏来显示当前的参数。具体实现方式可以根据具体的硬件和软件平台来确定。