[其它应用] 基于中颖MCU的PWM控制LED亮度应用示例

[复制链接]
 楼主| 帛灿灿 发表于 2024-10-4 08:32 | 显示全部楼层 |阅读模式
最近我在使用中颖MCU(如NY8A系列)做一个简单的LED亮度调节项目,通过PWM(脉宽调制)技术来实现。PWM广泛用于电机控制、LED亮度调节等场景,原理是通过控制开关的占空比来调节输出的平均电压或功率。

应用场景本项目的主要目标是通过一个按键来控制LED亮度的增减,并且通过PWM信号调节LED亮度。按键按一次,亮度增加一个级别,按到最大后再按会返回最暗。

硬件准备
  • 中颖NY8A系列MCU开发板
  • LED灯
  • 按键
  • 5V电源

代码实现下面是我用中颖MCU写的简单PWM控制LED亮度的代码。
  1. #include <NY8A051D.h>

  2. // 定义PWM周期和亮度级别
  3. #define PWM_PERIOD 255
  4. #define BRIGHTNESS_LEVELS 5

  5. unsigned char brightness = 0;  // 当前亮度级别

  6. // PWM初始化函数
  7. void PWM_Init() {
  8.     PWMDIV = 0x00;  // 设置PWM分频
  9.     PWMP = PWM_PERIOD;  // 设置PWM周期
  10.     PWMCKS = 0x01;  // 启用PWM
  11.     PWMCR = 0x01;   // 启用PWM通道
  12. }

  13. // 设置PWM占空比
  14. void Set_PWM_Duty(unsigned char duty) {
  15.     PWMD = duty;  // 设置占空比
  16. }

  17. // 按键处理函数
  18. void Button_Handler() {
  19.     if (!P3_2) {  // 如果按键按下
  20.         brightness = (brightness + 1) % BRIGHTNESS_LEVELS;  // 循环切换亮度级别
  21.         Set_PWM_Duty(brightness * (PWM_PERIOD / (BRIGHTNESS_LEVELS - 1)));  // 更新PWM占空比
  22.         while (!P3_2);  // 等待按键释放
  23.     }
  24. }

  25. void main() {
  26.     PWM_Init();  // 初始化PWM
  27.     Set_PWM_Duty(0);  // 初始亮度为0
  28.    
  29.     while (1) {
  30.         Button_Handler();  // 按键控制
  31.     }
  32. }
代码说明
  • PWM_Init(): 初始化PWM模块,设置PWM的周期和分频等参数。
  • Set_PWM_Duty(): 设置占空比,用来控制LED的亮度。
  • Button_Handler(): 处理按键输入,当按键被按下时,改变亮度级别并更新PWM占空比。
  • 主循环中一直监听按键的状态,每次按下按键,LED的亮度就会改变。

应用效果通过按键,LED亮度从低到高逐步变化,非常适合需要动态调整LED亮度的场景。整个代码结构简单清晰,适合初学者学习PWM应用。

总结中颖MCU在低功耗和性价比方面都有不错的表现,在嵌入式开发中非常实用。希望这个简单的PWM控制LED亮度的例子能对大家有帮助!如果有任何问题或者改进建议,欢迎讨论!

公羊子丹 发表于 2024-10-4 08:33 | 显示全部楼层
这个例子太实用了!刚好我也在做PWM控制LED的项目,代码结构简洁明了,点赞!
周半梅 发表于 2024-10-4 08:33 | 显示全部楼层
原来PWM可以这么简单就调节LED亮度,学习了!下次我也试试用中颖的MCU来做。
童雨竹 发表于 2024-10-4 08:33 | 显示全部楼层
按键控制亮度的方式很方便啊!有没有试过加个长按功能,快速调节亮度?
万图 发表于 2024-10-4 08:33 | 显示全部楼层
中颖的MCU用起来感觉如何?相比其他品牌的,有什么特别的优势吗?
Wordsworth 发表于 2024-10-4 08:34 | 显示全部楼层
感谢分享!一直想做个简单的LED调光项目,这下有参考了。
Bblythe 发表于 2024-10-4 08:34 | 显示全部楼层
这段代码是不是还可以扩展下,多加几个LED同时控制?
Pulitzer 发表于 2024-10-4 08:34 | 显示全部楼层
挺有意思的项目!PWM用在电机控制上是不是也是同样的原理?
Uriah 发表于 2024-10-4 08:35 | 显示全部楼层
按键控制亮度的思路很棒,不过我觉得如果加个调光旋钮,体验可能会更好。
Clyde011 发表于 2024-10-4 08:35 | 显示全部楼层
我用的不是中颖的MCU,但是这个代码应该可以稍微改改用在别的芯片上吧?
classroom 发表于 2024-10-4 19:13 | 显示全部楼层
非常棒的应用示例,楼主分享的好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

149

主题

5848

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部