pp.204-206
#include <avr/io.h> #include <util/delay.h> void pwm_PORTB(uint8_t pin, int duty){ uint8_t _pin = (1 << pin); DDRB |= _pin; // 指定されたピンのIOをOUTにし、 for(int i=0; i<100; i++){ // 1周期の間に全部で100回ループするが、 if(i < duty){PORTB |= _pin;} // そのうちdutyで指定した回数だけLEDを点けっぱなしにして、 else {PORTB &= ~_pin;} // それ以降は消しておく。 _delay_us(20); } } int main(void) { while (1) { pwm_PORTB(0, 99); // (pin=0~7, duty=0~100) } return 0; }
これがデューティ5%のとき:
これがデューティ50%のとき:
これがデューティ95%のとき: