if (process_valid_input(new_PORTB)) // процедура
//антидребезга
{ //выполнять действия, связанные
: //с нажатием клавиши PB7
PORTC = 0х80; //зажечь зеленый в разряде PB7
keep_going = 1;
}
break;
default:
; //аll other cases
} //окончание распозвания, какая клавиша нажата (switch(new_PORTB))
} //окончание обработки нажатой клавиши (if new_PORTB)
old_PORTB = new_PORTB; //обновить PORTB
} //окончание (while(keep_going))
} //окончание (main)
/*-----------------------------------------------------------------*/
/* Функция void initialize_ports устанавливает режим работы портов */
/*-----------------------------------------------------------------*/
void initialize_ports(void) {
DDRC=0xff; //порт PORTC на вывод
PORTC=0x00; //выходы порта PORTC в 0, зажгутся красные светодиоды
DDRB=0x00; //порт PORTB на ввод
}
/*--------------------------------------------------------------------*/
/* process_valid_input: проверка стабильности PORTB в течение периода */
/* переполнения таймера */
/*--------------------------------------------------------------------*/
int process_valid_input(unsigned char portx) {
int valid_input; //флаг результата опроса порта
int int_value; //время входа в процедуру
valid_input = TRUE; //установить флаг
int_value = TCNT; //читать текущий момент времени
while (int_value != TCNT) //повторять пока значения времени снова не
//сравняются
{
if (portx==PORTB) //порт PORTB остается стабильным
valid_input = TRUE;
else //порт PORTB изменил состояние
valid_input = FALSE;
if (!valid_input) //если порт изменил состояние, то выйти
//из цикла
break;
}
return valid_input;
}
/*------------------------------------------------------------------------*/
/* Функция timer_init инициализирует таймер. Частота системной шины равна */
/*8*МГц */
/*------------------------------------------------------------------------*/
void timer_init(void) {
TMSK1 = 0х00; //запретить прерывания
TMSK2 = 0х02; //частота тактировании 2 МГц
TSCR = 0х80; //разрешить работу модуля таймера
}
/*-------------------------------------------------------------------------*/
5.6. Жидкокристаллические индикаторы
В этом разделе мы подробно рассмотрим, как подключить жидкокристаллический индикатор к МК 68HC12. Мы начнем с краткого обзора принципа действия ЖК индикаторов. Далее изучим реальный однострочный символьный индикатор на 16 знакомест со встроенным контроллером управления. Рассмотрим, как выполнить аппаратное подключение этого индикатора к МК, а затем приведем пример программы управления.
5.6.1. Краткие сведения о жидкокристаллических индикаторах