87 lines
1.6 KiB
C
87 lines
1.6 KiB
C
#include <avr/io.h>
|
|
#include <util/delay.h>
|
|
|
|
volatile uint8_t segs[15] = {
|
|
0b00111111, //0
|
|
0b00000110, //1
|
|
0b01011011, //2
|
|
0b01001111, //3
|
|
0b01100110, //4
|
|
0b01101101, //5
|
|
0b01111101, //6
|
|
0b00000111, //7
|
|
0b01111111, //8
|
|
0b01101111, //9
|
|
0b01000000, //-
|
|
0b01110000, //+
|
|
0b01000110, //-1
|
|
0b01110110, //+1
|
|
0b00000000 //Blank
|
|
};
|
|
volatile uint8_t frame[6] = {14,14, 14,14, 14,14};
|
|
|
|
void display(uint8_t z, uint8_t p) {
|
|
DDRB = (segs[z]<<1);
|
|
PORTB = (segs[z]<<1);
|
|
for(uint8_t i = 1;i<=p;i++) {
|
|
if(DDRB & (1<<i)) {
|
|
DDRB |= (1<<(i-1));
|
|
} else {
|
|
DDRB &= ~(1<<(i-1));
|
|
}
|
|
}
|
|
for(uint8_t i = 1;i<=p;i++) {
|
|
if(PORTB & (1<<i)) {
|
|
PORTB |= (1<<(i-1));
|
|
} else {
|
|
PORTB &= ~(1<<(i-1));
|
|
}
|
|
}
|
|
DDRB |= (1<<p);
|
|
PORTB &= ~(1<<p);
|
|
}
|
|
void render() {
|
|
for(uint8_t f = 0;f<6;f++) {
|
|
display(frame[f],(5-f)+2);
|
|
_delay_us(2000);
|
|
}
|
|
}
|
|
|
|
int main(void) {
|
|
DDRB = 0;
|
|
while(1){
|
|
//frame = {14,5, 14,5, 14,5};
|
|
frame[0] = 11;
|
|
for(uint8_t l=0;l<10;l++) {
|
|
frame[2] = 9-l;
|
|
for(uint8_t k=0;k<10;k++) {
|
|
frame[3] = 9-k;
|
|
for(uint8_t j=0;j<10;j++) {
|
|
frame[4] = 9-j;
|
|
for(uint8_t i=0;i<10;i++) {
|
|
frame[5] = 9-i;
|
|
render();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/*DDRB = 0b11100110;
|
|
PORTB = 0b11000110;
|
|
_delay_ms(5);
|
|
DDRB = 0b11111101;
|
|
PORTB = 0b11101101;
|
|
_delay_ms(5);
|
|
DDRB = 0b10111011;
|
|
PORTB = 0b10110011;
|
|
_delay_ms(5);
|
|
DDRB = 0b01111111;
|
|
PORTB = 0b01111011;*/
|
|
/*display(0,2);
|
|
_delay_ms(10);
|
|
display(0,3);
|
|
_delay_ms(10);
|
|
display(10,7);
|
|
_delay_ms(10);*/
|
|
}
|
|
}
|