Поумничаю немного, люблю я это дело.
Советую разложить все по полочкам, т.е. для лучшего понимания использовать сначала обобщения в виде отдельных функций, а уж потом детализацию этих функций.
Судя по коду у вас есть какие-то кнопки. Давайте возложим работу с кнопками на функцию, допустим, get_key_pressed(), которая будет нам возвращать 0, если ни одна кнопка не нажата или номер нажатой кнопки. для номеров кнопок введем константы типа KEY_xxxx. Как она будет оределять нажатие - пока оставляем за кадром. в итоге главый цикл у нас превращается в такое:
Код: Выделить всё
while (1) {
vremya(); // вывели время
timer(); // вывели таймер
switch(get_key_pressed()){
case KEY_START: // выполним, что необходимо для старта таймера
break;
case KEY_STOP: // выполним, что необходимо для остановки таймера
break;
// если есть другие кнопки - аналогично обработаем их
}
}
у нас получился понятный, легко читаемый и легко изменяемый код.
состояние таймера у вас хранится в переменных sec1 и min1. про неудачные названия я промолчу.
чтобы таймер считал, надо в обработчике прерываний проверить значение этих переменных на 0 и, если они не равны нулю, произвести их уменьшение, т.е. выполнить обратный счет.
это означает добавление в обработчик таймера вместо "бла бла бла" примерно такого кода:
Код: Выделить всё
if((sec1+min1) != 0){
if(sec1 == 0){
sec1 = 59;
min1--;
} else {
sec1--;
}
}
надеюсь, вы понимаете, что этот код будет каждую секунду уменьшать время таймера, если оно не обнулено. что делать (и в каком месте делать), когда таймер обнулится - это решать вам.
остается написать функцию работы с кнопками. в сущности, она будет простой: опросили все пины, к которым подключены кнопки, подождали 15 мс, опросили второй раз и сравнили с результатом предыдущего опроса. если оба раза получилось одно и то же - это есть зафиксированное состояние кнопок без дребезга, надо его проанализировать: если все не нажаты, вернуть 0, а если нажаты - выдать номер нажатой в виде константы KEY_xxxx, как договорились.
я рассказал о том, как решать придуманную мной задачу с обратным счетом таймера. она может не совпасть с вашей задумкой - надеюсь, вы это понимаете и не ждете от меня готового решения ВАШЕЙ задачи. я даю намеки, советы, а вы с их помощью решаете свои задачи. в частности, вам давали совет про флаг "активности таймера" - это в моем коде никак не учтено, но может быть учтено очень просто.
если написанное мной вам понравилось, как методика разработки программы, рекомендую прочесть
мою статью по этой теме, чтобы еще сильнее проникнуться принципом написания программы "от общего к частному".