кто может прокомментировать код на Си?
Очень нужно, думаю многим пригодится
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>
#include "font.h"
const prog_char message[] = " \003\001 Hello World! Write message here! ";
unsigned char message_length = 0;
unsigned int display_idx = 0;
unsigned char scan_idx = 0;
unsigned int signal_cnt = 0;
unsigned int speed = 200;
unsigned char display[8] = {0,0,0,0,0,0,0,0};
SIGNAL(SIG_OVERFLOW0) {
if(PIND & _BV(PIND6)) {
signal_cnt++;
} else {
speed = 200;
}
if(signal_cnt>speed) {
signal_cnt = 0;
speed -= 40;
if( speed < 40 ) {
speed = 40;
}
unsigned char i;
for(i=0; i<8; i++) {
unsigned char char_idx = (display_idx+i)%4;
unsigned char msg_idx = ((display_idx+i-char_idx)/4)%message_length;
display[i] = pgm_read_byte(font+(pgm_read_byte(message+msg_idx))*4+char_idx);
}
display_idx++;
if(display_idx>(message_length+2)*4-9) {
display_idx = 0;
}
}
PORTB = ~(0x000000001 << scan_idx);
PORTD = display[scan_idx];
scan_idx++;
if(scan_idx>6) {
scan_idx = 0;
}
}
int main(void) {
message_length = strlen_P(message);
signal_cnt = speed+1;
DDRB = 0b01111111;
PORTB= 0b01111111;
DDRD = 0b00011111;
PORTD= 0b00000000;
TCNT0 = 0;
TIMSK = _BV(TOIE0);
TCCR0 = 3;
sei();
for(;;) {
asm("sleep");
}
return 0;
}

