/* * lesson15.1.c * * Created: 15.10.2025 8:05:17 * Author : Maxim */ # define F_CPU 8000000UL #include #include #include unsigned int res_1000 = 0, res_100 = 0, res_10 = 0, res_1 = 0, z = 0, count = 0, timer_count = 0; void obrabotka(int cifra) { PORTC &= ~((1<<3) | (1<<2) | (1<<1) | (1<<0)); PORTD &= ~((1<<7) | (1<<6) | (1<<5) | (1<<4)); switch(cifra) { case 0: PORTC |= (1<<3) | (1<<2) | (1<<1) | (1<<0); PORTD |= (1<<5) | (1<<4); break; case 1: PORTC |= (1<<2) | (1<<1); break; case 2: PORTC |= (1<<3) | (1<<1) | (1<<0); PORTD |= (1<<6) | (1<<4); break; case 3: PORTC |= (1<<3) | (1<<2) | (1<<1) | (1<<0); PORTD |= (1<<6); break; case 4: PORTC |= (1<<2) | (1<<1); PORTD |= (1<<5) | (1<<6); break; case 5: PORTC |= (1<<3) | (1<<2) | (1<<0); PORTD |= (1<<5) | (1<<6); break; case 6: PORTC |= (1<<3) | (1<<2) | (1<<0); PORTD |= (1<<6) | (1<<5) | (1<<4); break; case 7: PORTC |= (1<<2) | (1<<1) | (1<<0); break; case 8: PORTC |= (1<<3) | (1<<2) | (1<<1) | (1<<0); PORTD |= (1<<6) | (1<<5) | (1<<4); break; case 9: PORTC |= (1<<3) | (1<<2) | (1<<1) | (1<<0); PORTD |= (1<<6) | (1<<5); break; default: break; } } void chislo(unsigned int result) { res_1000 = result / 1000; res_100 = result % 1000 / 100; res_10 = result % 100/10; res_1 = result % 10; } ISR(TIMER0_OVF_vect) { if (++z > 4) {z = 1;} if (z==1) { PORTB &= ~(1<<2); PORTB |= (1<<5) | (1<<4) | (1<<3); obrabotka(res_1000); } if (z==2) { PORTB &= ~(1<<3); PORTB |= (1<<5) | (1<<4) | (1<<2); obrabotka(res_100); } if (z==3) { PORTB &= ~(1<<4); PORTB |= (1<<5) | (1<<3) | (1<<2); obrabotka(res_10); } if (z==4) { PORTB &= ~(1<<5); PORTB |= (1<<4) | (1<<3) | (1<<2); obrabotka(res_1); } } // ISR(INT0_vect) // { // timer_count = TCNT1 + (count*65536); // TCNT1 = 0; // count = 0; // } // // ISR(TIMER1_OVF_vect) // { // count++; // } int main(void) { DDRC |= (1<<3) | (1<<2) | (1<<1) | (1<<0); PORTC &= ~((1<<3) | (1<<2) | (1<<1) | (1<<0)); DDRD |= (1<<7) | (1<<6) | (1<<5) | (1<<4); PORTD &= ~((1<<7) | (1<<6) | (1<<5) | (1<<4)); //У нас 7сегментник с общим катодом, по умолчанию "земля закрыта" DDRB |= (1<<5) | (1<<4) | (1<<3) | (1<<2); PORTB &= ~((1<<5) | (1<<4) | (1<<3) | (1<<2)); //Выход частотомера DDRD &= ~(1<<2); PORTD |= (1<<2); //Настраиваем 0 и 1 таймер-счётчик TCCR0 |= (1<