Alarm clock using only Interrupts and Registers

So I have this project: a 4 digit 7 segment display that shows the mm:ss (minutes:seconds).
It counts using an internal clock and using and ISR function.
What I want to do is to set the buzzer to start at a certain time and when I press the button, the buzzer should stop.
Well, I did this with arduino functions, but I can not figure out how to implement the buzzer and the push-button with the interupts/registers.

Here is the code so far:

int n=0,s=0,m=0,ms=0;
int digit=0;
const int buzzer=13;
const int buttonPin=12;
int buttonState=0;
int noBuzz=0;
int starePC5=0;

void initTimer()
{

TCCR0B=0b01000011;
TCNT0=0;
OCR0B=250;
TIMSK0 |= 0b00000100;}

void initBuzzer()
{
PORTC|=1<<4;
TCCR1A=0b00000010;
TCCR1B=0b00011010;
}

void display(char p, char c)
{
PORTB &= 0b11110000;
PORTD &= 0b00000000;

switch(c){
case 0:
PORTD |= 0b11000000;break;//codificate 0
case 1:
PORTD |= 0b11111001;break;//codificate 1
case 2:
PORTD |= 0b10100100;break;//codificate 2
case 3:
PORTD |= 0b10110000;break;//codificate 3
case 4:
PORTD |= 0b10011001;break;//codificate 4
case 5:
PORTD |= 0b10010010;break;//codificate 5
case 6:
PORTD |= 0b10000010;break;//codificate 6
case 7:
PORTD |= 0b11111000;break;//codificate 7
case 8:
PORTD |= 0b10000000;break;//codificate 8
case 9:
PORTD |= 0b10010000;break;//codificate 9
}

switch(p){
case 1:
PORTB |= 0b00000001;break;//activare digit 1
case 2:
PORTB |= 0b00000010;break;//activare digit 2
case 3:
PORTB |= 0b00000100;break;//activare digit 3
case 4:
PORTB |= 0b00001000;break;//activare digit 4
}
delay(4);
}

ISR(TIMER0_COMPB_vect) {

digit++;
switch(digit){
case 1: display(4,s%10); break;
case 2: display(3,(s/10)%10); break;
case 3: display(2,m%10); break;
case 4: display(1,m/10%10); digit=0; break;}
if(PINC&(1<<5)) //daca apasam butonul, oprim alarma
starePC5=1;
if(starePC5==1)
noTone(buzzer);
if(s>=5 && noBuzz==0)
initBuzzer();
if (ms == 999){

value=readADC(0);
OCR2B=value;
ms=0;
s++;
if(s==60)
{s=0;
m++;
}
}
else ms++;
}

void setup() {

noInterrupts(); //disable interrupts
DDRD |= 0b11111111;
DDRB |= 0b00001111;
DDRC &=~(1<<5); //set PIN A5 as input
PORTC|=1<<5;

interrupts(); //activate interrupts

initTimer();
//pinMode(buzzer,OUTPUT);
pinMode(buttonPin,INPUT);
initBuzzer();
}

void loop() {

}