Во незатейливый код полностью
Код: Выделить всё
#include <tiny2313.h>
#define BUT_MINYS 0x0E
#define BUT_PLUS 0x0B
bit flg_drebezg;
unsigned char kanal,bytton, x;
unsigned int drebezg, kadr,temp_speed;
char led []={0b01000001,0b10000010,0b00100001,0b10000100,0b00010001,0b10001000,0b00100010,0b01000100,0b00010010,0b01001000,0b00010100,0b00101000};
const unsigned int yzor1 []= {0b100000000000,0b010000000000,0b001000000000,0b000100000000,0b000010000000,0b000001000000,
0b000000100000,0b000000010000,0b000000001000,0b000000000100,0b000000000010,0b000000000001,
0b100000000000,0b110000000000,0b111000000000,0b111100000000,0b111110000000,0b111111000000,
0b111111100000,0b111111110000,0b111111111000,0b111111111100,0b111111111110,0b111111111111,
0b011111111111,0b001111111111,0b000111111111,0b000011111111,0b000001111111,0b000000111111,
0b000000011111,0b000000001111,0b000000000111,0b000000000011,0b1111000000000001};
eeprom unsigned int speed=50;
//*******************************************************************************//
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
kanal++; if (kanal==12) kanal= 0;
if ((kadr<<kanal+4>>15) == 1) {PORTB= led[kanal];} else PORTB=0;
drebezg++; if (drebezg==200) flg_drebezg=1;
temp_speed++;
}
void main(void)
{
PORTB=0x00;DDRB=0xFF;
PORTD=0x7F;DDRD=0x00;
TCCR0A=0x02;
TCCR0B=0x03;
OCR0A=0xAD;
TIMSK=0x01;
ACSR=0x80;
#asm("sei")
while (1)
{
bytton=PIND&0x0F;
if ((flg_drebezg==1) && (bytton != 0x0F)) {drebezg=0; flg_drebezg=0;} else {bytton=0;}
if (bytton==BUT_MINYS ) {speed=speed+10; if(speed==1000) speed=990; }
if (bytton==BUT_PLUS) {speed=speed-10; if(speed == 0) speed=10; }
if (temp_speed >= speed)
{
temp_speed=0;
kadr=yzor1[x];
x++; if((yzor1[x-1]) >= 0xf000) {x=0;}
}
};
}
. Дико извиняюсь за попытку дезинформации, надо быть внимательнее.