写一个九齐单片机ny8tm52d的一个pwm寄存器呼吸灯代码
时间: 2024-01-21 17:19:03 浏览: 155
呼吸灯代码
以下是一个基于九齐单片机ny8tm52d的PWM寄存器呼吸灯代码:
```
#include <ny8.h>
#define PWM_PORT PB
unsigned char cnt = 0;
unsigned char duty = 0;
unsigned char pwmValue = 0;
void pwm_init() {
PWM_PORT = 0x00; // 初始化PWM端口
T16M = 1; // 启动16M晶振
CLK_DIV = 0x00; // 不分频
TMR3RH = 0x0A; // 自动重装初值高字节
TMR3RL = 0x00; // 自动重装初值低字节
TMR3ON = 1; // 启动定时器
P3M1 |= 0x01; // P3.0设置为PWM输出
P3M2 |= 0x01; // P3.0设置为PWM输出
pwmValue = 0;
}
void main() {
pwm_init();
while (1) {
if (cnt >= 100) {
if (duty == 0) {
pwmValue++;
if (pwmValue >= 100) {
duty = 1;
}
} else {
pwmValue--;
if (pwmValue == 0) {
duty = 0;
}
}
PWMDTY3H = 0x00; // PWM占空比高字节
PWMDTY3L = pwmValue; // PWM占空比低字节
cnt = 0;
}
cnt++;
}
}
```
这段代码会让LED灯按照呼吸灯的方式周期性地闪烁,通过PWM寄存器来控制LED灯的亮度。代码中的pwm_init函数会初始化PWM端口,启动16M晶振,不分频,设置TMR3RH和TMR3RL为自动重装初值高/低字节,然后启动定时器。在主函数中,我们使用一个简单的逻辑来控制PWM占空比和LED灯的亮度。具体而言,我们使用一个cnt变量来计数,每次cnt达到100时,我们会根据duty变量的值来增加或者减少PWM占空比,从而实现LED灯的呼吸灯效果。
阅读全文