/*
ATmega8, 48, 88, 168, 328
/Reset PC6|1 28|PC5
seg_A PD0|2 27|PC4
seg_B PD1|3 26|PC3
seg_C PD2|4 25|PC2
seg_D PD3|5 24|PC1
seg_E PD4|6 23|PC0
Vcc|7 22|Gnd
Gnd|8 21|Aref
PB6|9 20|AVcc
PB7|10 19|PB5 SCK Anode_1
seg_F PD5|11 18|PB4 MISO Anode_2
seg_G PD6|12 17|PB3 MOSI Anode_3
dot PD7|13 16|PB2 Anode_4
PB0|14 15|PB1
*/
#define F_CPU 1000000UL // 1 MHz standard clock
#include <avr/io.h> // defines all macros and symbols
#include <util/delay.h> // defines time delay functions
uint8_t framebuffer[4] = {0b00111111,0b00000110,0b01011011,0b01001111};
int main (void)
{
uint8_t i;
DDRD = 0b11111111; // all pins of PORT D as output
DDRB = 0b00111100; // some pins of PORT B as output
while (1) // infinite main loop
{
for (i=0; i<4; i++)
{
PORTB &= 0b11000011; // all digits off
PORTB |= (0b00000100 << i); // activate digit #i
PORTD = ~framebuffer[i]; // output bit pattern
_delay_ms(500); // wait 500 ms
}
}
}
Comments