软件keil5车模小车stm32寻迹代码
时间: 2023-09-30 22:12:13 浏览: 276
Keil5新建STM32项目教程
以下是一份基于Keil5和STM32的寻迹小车代码,仅供参考:
```c
#include "stm32f10x.h"
#include "delay.h"
#include "lcd.h"
#include "led.h"
#include "key.h"
#define LEFT 1
#define RIGHT 2
#define FORWARD 3
#define STOP 4
void init_GPIO(void);
void car_run(uint8_t direction, uint8_t speed);
int main(void)
{
uint8_t key_val;
init_GPIO();
delay_init();
LCD_Init();
LED_Init();
KEY_Init();
while (1)
{
key_val = KEY_Scan();
if (key_val == KEY1_PRES)
{
car_run(FORWARD, 50);
LCD_ShowString(0, 0, "FORWARD");
}
else if (key_val == KEY2_PRES)
{
car_run(LEFT, 30);
LCD_ShowString(0, 0, "LEFT");
}
else if (key_val == KEY3_PRES)
{
car_run(RIGHT, 30);
LCD_ShowString(0, 0, "RIGHT");
}
else if (key_val == WKUP_PRES)
{
car_run(STOP, 0);
LCD_ShowString(0, 0, "STOP");
}
}
}
void init_GPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
// 初始化PA8-PA11引脚为推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 初始化PB1-PB4引脚为推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 初始化PC13引脚为推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void car_run(uint8_t direction, uint8_t speed)
{
switch (direction)
{
case LEFT:
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_ResetBits(GPIOB, GPIO_Pin_2);
GPIO_SetBits(GPIOB, GPIO_Pin_3);
GPIO_ResetBits(GPIOB, GPIO_Pin_4);
break;
case RIGHT:
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB, GPIO_Pin_2);
GPIO_ResetBits(GPIOB, GPIO_Pin_3);
GPIO_SetBits(GPIOB, GPIO_Pin_4);
break;
case FORWARD:
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB, GPIO_Pin_2);
GPIO_SetBits(GPIOB, GPIO_Pin_3);
GPIO_ResetBits(GPIOB, GPIO_Pin_4);
break;
case STOP:
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_ResetBits(GPIOB, GPIO_Pin_2);
GPIO_ResetBits(GPIOB, GPIO_Pin_3);
GPIO_ResetBits(GPIOB, GPIO_Pin_4);
break;
default:
break;
}
if (speed > 0)
{
GPIO_SetBits(GPIOA, GPIO_Pin_8);
GPIO_ResetBits(GPIOA, GPIO_Pin_11);
TIM_SetCompare1(TIM1, speed * 10);
TIM_SetCompare2(TIM1, speed * 10);
}
else
{
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
GPIO_ResetBits(GPIOA, GPIO_Pin_11);
TIM_SetCompare1(TIM1, 0);
TIM_SetCompare2(TIM1, 0);
}
}
```
注意:此代码仅提供基础的寻迹小车控制功能,具体实现还需根据硬件情况进行相应的调整。同时,该代码使用了自定义的delay.h、lcd.h、led.h和key.h头文件,需要自行添加或替换为相应的库文件。
阅读全文