LED-STM32单片机驱动单色LED和RGB全彩LED亮灭与呼吸灯代码

目录

LED

硬件接线

模块代码

GPIO控制LED亮灭

led.h

led.c

PWM呼吸灯

PWM.h

PWM.c

 main.c

RGB三色LED

三基色原理

模块介绍

硬件接线

模块代码

RGB_led.h

RGB_led.c

main.c

视频演示

LED特点与优势


主控芯片STM32F103C8T6

LED

LED(Light Emitting Diode)又叫发光二极管,是采用固体半导体芯片发光材料,与传统灯具相比,LED灯节能、环保、显色性响应速度好。

注意!!!

LED 发光时,请勿直视发光光源,特别是对于一些光强较高的 LED,强光可能伤害你的眼睛

硬件接线

显而易见左侧(较长的一侧)接正极,右侧接负极。

本次代码正极接PA0,负极接GND。

模块代码

GPIO控制LED亮灭

led.h
#ifndef             _LED_H_
#define				_LED_H_

#define LED_ON      0
#define LED_OFF     1   

void LED_Init(void);

void  LED_SetON(void);

void  LED_SetOFF(void);

void LED_Turn(void);
#endif

led.c
#include "stm32f10x.h"                  // Device header
#include "LED.h"

void LED_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

	GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//GPIO默认输出低电平
	GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)LED_OFF);	//输出高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0)

}
void  LED_SetON(void)
{
	GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)LED_ON);	
}

void  LED_SetOFF(void)
{
	GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)LED_OFF);
}

void LED_Turn(void)
{
	if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0)==LED_ON)
	{
		LED_SetOFF();
	}
	else
	{
		LED_SetON();
	}

}

PWM呼吸灯

PWM.h
#ifndef             _PWM_H_
#define				_PWM_H_

void PWM_Init(void);
void PWM_SetCompare1(uint16_t Compare);
#endif
PWM.c
#include "stm32f10x.h"                  // Device header
#include "PWM.h"

void PWM_Init(void)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_
STM32是一款广泛应用于微控制器领域的嵌入式处理器,常用于各种物联网(IoT)消费电子项目,包括LED照明系统。要控制RGB全彩LED带,你需要遵循以下几个步骤: 1. **硬件连接**: -STM32通过GPIO接口连接到LED带。通常每个颜色通道(Red、Green、Blue)需要一组独立的输出引脚。确保连接正确并保护好电源地线。 2. **软件配置**: - 首先,在STM32的Keil MDK或CubeMX等IDE中配置GPIO作为推挽输出,设置合适的驱动强度。 - 使用HAL库或低级API管理GPIO,初始化相应的GPIOPWM模块(如果使用PWM控制LED度)。 3. **数据处理**: - 创建一个数组或者结构体来存储RGB三色的数据,比如`uint16_t led_data[] = {R, G, B}`。 - 使用循环遍历这个数组,并通过GPIO发送每个颜色值,改变LED的颜色。 4. **RGB颜色处理**: - 为了方便操作,可以编写函数分别负责改变单个颜色。例如,`void setRed(uint8_t red)`、`void setGreen(uint8_t green)``void setBlue(uint8_t blue)`。 5. **定时更新**: - 如果想要动态变化效果,可以设置定时器每隔一段时间就更新一次LED颜色。 ```c // 示例代码片段 void updateRGB(led_data_t *data) { GPIO_SetPinOutput(&GPIOA, data->red_pin); GPIO_WritePin(&GPIOA, data->red_pin, (data->red > 0)? GPIO_PIN_SET : GPIO_PIN_RESET); // 同理设置绿色蓝色 } void loop() { uint16_t current_color = get_current_color(); memcpy(led_data, &current_color, sizeof(led_data)); updateRGB(led_data); delay_ms(50); // 更新频率 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值