|
|
/* USER CODE BEGIN Header */
|
|
|
/**
|
|
|
******************************************************************************
|
|
|
* @file : main.c
|
|
|
* @brief : 光敏电阻控制LED灯带
|
|
|
******************************************************************************
|
|
|
*/
|
|
|
/* USER CODE END Header */
|
|
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
|
#include "main.h"
|
|
|
#include "stm32f1xx_hal.h"
|
|
|
|
|
|
int main(void)
|
|
|
{
|
|
|
HAL_Init();
|
|
|
|
|
|
// 启用时钟
|
|
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
|
|
|
|
// 1. 配置PA2为输入(光敏电阻DO信号)
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_2;
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
|
|
GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉电阻
|
|
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
|
|
|
|
// 2. 配置PA6为输出(控制灯带)
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_6;
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
|
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
|
|
|
|
// 3. 配置PC13为输出(板载LED,用于调试)
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_13;
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
|
|
|
|
|
// 初始状态:灯带关闭
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
|
|
|
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
|
|
|
|
|
|
HAL_Delay(100);
|
|
|
|
|
|
while (1)
|
|
|
{
|
|
|
// 读取光敏电阻DO信号
|
|
|
uint8_t light_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2);
|
|
|
|
|
|
// 根据你的描述:
|
|
|
// - 光敏电阻灯灭(光线暗)→ 灯带应该亮
|
|
|
// - 光敏电阻灯亮(光线亮)→ 灯带应该灭
|
|
|
|
|
|
if (light_state == 0) // 光敏电阻指示灯亮(光线亮)
|
|
|
{
|
|
|
// 光线亮 → 关闭灯带
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // PA6低电平
|
|
|
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // PC13低电平
|
|
|
}
|
|
|
else // 光敏电阻指示灯灭(光线暗)
|
|
|
{
|
|
|
// 光线暗 → 打开灯带
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // PA6高电平
|
|
|
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // PC13高电平
|
|
|
}
|
|
|
|
|
|
HAL_Delay(100); // 每100ms检测一次
|
|
|
}
|
|
|
}
|