这段程序是一个基于STC8单片机的小车控制程序,主要实现通过MPU6050角度传感器读取小车的倾斜角度,根据角度值控制小车的运动方向,通过串口将命令发送给小车控制器,从而控制小车的前进、后退、左转、右转和停止。

具体功能如下:

  1. 引入头文件。
#include  "stc8.h"		          // STC头文件
#include  "def.h"	    		  // 宏定义 常用函数
#include  "delay.h"				  // 延时函数
#include  "spi.h"
#include  "mpu6050.h"
#include "xpt2046.h"
#include "intrins.h"
  1. 定义变量和命令数组。
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;                   // 读取坐标值 存储变量
  1. 初始化串口。
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;
}
  1. 串口发送函数。
void UartSend(char dat)
{
    SBUF = dat;
    while (!TI);
    TI = 0;
}

void UartSendStr(char *p)
{
    while (*p)
    {
        UartSend(*p++);              // 发送数据
    }
}
  1. 根据读取到的角度值选择控制命令。
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);
    }
}
  1. MPU6050角度传感器初始化函数。
u8 MPU_Init(void)
{ 
	u8 res;
	MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80);	//复位MPU6050
    delay_ms(100)
#include stc8h		 STC头文件#include defh	 		 宏定义 常用函数#include delayh				 延时函数#include spih#include mpu6050h#include xpt2046h#include intrinsh#define uchar unsigned char#define uint u

原文地址: https://www.cveoy.top/t/topic/hpBX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录