ATMega32U4ボード
とりあえずバーLED点灯させてみた。
// // LEDS // // PB0..7 PD0..7 PF4..7 // #include "avr/io.h" #include "avr/wdt.h" #define F_CPU 16000000UL // 16MHz #include "util/delay.h" #include <stdint.h> void init_regs(){ // clock CLKPR = 0x80; CLKPR = 0x00; // watchdog wdt_disable(); // jtag disable MCUCR = 0x80; MCUCR = 0x80; // write twice to disable. // ports DDRB = 0xff; // set all pins@PORTB to out DDRD = 0xff; DDRF = 0xf0; PORTB = 0; PORTD = 0; PORTF = 0; } #define SPEED_A 3 #define SPEED_B 7 #define NUM_LEDS 20 #define LOOP_COUNT 420 // LCM of SPEED_[AB] and NUM_LEDS int main(){ uint16_t i; uint8_t a=0, b=0, a0=0, b0=0; uint8_t loc_a, loc_b; init_regs(); while(1){ for( i=0; i < LOOP_COUNT; ++i ) { uint32_t lgt = 0; ++a0; if( a0 >= SPEED_A ) { a0 = 0; ++a; } if( a >= 2*NUM_LEDS ) a=0; loc_a = (a>=NUM_LEDS)?(2*NUM_LEDS-1-a):a; lgt |= 1L<<loc_a; ++b0; if( b0 >= SPEED_B ) { b0 = 0; ++b; } if( b >= 2*NUM_LEDS ) b=0; loc_b = (b>=NUM_LEDS)?(2*NUM_LEDS-1-b):b; lgt |= 1L<<loc_b; PORTB = ((lgt )&0xff); PORTD = ((lgt>> 8)&0xff); PORTF = ((lgt>>12)&0xf0); _delay_ms(50); } } }