用32单片机写一份红外循迹的代码,要求写出.c和.h文件调用的hal库
时间: 2024-03-30 10:38:33 浏览: 72
基于STM32单片机的简单红外循迹的实现.doc
这是一份使用32单片机的红外循迹代码,包括.h和.c文件以及调用的HAL库。
// track.h
#ifndef TRACK_H
#define TRACK_H
#include "hal.h"
// 定义左右两个红外传感器引脚
#define LEFT_SENSOR_PIN P1_0
#define RIGHT_SENSOR_PIN P1_1
// 初始化函数
void track_init(void);
// 判断是否在黑线上
int is_on_track(void);
#endif
// track.c
#include "track.h"
// 初始化函数实现
void track_init(void) {
// 设置 P1_0 和 P1_1 为输入引脚
hal_gpio_input(LEFT_SENSOR_PIN);
hal_gpio_input(RIGHT_SENSOR_PIN);
}
// 判断是否在黑线上的函数实现
int is_on_track(void) {
// 读取左右两个传感器的数值
int left_val = hal_gpio_read(LEFT_SENSOR_PIN);
int right_val = hal_gpio_read(RIGHT_SENSOR_PIN);
// 如果左右两个传感器都在黑线上,返回1;否则返回0
if (left_val == 0 && right_val == 0) {
return 1;
} else {
return 0;
}
}
// hal.h
#ifndef HAL_H
#define HAL_H
// 定义函数类型
typedef void (*gpio_func_t)(int);
// GPIO操作函数
void hal_gpio_input(int pin);
void hal_gpio_output(int pin);
void hal_gpio_write(int pin, int val);
int hal_gpio_read(int pin);
#endif
// hal.c
#include "hal.h"
// 定义GPIO口的基地址
#define GPIO_BASE 0x8000
// 定义GPIO口操作的函数指针数组
gpio_func_t gpio_funcs[] = {
(gpio_func_t)(GPIO_BASE + 0x00), // GPIO0
(gpio_func_t)(GPIO_BASE + 0x04), // GPIO1
// ...
};
// GPIO输入函数实现
void hal_gpio_input(int pin) {
gpio_funcs[pin](0);
}
// GPIO输出函数实现
void hal_gpio_output(int pin) {
gpio_funcs[pin](1);
}
// GPIO写函数实现
void hal_gpio_write(int pin, int val) {
gpio_funcs[pin](val);
}
// GPIO读函数实现
int hal_gpio_read(int pin) {
return gpio_funcs[pin](2);
}
阅读全文