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时间,也不能做到很高的频率,效果要差一些。
欢迎光临 烽火社区 (http://bbs.cnecport.com/) | Powered by Discuz! X3.2 |