基于STM32R8智能路灯(进图条显示)

本文介绍了基于STM32R8的智能路灯设计,利用PWM实现天亮渐暗、天黑渐亮的效果,并通过OLED屏幕以进度条形式展示亮度控制,探讨了主程序与PWM的实现细节,以及如何解决OLED显示的闪屏问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近看到家里面安装的节能灯,白天自动熄灭,天黑逐渐变亮,想到之前学习的时候老师布置作业用PWM控制LED,写个智能路灯并用进度条显示,今晚趁着有心情把内容改改,发上论坛

一、智能路灯是什么?

现在电子技术越来越成熟,各式各样的产品转向智能化,连路灯也不例外,变成了一个稍微智能的灯,在天逐渐变亮时,灯光渐渐变暗,天黑与之相反,此设计大大的人性化和节能化的运用产品。

二、使用步骤

1.主程序

我这里的亮度和进度条就用档位控制(5个档位),用档位控制其实更智能和节能,在一个设置的档位范围,防止外在环境的一点小变化而引发微控制器(MCU)程序发生变化,产生额外的功耗(虽说MCU本身功耗就很小,但我们要不断的把东西给做好,不断地优化,才能做出更好的东西)。

进度条显示这里我用的是OLED屏幕显示,用到画点、画线函数。为了进度条的滚动很流畅,我用了个小算法让它平滑的滚动。 注意, GRAM[][]这里画线显示和字符显示这里要同时用,如果画线用GRAM[][],字符不用,两个用在一起时字符显示会出现闪屏(怎么解决闪屏?我这里尝试过最好的方法效果是字符显示放在定时器中断用10MS处理显示,才基本不会闪屏,但是会有其他一些小bug,而且定时中断也不建议用显示函数)

int main(void)
{
    int n = 2, flag = 0, a = 0,  c = 20, d = 0;
    Delay_Init(72);
    Usart1_Init(115200);
    W25Q64_Init();
    ADC1_Init();
    OLED_Init();
    PWM_Init(72, 1000);
        printf("串口调试成功\r\n");
    picture.next_state = 1;//赋初始值

    while (1)
    {
        ADC1_Fliter();
        if (ADC_DMA_LVBO[2] > 3500)                                                                           picture.flag = 1;  //1挡
     
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr'K123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值