前言
本章文章是基于STM32做的一个led跑马灯设计,现代用途广泛主要包括下述几个方面:
显示屏和交通讯号显示光源的应用:由于LED灯具有抗震耐冲击、光响应速度快、省电和寿命长等特点,它广泛应用于各种室内、户外显示屏,如全色、双色和单色显示屏。另外,交通信号灯也主要使用超高亮度红、绿、黄色LED,因为LED信号灯既节能,可靠性又高,所以在全国范围内,交通信号灯正在逐步更新换代,推广速度快,市场需求量很大。
汽车工业上的应用:汽车用灯包含汽车内部的仪表板、音响指示灯、开关的背光源、阅读灯和外部的刹车灯、尾灯、侧灯以及头灯等。由于LED响应速度快,可以及早提醒司机刹车,减少汽车追尾事故。在发达国家,使用LED制造的中央后置高位刹车灯已成为汽车的标准件。此外,在汽车仪表板及其他各种照明部分的光源,都可用超高亮度发光灯来担当,所以均在逐步采用LED显示。
背光源:LED以高效侧发光的背光源最为引人注目,作为LCD的背光源,LED的高效能和长寿命使其在这一领域有着广泛的应用。
LED跑马灯的工作原理及特点
1.工作原理
LED灯带由多个LED灯珠组成,每个灯珠连接到一个驱动电源上。
驱动电源通过发出特定的电流信号来控制每个LED灯珠的亮灭状态。
在跑马灯效果中,LED灯带的每个LED灯珠依次亮起并逐个熄灭,然后顺序循环播放。
2.特点
节能环保:LED跑马灯采用LED灯珠,相比传统灯泡,具有低能耗、高亮度和长寿命的特点,节电效果显著。
易于更新:可以通过电脑或控制器进行内容的更新,方便快捷,广告商或商场管理方能够根据需要随时更改展示的信息。
广告效果:醒目的特点吸引了人们的注意,能够迅速传递信息和广告内容,滚动的动态效果更容易引起观众的兴趣和注意。
空间利用率高:通常安装在墙面或天花板上,不占据地面空间,既节省了空间,又能够更好地展示广告信息。
项目设计目标
用stm32设计一个跑马灯,可以通过按键切换
一、硬件设置
需要用到STM32开发板带led灯珠
1.硬件组成
核心芯片:STM32微控制器芯片,是整个开发板的核心。
外设接口:包括UART、SPI、I2C等接口,方便与外部设备通信。
开发调试接口:如SWD接口,用于程序调试和烧录。
电源管理:包含电源管理芯片,确保开发板的稳定运行。
辅助原件:还包括按键、LED灯等,方便用户进行输入和输出测试。
2、三色led原理图
二、软件程序
开发环境:支持多种开发环境,如Keil、IAR、STM32CubeMX等,开发者可以根据自身需求选择。
1、各部分初始化
(1)led时钟初始化
通过开发板资料了解led灯珠相对应的引脚,配置引脚。
GPIO_InitTypeDef gpio_info;//定义初始化结构体
//初始化DPIOH时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//使能GPIO时钟
gpio_info.GPIO_Mode = GPIO_Mode_OUT;//配置模式
gpio_info.GPIO_OType = GPIO_OType_PP;
gpio_info.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;//配置IO口
gpio_info.GPIO_PuPd = GPIO_PuPd_UP;
gpio_info.GPIO_Speed = GPIO_Low_Speed;//配置IO口速度
//配置IO
GPIO_Init(GPIOH,&gpio_info);
(2)按键初始化
初始化按键,配置相对应端口
//KEY1 连接到IO口 PA0
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
gpio_info.GPIO_Mode = GPIO_Mode_IN;//配置模式
gpio_info.GPIO_OType = GPIO_OType_PP;
gpio_info.GPIO_Pin = GPIO_Pin_0;//配置IO口
gpio_info.GPIO_PuPd = GPIO_PuPd_NOPULL;
gpio_info.GPIO_Speed = GPIO_Low_Speed;//配置IO口速度
GPIO_Init(GPIOA,&gpio_info);
//KEY1 连接到IO口 PC13
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
gpio_info.GPIO_Mode = GPIO_Mode_IN;//配置模式
gpio_info.GPIO_OType = GPIO_OType_PP;
gpio_info.GPIO_Pin = GPIO_Pin_13;//配置IO口
gpio_info.GPIO_PuPd = GPIO_PuPd_NOPULL;
gpio_info.GPIO_Speed = GPIO_Low_Speed;//配置IO口速度
GPIO_Init(GPIOC,&gpio_info);
2、将所需功能写入while
while(1)
{
//读取按键状态
uint8_t key1 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
uint8_t key2 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13);
//如果是按下状态
if(key1 == 1)
{
GPIO_ResetBits(GPIOH,GPIO_Pin_10);//点亮红灯
couter++;
}
else //如果是松开状态
{
GPIO_SetBits(GPIOH,GPIO_Pin_10);//熄灭红灯
}
//如果是按下状态
if(key2 == 1)
{
GPIO_ResetBits(GPIOH,GPIO_Pin_11);//点亮绿灯
couter--;
}
else //如果是松开状态
{
GPIO_SetBits(GPIOH,GPIO_Pin_11);//熄灭绿灯
}
if(key1 == 1 && key2 == 1)
{
GPIO_SetBits(GPIOH,GPIO_Pin_10|GPIO_Pin_11);
delay(0xFFF);
GPIO_ResetBits(GPIOH,GPIO_Pin_12);//点亮蓝灯
}
else //如果是松开状态
{
GPIO_SetBits(GPIOH,GPIO_Pin_12);//熄灭绿灯
}
}
3、全文代码
#include "stm32F4xx.h"
#include "stm32f4xx_conf.h"
#include "stdio.h"
int couter = 0;
uint8_t key1;
uint8_t key2;
void delay(uint32_t ms)
{
for(;ms!=0;ms--);
}
int main(void)
{
GPIO_InitTypeDef gpio_info;//定义初始化结构体
//初始化DPIOH时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//使能GPIO时钟
gpio_info.GPIO_Mode = GPIO_Mode_OUT;//配置模式
gpio_info.GPIO_OType = GPIO_OType_PP;
gpio_info.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;//配置IO口
gpio_info.GPIO_PuPd = GPIO_PuPd_UP;
gpio_info.GPIO_Speed = GPIO_Low_Speed;//配置IO口速度
//配置IO
GPIO_Init(GPIOH,&gpio_info);
//KEY1 连接到IO口 PA0
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
gpio_info.GPIO_Mode = GPIO_Mode_IN;//配置模式
gpio_info.GPIO_OType = GPIO_OType_PP;
gpio_info.GPIO_Pin = GPIO_Pin_0;//配置IO口
gpio_info.GPIO_PuPd = GPIO_PuPd_NOPULL;
gpio_info.GPIO_Speed = GPIO_Low_Speed;//配置IO口速度
GPIO_Init(GPIOA,&gpio_info);
//KEY1 连接到IO口 PC13
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
gpio_info.GPIO_Mode = GPIO_Mode_IN;//配置模式
gpio_info.GPIO_OType = GPIO_OType_PP;
gpio_info.GPIO_Pin = GPIO_Pin_13;//配置IO口
gpio_info.GPIO_PuPd = GPIO_PuPd_NOPULL;
gpio_info.GPIO_Speed = GPIO_Low_Speed;//配置IO口速度
GPIO_Init(GPIOC,&gpio_info);
//关闭11/12
GPIO_SetBits(GPIOH,GPIO_Pin_11|GPIO_Pin_12);
while(1)
{
//读取按键状态
uint8_t key1 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
uint8_t key2 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13);
//如果是按下状态
if(key1 == 1)
{
GPIO_ResetBits(GPIOH,GPIO_Pin_10);//点亮红灯
couter++;
}
else //如果是松开状态
{
GPIO_SetBits(GPIOH,GPIO_Pin_10);//熄灭红灯
}
//如果是按下状态
if(key2 == 1)
{
GPIO_ResetBits(GPIOH,GPIO_Pin_11);//点亮绿灯
couter--;
}
else //如果是松开状态
{
GPIO_SetBits(GPIOH,GPIO_Pin_11);//熄灭绿灯
}
if(key1 == 1 && key2 == 1)
{
GPIO_SetBits(GPIOH,GPIO_Pin_10|GPIO_Pin_11);
delay(0xFFF);
GPIO_ResetBits(GPIOH,GPIO_Pin_12);//点亮蓝灯
}
else //如果是松开状态
{
GPIO_SetBits(GPIOH,GPIO_Pin_12);//熄灭绿灯
}
}
}
三、工程架构
四、总结
1、基本概念与应用场景:
LED跑马灯是一种通过控制LED灯带中不同部分的亮暗变化,呈现类似跑马灯效果的照明控制方式。这种控制方式能够创造出动态且吸引人的视觉效果,广泛应用于家居装饰、商业场所和娱乐场所等各种环境,增加了空间氛围和艺术感。
2、控制原理:
LED跑马灯的控制原理主要基于LED灯的串联或并联组成电路,并通过适当的电压和电流供给实现照明效果。控制器通过控制IC对电路进行控制,从而控制LED灯条变化出不同的效果,如闪烁、追逐、跳变、顺时针或逆时针跑马等。这种控制方式不仅限于预设的效果,还可以根据客户需要进行自定义编写。
3、环保与安全:
LED跑马灯采用的LED灯具有耗电小、产生热量小、无眩光、耐冲击等特点。此外,它通常采用低电压直流供电,如5V或12V,从而确保了使用的安全可靠性。
4、色彩与效果:
LED跑马灯的色彩丰富多样,可以根据客户需要通过控制器进行任意调节。同时,其变化效果也非常多样,包括但不限于闪烁、追逐、跳变、各种跑马效果等,甚至可以排成屏的形式显示文字、字母、图片、动画等。
5、商业应用:
在商业场所中,LED跑马灯的高亮度和均匀柔和的照明效果能够有效提升店铺的整体形象和视觉效果。它适用于商场、专卖店、酒店大堂、展览厅等多种商业环境。
综上所述,LED跑马灯以其独特的动态视觉效果、环保安全特性以及丰富的色彩和变化效果,在各个领域得到了广泛应用。