//display numbers from 0000-9999
//display numbers from 000.0 - 999.9
#include <stdint.h>
#define DDRA (*(volatile uint8_t*)0x21)
#define PORTA (*(volatile uint8_t*)0x22)
#define DDRB (*(volatile uint8_t*)0x24)
#define PORTB (*(volatile uint8_t*)0x25)
uint8_t seg[10] = {
0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F
};
void delay_small(void){
for(volatile uint16_t i=0;i<2000;i++);
}
int main(void){
DDRA = 0xFF; // segments
DDRB = 0x0F; // digit enable PB0–PB3
uint16_t count = 0;
while(1){
for(uint16_t refresh=0; refresh<300; refresh++){
uint8_t d1 = count % 10;
uint8_t d2 = (count/10) % 10;
uint8_t d3 = (count/100) % 10;
uint8_t d4 = (count/1000);
PORTB = 0x00; PORTA = seg[d1]; delay_small();
PORTB = 0x00; PORTA = seg[d2]; delay_small();
PORTB = 0x00; PORTA = seg[d3]; delay_small();
PORTB = 0x00; PORTA = seg[d4]; delay_small();
}
count++;
if(count == 10000) count = 0;
}
}