#include stc8h STC头文件#include defh 宏定义 常用函数#include delayh 延时函数#include spih#include mpu6050h#include xpt2046h#include intrinsh#define uchar unsigned char#define uint u
这段程序是一个基于STC8单片机的小车控制程序,主要实现通过MPU6050角度传感器读取小车的倾斜角度,根据角度值控制小车的运动方向,通过串口将命令发送给小车控制器,从而控制小车的前进、后退、左转、右转和停止。
具体功能如下:
- 引入头文件。
#include "stc8.h" // STC头文件
#include "def.h" // 宏定义 常用函数
#include "delay.h" // 延时函数
#include "spi.h"
#include "mpu6050.h"
#include "xpt2046.h"
#include "intrins.h"
- 定义变量和命令数组。
uchar command_1[15] = "ONA"; // 定义命令1数组,长度为15,存储值为"ONA"
uchar command_2[15] = "ONB"; // 定义命令2数组,长度为15,存储值为"ONB"
uchar command_3[15] = "ONC"; // 定义命令3数组,长度为15,存储值为"ONC"
uchar command_4[15] = "OND"; // 定义命令4数组,长度为15,存储值为"OND"
uchar command_0[15] = "ONF"; // 定义命令0数组,长度为15,存储值为"ONF"
float x, y, z = 0; // 读取坐标值 存储变量
- 初始化串口。
void UartInit(void) // 串口初始化函数,波特率9600bps@11.0592MHz
{
PCON &= 0x7F; // 波特率不倍速
SCON = 0x50; // 8位数据,可变波特率
AUXR &= 0xBF; // 定时器时钟12T模式
AUXR &= 0xFE; // 串口1选择定时器1为波特率发生器
TMOD &= 0x0F; // 设置定时器模式
TMOD |= 0x20; // 设置定时器模式
TL1 = 0xFD; // 设置定时初始值
TH1 = 0xFD; // 设置定时重载值
ET1 = 0; // 禁止定时器中断
TR1 = 1; // 定时器1开始计时
ES = 1;
EA = 1;
}
- 串口发送函数。
void UartSend(char dat)
{
SBUF = dat;
while (!TI);
TI = 0;
}
void UartSendStr(char *p)
{
while (*p)
{
UartSend(*p++); // 发送数据
}
}
- 根据读取到的角度值选择控制命令。
void select_uart()
{
if (x < 400 && x > -400 && y < 400 && y > -400) // 静止
{
UartSendStr(command_0);
}
else if (y < -400 && x < 400 && x > -400) // 前进
{
UartSendStr(command_1);
}
else if (y > 400 && x < 400 && x > -400) // 后退
{
UartSendStr(command_2);
}
else if (x > 400 && x < 900) // 左转
{
UartSendStr(command_3);
}
else if (x < -400 && x > -900) // 右转
{
UartSendStr(command_4);
}
}
- MPU6050角度传感器初始化函数。
u8 MPU_Init(void)
{
u8 res;
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); //复位MPU6050
delay_ms(100)
原文地址: https://www.cveoy.top/t/topic/hpBX 著作权归作者所有。请勿转载和采集!