Лабораторная работа включает в себя несколько фронтальных и индивидуальных заданий:
1. Написать программу проверки состояния кнопок
Для этого функцию main прототипа проекта необходимо модифицировать следующим образом:
void main (void)
{
// Настроить порт
SCS |= 0x01; //Разрешить быстрый ввод/вывод
FIO0DIR = 0x00000000; // Все разряды порта 0 на ввод для чтения состояния кнопок и энкодера
FIO0MASK = 0; //Все разряды порта 0 работают в быстром режиме
FIO2DIR = 0x00FF; // Биты 0-7 порта 2 на вывод для управления светодиодами
FIO2MASK = 0; //Все разряды порта 2 работают в быстром режиме
while (1)//Loop forever
{
if( FIO0PIN & 0x0020 ) // Проверка кнопки 1, подключенной к P0.5
//(0010 0000 в двоичном коде или 0x0020)
{
FIO2PIN = 0x00; // Выключить все светодиоды, если кнопка не нажата
}
else
{
FIO2PIN = 0x01; // Включить первый светодиод, если кнопка нажата
}
}
}
В данном примере производится проверка состояния только одной кнопки и без подавления дребезга контактов. После проверки работоспособности данного примера необходимо модифицировать программу таким образом, чтобы производилась проверка состояния всех кнопок BTN1-BTN4 с отображением на светодиодах.
2. Написать программу проверки состояния кнопок с подавлением дребезга контактов
Для подавления дребезга контактов необходимо опрашивать состояние кнопок с определенной периодичностью и следить за изменением их состояния. В простейшем случае можно воспользоваться функцией задержки из предыдущей лабораторной работы. Кроме того необходимо использовать две переменных – одна будет содержать предыдущее состояние кнопки, а другая текущее. Если при сравнении переменные окажутся не равны, то это означает факт обнаружения момента нажатия или отпускания кнопки.
Для этого функцию main прототипа проекта необходимо модифицировать следующим образом:
int BTN1_cur, BTN1_prev; //Глобальные переменные текущего и предыдущего состояний
void main (void)
{
// Настроить порт
SCS |= 0x01; //Разрешить быстрый ввод/вывод
FIO0DIR = 0x00000000; // Все разряды порта 0 на ввод для чтения состояния кнопок и энкодера
FIO0MASK = 0; //Все разряды порта 0 работают в быстром режиме
FIO2DIR = 0x00FF; // Биты 0-7 порта 2 на вывод для управления светодиодами
FIO2MASK = 0; //Все разряды порта 2 работают в быстром режиме
BTN1_cur = BTN1_prev = FIO0PIN & 0x0020; //Чтение начального состояния кнопки 1
while (1)//Loop forever
{
if( GetBTN1State() )
{
FIO2PIN = 0x01; //Вкл. первый светодиод в момент нажатия кнопки
}
Delay( 100 ); //Задержка между опросами состояния >10 мсек
}
}
int GetBTN1State()
{
int state = 0;
BTN1_cur = FIO0PIN & 0x0020; // //Чтение текущего состояния кнопки 1
if( BTN1_cur != BTN1_prev) //Если состояние изменилось
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.