logo
Metodichka_Modul_6_red

Тема 3: Вивчення принципів організації програмного опитування клавіатури

Мета: вивчити принципи функціонування матричної клавіатури 3*4, розробити алгоритм та програму для реалізації режиму опитування клавіатури без використання переривань.

Розглянемо приклад перевірки натискання однієї з клавіш першого та другого (праворуч) стовбців матричної клавіатури, схема підключення якої визначена у описі апаратної структури:

ldi R19,0b11110000 //завантажити константу F0h у R19;

ldi R20,0b11100000 //завантажити константу Е0h у R20;

ldi R21,0b11010000 //завантажити константу D0h у R21;

ldi R22,0b00001111 //завантажити константу 0Fh для маскування у R16;

out 02,R19 //налаштування ліній E0-3 на введення, а E4-7 на виведення;

lbl1: //мітка переходу для повтору опитування;

out 03,R20 //встановити в 0 рівень напруги на лінії PORTE.7, що належить //першому стовбцю клавіатури;

nop //встановити затримку в один такт;

in R17,01 //зчитувати дані із регістру PINE у R18;

out 03,R21 //встановити в 0 рівень напруги на лінії PORTE.6,

nop //встановити затримку в 1 такт;

in R18,01 //розрахувати дані з регістру PINE до R18;

and R17,R22 //обнулити неінформативну старшу тетраду в R17;

and R18,R22 //обнулити неінформативну старшу тетраду в R18;

cp R17,R22 //порівняти значення в регістрі R17 із значенням 0Fh;

brne lbl2 //зробити перехід на мітку lbl2, чи R18 ≠ 0Fh (одна чи декілька //клавіш першого стовпця клавіатури натиснуті);

cp R18,R22 //порівняти значення в регістрі R18 зі значенням 0Fh.

brne lbl2 //виконати перехід на мітку lbl2, якщо R18 ≠ 0Fh (одна чи декілька клавіш другого стовпця клавіатури натиснуті);

rjmp lbl1 //перехід на мітку lbl1 для повтору процедури опитування;

lbl2: //мітка виходу з процедури опитування.

Якщо в результаті процедури опитування в бітах молодших тетрад регістрів R17 чи R18 будуть знаходитись 0, то це буде означати те, що натиснули клавіші, позиції котрих можна знайти зі схеми і номерів розрядів в тетрадах.

Перед початком виконання практичної частини лабораторної роботи проводиться експрес–контроль знань за принципами функціонування мікроконтролеру AVR ATMEGA 2561, системі команд і можливостям організації програмного опитування клавіатури лабораторного макету.

Завдання. Розробити в середі програмування Code Vision AVR програму для мікроконтролеру AVR ATMEGA 2561, яка виконує опитування клавіатури лабораторного макету і виводить інформацію про натиснуті клавіші за допомогою блоку світлодіодів.

Порядок виконання завдання:

  1. Ввімкнути лабораторний макет.

  2. Запустити компілятор Code Vision AVR.

  3. Створити пустий проект.

  4. Створити файл ресурсу для коду програми і підключити його до проекту.

  5. Ввести код первинного модуля програми.

  6. Виконати компіляцію.

  7. Налагодити параметри програматора.

  8. Створити загрузочний модуль програми (нажавши комбінацію клавіш Shift+F9) і виконати програмування мікроконтролеру.

  9. Перевірити працездатність завантаженої в мікроконтролер програми і показати результати праці.

  10. У випадку некоректної роботи розробленої програми, виконати апаратне скидання мікроконтролера, провести відладку первинного модуля програми і заново перевірити функціонування програми, повторивши виконання пункту 9.

Приклад виконання завдання. Розробити програму, що виводить інформацію про індекси натиснутих клавіш першого і другого стовбців (С1 і С2) матричної клавіатури 34.

Рішення. В лабораторному макеті матрична клавіатура 34 підключена до порту E мікроконтролера. Лінії старшої тетради порта Е налагоджуються на виведення даних, а лінії молодшої тетради – на введення. Кнопки F1, F2, F3 к 6-му, 7-му і 8-му розрядам порта F, котрий не потрібно спеціально настроювати на введення даних. Блок світлодіодів підключений до порту D мікроконтролера і настроюється на виведення даних. Цикл опитування складається з послідовного зчитування даних з 1-го і 2-го стовбців матричної клавіатури 34 при належних керуючих сигналах, виводу інформації про позиції натиснутої клавіші на блок світлодіодів і перевірку стану натиснення кнопки F1, при натисненні на яку процедура опитування клавіатури завершується. Алгоритм програми наведений на рис. 1.14.

Рисунок 1.14 Алгоритм програми опитування клавіатури

Повний текст вихідного модуля програми з коментарями наведений нижче:

#include <mega2561.h>

#include <delay.h>

int t=50 ;

void main(void)

{

// Port D настройка

DDRD=0xFF; // весь порт как выход

//PORTD=0b11111111; //погасити всі світлодіоди;

PORTD=0;

DDRE.0 = 0;

DDRE.1 = 0;

DDRE.2 = 0;

DDRE.3 = 0;

DDRE.4 = 1;

DDRE.5 = 1;

DDRE.6 = 1;

DDRE.7 = 1;

PORTE=0xFF;

while (1)

{

PORTD=0b111111111;

///////////////////////////////////////////////////////////////

PORTE.4 = 0;

delay_ms(t);

if (!PINE.0)

PORTD=0b11111100;

delay_ms(t);

//PORTD=0b111111111;

delay_ms(t) ;

if (!PINE.1)

PORTD=0b11111100;

delay_ms(t) ;

//PORTE.4 = 1;

if (!PINE.2)

PORTD=0b11111100;

delay_ms(t) ;

if (!PINE.3)

PORTD=0b11111100;

delay_ms(t) ;

PORTE.4 = 1;

////////////////////////////////////////////////////////////

PORTE.5 = 0;

delay_ms(t);

if (!PINE.0)

PORTD=0b11110000;

delay_ms(t);

// PORTD=0b111111111;

delay_ms(t) ;

if (!PINE.1)

PORTD=0b11110000;

delay_ms(t) ;

if (!PINE.2)

PORTD=0b11110000;

delay_ms(t) ;

//PORTE.0 = 1;

if (!PINE.3)

PORTD=0b11110000;

delay_ms(t) ;

PORTE.5 = 1;

////////////////////////////////////////////////////////////

PORTE.6 = 0;

delay_ms(t);

if (!PINE.0)

PORTD=0b11000000;

delay_ms(t);

// PORTD=0b111111111;

delay_ms(t) ;

if (!PINE.1)

PORTD=0b11000000;

delay_ms(t) ;

if (!PINE.2)

PORTD=0b11000000;

delay_ms(t) ;

if (!PINE.3)

PORTD=0b11000000;

delay_ms(t) ;

PORTE.6 = 1;

////////////////////////////////////////////////////////////

PORTE.7 = 0;

delay_ms(t);

if (!PINE.0)

PORTD=0b00000000;

delay_ms(t);

// PORTD=0b111111111;

delay_ms(t) ;

if (!PINE.1)

PORTD=0b00000000;

delay_ms(t) ;

if (!PINE.2)

PORTD=0b00000000;

delay_ms(t) ;

if (!PINE.3)

PORTD=0b00000000;

delay_ms(t) ;

PORTE.7 = 1;

}

}

* Контрольні запитання :

1.Основні оператори мови Assembler .

Лабораторна робота 4