
Решил усовершенствовать свой проект и добавить клаву 4х4. Прочел AVR240 вроде так называлась статья, но реализовывал используя ЖК а не светодиодный индикатор. К тому же клаву подключил к одному порту, ЖК к другому и програмно отправляю символ нажатой клавиши. Все вроде работает но не доконца

на порт выдаю 0xF0 и с помощью прерываний проверяю число на PIN если не равно 240, то значит нажали на кнопку и отправляюсь в функцию обработки нажатия:
Код
KeyPress(void){
//delay_ms(20); пробовал ее везде пихать :)
switch (PINB) {
case 224: key = 0;
delay_ms(10);
break;
case 208: key = 4;
delay_ms(10);
break;
case 176: key = 8;
delay_ms(10);
break;
case 112: key = 12;
delay_ms(10);
break;
};
PORTB = 0x0F;
DDRB = 0xF0;
delay_us(10);
switch (PINB) {
case 7: key += 0;
delay_ms(10);
break;
case 11: key += 1;
delay_ms(10);
break;
case 13: key += 2;
delay_ms(10);
break;
case 14: key += 3;
delay_ms(10);
break;
};
PORTB = 0xF0;
DDRB = 0x0F;
PORTA.2 = 1; типа флаг нажати ниче более мудрого сразу не пришло :)
}
//delay_ms(20); пробовал ее везде пихать :)
switch (PINB) {
case 224: key = 0;
delay_ms(10);
break;
case 208: key = 4;
delay_ms(10);
break;
case 176: key = 8;
delay_ms(10);
break;
case 112: key = 12;
delay_ms(10);
break;
};
PORTB = 0x0F;
DDRB = 0xF0;
delay_us(10);
switch (PINB) {
case 7: key += 0;
delay_ms(10);
break;
case 11: key += 1;
delay_ms(10);
break;
case 13: key += 2;
delay_ms(10);
break;
case 14: key += 3;
delay_ms(10);
break;
};
PORTB = 0xF0;
DDRB = 0x0F;
PORTA.2 = 1; типа флаг нажати ниче более мудрого сразу не пришло :)
}
Далее в бесконечном цикле проверяю флаг нажатия и отправляю на экран символ из "таблицы" в качестве которой использовал массив символов, а key это номер символа в массиве. Разумеется после отправки флаг сбрасываю.
PS Сильно не ругайте, а вот за дельный совет всегда благодарен буду.