Keil5+STM32实现智能仓库管理系统:红外检测联动显示、声光报警!附完整代码
以下是基于STM32的智能仓库管理系统完整实现代码,使用Keil5开发环境,包含OLED显示屏、红外传感器、蜂鸣器和LED灯的控制逻辑。 ```c #include "stm32f10x.h" #include "delay.h" #include "oled.h" #include "sys.h" // 硬件接口定义 #define IR_SENSOR_PIN GPIO_Pin_0 // PA0 红外传感器输入 #define IR_SENSOR_PORT GPIOA #define BUZZER_PIN GPIO_Pin_1 // PA1 蜂鸣器输出 #define BUZZER_PORT GPIOA #define LED_PIN GPIO_Pin_2 // PA2 LED输出 #define LED_PORT GPIOA // 全局变量 uint8_t itemDetected = 0; // 物品检测标志 uint32_t blinkTimer = 0; // LED闪烁计时器 uint8_t ledState = 0; // LED当前状态 // 硬件初始化函数 void Hardware_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; // 使能时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 红外传感器输入配置(上拉输入) GPIO_InitStructure.GPIO_Pin = IR_SENSOR_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(IR_SENSOR_PORT, &GPIO_InitStructure); // 蜂鸣器输出配置(推挽输出) GPIO_InitStructure.GPIO_Pin = BUZZER_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BUZZER_PORT, &GPIO_InitStructure); // LED输出配置(推挽输出) GPIO_InitStructure.GPIO_Pin = LED_PIN; GPIO_Init(LED_PORT, &GPIO_InitStructure); // 初始化OLED显示屏 OLED_Init(); OLED_Clear(); } // 检测红外传感器状态 void CheckIRSensor(void) { // 读取传感器状态(假设低电平表示检测到物品) itemDetected = (GPIO_ReadInputDataBit(IR_SENSOR_PORT, IR_SENSOR_PIN) == 0); } // 控制系统输出 void ControlOutputs(void) { if(itemDetected) { // 有货状态 OLED_ShowString(0, 0, "Status: In Stock ", 16); OLED_ShowString(0, 2, "Items Available ", 16); GPIO_ResetBits(BUZZER_PORT, BUZZER_PIN); // 关闭蜂鸣器 GPIO_SetBits(LED_PORT, LED_PIN); // LED常亮 } else { // 缺货状态 OLED_ShowString(0, 0, "Status: Out of Stock", 16); OLED_ShowString(0, 2, "Please Restock ", 16); GPIO_SetBits(BUZZER_PORT, BUZZER_PIN); // 蜂鸣器报警 // LED闪烁(500ms间隔) if(HAL_GetTick() - blinkTimer > 500) { blinkTimer = HAL_GetTick(); ledState = !ledState; GPIO_WriteBit(LED_PORT, LED_PIN, (BitAction)ledState); } } } int main(void) { // 系统初始化 Delay_Init(); // 延时函数初始化 Hardware_Init(); // 硬件初始化 // 主循环 while(1) { CheckIRSensor(); // 检测红外传感器状态 ControlOutputs(); // 控制系统输出 Delay_Ms(100); // 延时100ms降低CPU负载 } } ``` ## 配套头文件 `oled.h` 内容示例: ```c #ifndef __OLED_H #define __OLED_H #include "stm32f10x.h" void OLED_Init(void); void OLED_Clear(void); void OLED_ShowString(uint8_t x, uint8_t y, const char *str, uint8_t size); #endif ``` `delay.h` 内容示例: ```c #ifndef __DELAY_H #define __DELAY_H #include "stm32f10x.h" void Delay_Init(void); void Delay_Ms(uint32_t nms); uint32_t HAL_GetTick(void); #endif ``` ## 系统功能说明 1. 红外检测模块: - 使用GPIOA0作为输入 - 检测到物品时itemDetected=1 - 未检测到物品时itemDetected=0 2. 显示模块: - 有货状态显示"In Stock"和"Items Available" - 缺货状态显示"Out of Stock"和"Please Restock" 3. 报警模块: - 有货时蜂鸣器静音 - 缺货时蜂鸣器持续报警 4. LED指示模块: - 有货时LED常亮 - 缺货时LED以500ms间隔闪烁 ## 额外注意事项 1. 红外传感器的有效电平需要根据实际硬件确定,可能需要调整上拉/下拉电阻配置。 2. 蜂鸣器如为无源蜂鸣器,需要改为PWM驱动才能发声,需修改为定时器输出。 3. OLED显示驱动需要根据具体型号实现初始化函数和显示函数。 4. 延时函数HAL_GetTick()需要实现1ms的定时器中断来维护。 ######[AI写代码神器 | 1270点数解答 | 2025-07-01 18:21:50]
- Java 继承实现:重温经典剪刀石头布游戏(字节豆包 | 451点数解答 | 2024-10-20 19:57:58)472
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)362
- 工程师必备!10 种工程日常易用管理工具大揭秘(百度文心 | 346点数解答 | 2023-11-09 18:26:09)303
- Python 实现课程信息输入存储:含输入检测与字典构建全流程 (GPT | 448点数解答 | 2024-05-30 15:08:47)236
- 仅36元!低成本人体感应自动门控制系统,硬件选型、代码全揭秘 (DeepSeek | 586点数解答 | 2025-04-08 16:54:34)191
- 51 单片机+Keil5:YL - 69 土壤湿度采集并在 LCD1602 显示的示例代码及注意事项(字节豆包 | 1239点数解答 | 2025-11-02 17:53:34)67
- C++ 实现我的世界基岩版:从简单框架到开发要点揭秘(字节豆包 | 182点数解答 | 2025-02-22 15:53:11)208
- C++ 实现完整斗地主:含洗牌、发牌与手牌展示,可按需扩展!(字节豆包 | 1028点数解答 | 2026-01-10 08:02:37)49
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)333
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)487
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)372
- 深度剖析:黑盒、白盒、单元、集成、系统与验收测试的区别与联系 (百度文心 | 424点数解答 | 2023-11-09 18:24:11)310