STM32 光敏电阻控制 LED 灯程序示例

这是一个使用 STM32 的 GPIO 和 ADC 模块实现光敏电阻控制 LED 灯的简单程序示例。

程序代码

#include "stm32f10x.h"

#define LED_PIN GPIO_Pin_12
#define LED_PORT GPIOA
#define PHOTO_PIN GPIO_Pin_0
#define PHOTO_PORT GPIOB
#define PHOTO_ADC ADC1
#define PHOTO_CHANNEL ADC_Channel_8

void GPIO_Init(void);
void ADC_Init(void);
void delay(uint32_t time);

int main(void)
{
    GPIO_Init();
    ADC_Init();

    while (1)
    {
        // 读取光敏电阻模块的 ADC 值
        ADC_SoftwareStartConv(PHOTO_ADC);
        while (!ADC_GetFlagStatus(PHOTO_ADC, ADC_FLAG_EOC));
        uint16_t adc_value = ADC_GetConversionValue(PHOTO_ADC);

        // 根据 ADC 值控制 LED 灯
        if (adc_value > 1000)
            GPIO_SetBits(LED_PORT, LED_PIN);
        else
            GPIO_ResetBits(LED_PORT, LED_PIN);

        delay(100); // 延时 100ms
    }
}

void GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    // LED 引脚配置
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = LED_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(LED_PORT, &GPIO_InitStructure);

    // 光敏电阻引脚配置
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = PHOTO_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(PHOTO_PORT, &GPIO_InitStructure);
}

void ADC_Init(void)
{
    ADC_InitTypeDef ADC_InitStructure;

    // ADC 时钟配置
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

    // ADC 配置
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = 1;
    ADC_Init(PHOTO_ADC, &ADC_InitStructure);

    // ADC 通道配置
    ADC_RegularChannelConfig(PHOTO_ADC, PHOTO_CHANNEL, 1, ADC_SampleTime_55Cycles5);

    // ADC 启动
    ADC_Cmd(PHOTO_ADC, ENABLE);
}

void delay(uint32_t time)
{
    uint32_t i;
    for (i = 0; i < time * 1000; i++);
}

程序功能

  1. 初始化 GPIO 和 ADC 模块
  2. 在主循环中读取光敏电阻模块的 ADC 值
  3. 根据 ADC 值控制 LED 灯的开关状态
  4. 使用延时函数实现循环间隔时间

注意事项

  • 该程序仅供参考,实际应用中需要根据具体硬件和需求进行调整
  • 使用光敏电阻模块时,需要根据光照强度选择合适的阈值
  • 延时函数的精度取决于循环次数和 MCU 的运行频率

总结

本程序示例展示了使用 STM32 的 GPIO 和 ADC 模块实现光敏电阻控制 LED 灯的简单方法。通过调整程序代码和参数,可以实现更复杂的功能。

STM32 光敏电阻控制LED灯程序示例

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

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