【20】PWM-呼吸灯
本课资源下载
共 1 个资源P20PWM呼吸灯
本节课的标准源代码工程/可供参考
课程笔记
本节目标概括
创建main.c > 编写点灯代码 > 编译HEX文件 > 下载到学习板 > 呼吸灯亮灭
PWM驱动库代码介绍
C语言1/*2 * @brief 初始化PWM功能3 * @param freq_hz PWM频率 单位Hz(变量范围0~65535Hz)4 * @param resolution PWM分辨率 即每个周期分成多少步(变量范围1~255,步数越多占空比调整越细腻,但CPU占用越高)5 * @note ⚠️注意:建议频率*分辨率不超过10KHz(极限),否则CPU占用过高,几乎卡死其他逻辑⚠️6 */7void PWM_Init(unsigned int freq_hz, unsigned char resolution);8// 设置各通道的占空比9void PWM_SetDuty(unsigned char channel, unsigned int duty);10// 设置个通道占空比百分比 0~10011void PWM_SetDutyPercent(unsigned char channel, unsigned char percent);12// 获取单个通道占空比13unsigned int PWM_GetDuty(unsigned char channel);
主函数:
- 现象:右下角LED呈现呼吸灯效果
C语言
1#include <stc89c5xrc.h>2#include "Delay.h"3#include "UART.h"4#include "PWM.h"56#define LED_BREATHING_MIN 25 // 呼吸灯最小占空比(过低会导致LED完全熄灭)7#define LED_BREATHING_MAX 95 // 呼吸灯最大占空比(过高会导致LED完全点亮)8#define LED_BREATHING_DELAY_TIME 3 // 呼吸灯调光间隔延时时间910void main()11{12 unsigned char p;1314 PWM_Init(100, 100); // PWM频率100Hz,分辨率100步(每步1%占空比)1516 PWM_SetDutyPercent(3, 0); // P45 即DAC输出通道(连接右下角LED呼吸灯)1718 while (1)19 {20 // 呼吸灯(P4.5)21 for (p = LED_BREATHING_MIN; p < LED_BREATHING_MAX; p++)22 {23 PWM_SetDutyPercent(3, p);24 delay(LED_BREATHING_DELAY_TIME);25 }26 for (p = LED_BREATHING_MAX; p > LED_BREATHING_MIN; p--)27 {28 PWM_SetDutyPercent(3, p);29 delay(LED_BREATHING_DELAY_TIME);30 }31 }32}