nRF51822没有PWM输出,所以不能直接通过PWM方式做呼吸灯。但是我们可以利用定时器,在定时器中自己修改LED的亮和灭的时间(软件PWM),产生呼吸灯的效果。
#include "mbed.h"
DigitalOut LED(p30);
Ticker tmr;
Ticker BreathingLamp;
uint8_t BreathingLamp_cnt = 0;
uint8_t BreathingLamp_duty = 128;
uint8_t dt = 2;
void BreathingLamp_isr()
{
BreathingLamp_cnt += 4;
if(BreathingLamp_cnt < BreathingLamp_duty)
LED = 1;
else
LED = 0;
}
void tmr_isr()
{
BreathingLamp_duty += dt;
if((BreathingLamp_duty == 255) || (BreathingLamp_duty == 0))
{
dt = -dt;
}
}
int main() {
BreathingLamp.attach_us(&BreathingLamp_isr, 320);
tmr.attach_us(&tmr_isr, 10000);
while(1) {
}
}
和硬件PWM效果相比,软件PWM占用CPU时间,也不能做到很高的频率,效果要差一些。
|