Есть две кнопки, одна запускает первый таймер и заставляет мигать светодиод. При нажатии на вторую: 1 таймер останавливается, запускается второй, начинает мигать другой диод, значения времени должны сохраняться. Как я думал: мне необходимо описать две функции, и потом, в зависимости с какой кнопки приходит сигнал, запускать либо одну функцию, либо другую.
Все данные выводятся на LCD.
Код: Выделить всё
#include <mega8515.h>
#asm
.equ __lcd_port=0b00011000 ;PORTB
#endasm
#include <lcd.h>
#include <delay.h>
int sb = 0;
int mb = 0;
int chb = 0;
int sr = 0;
int mr = 0;
int chr = 0;
void main(void)
{
DDRA=0b11111111;
PORTA=0b00000000;
DDRD=0b00000000;
PORTD=0b11111111;
GICR=0b11000000;
MCUCR=0b00000100;
TCCR1A=0b00000000;
TCCR1B=0b00000101;
TCNT1H=0b00000000;
TCNT1L=0b00000000;
ICR1H=0b00000000;
ICR1L=0b00000000;
OCR1AH=0b00011110;
OCR1AL=0b10000101;
TIMSK=0b00010000;
lcd_init(16);
#asm("sei")
void red(void) // первая функция
{ lcd_gotoxy(0,0);
lcd_putsf("Blue");
lcd_gotoxy(8,0);
lcd_putchar(chb/10+0x30);
lcd_putchar(chb%10+0x30);
lcd_putchar(0x3A);
lcd_putchar(mb/10+0x30);
lcd_putchar(mb%10+0x30);
lcd_putchar(0x3A);
lcd_putchar(sb/10+0x30);
lcd_putchar(sb%10+0x30);
while (PIND.0==1)
{
PORTA.0=0; delay_ms(3000);
PORTA.0=1; delay_ms(500);
sr++;
if(sr>59)
{
mr++;
sr=0;
if(mr>59)
{
chr++;
mr=0;
if(chr>23)
{
chr=0;
}
}
}
}
}
void blue(void) // вторая функция
{
while (PIND.1==1)
{
PORTA.7=0; delay_ms(3000);
PORTA.7=1; delay_ms(500);
sb++;
if(sb>59)
{
mb++;
sb=0;
if(mb>59)
{
chb++;
mb=0;
if(chb>23)
{
chb=0;
}
}
}
lcd_gotoxy(0,1);
lcd_putsf("Red");
lcd_gotoxy(8,1);
lcd_putchar(chr/10+0x30);
lcd_putchar(chr%10+0x30);
lcd_putchar(0x3A);
lcd_putchar(mr/10+0x30);
lcd_putchar(mr%10+0x30);
lcd_putchar(0x3A);
lcd_putchar(sr/10+0x30);
lcd_putchar(sr%10+0x30);
}
}
}
only pure true norwegian blackx 

