Исследование ввода информации при помощи клавиатуры: Методические указания к лабораторной работе по курсу «Средства отображения информации»

Страницы работы

16 страниц (Word-файл)

Фрагмент текста работы

Активный ряд клавиатурной матрицы при помощи дешифратора HC138 DD3. В таблице 1.4 приведены соответствия номера ряда к коду.

Таблица 1.4 – Соответствие ряда  коду на Adis

Текст программы

#include "ioavr.h"         //Подключение макросов и библиотечных функций                                 для доступа к периферии микроконтроллера

#include "inavr.h"         //Подключение сервисных библиотечных функций

#include "lib\common_utils.h"

#include "lib\lcd.h"        //Подключение модуля работы с ЖКИ

//Макросы для сканирования клавиатуры

#define COL1 (PINC & (1<<5)) //Считывания клавиш с входа

#define COL2 (PINC & (1<<6))

#define COL3 (PINC & (1<<7))

//Коды клавиш

#define KEY_1 7  // KEY_1 присваивается порядковый номер 7

#define KEY_2 8

#define KEY_3 9

#define KEY_4 4

#define KEY_5 5

#define KEY_6 6

#define KEY_7 1

#define KEY_8 2

#define KEY_9 3

#define KEY_0 11

#define KEY_STAR 10

#define KEY_HASH 12

void KBD_init(void)

{

//Порт на выход

DDRC |= 15;

}

unsigned char scan_key()         //Объявление символьных констант

{

unsigned char i, temp = 0, tmp; //Объявление символьных констант

for (i = 0; i < 4; i++) //до тех пор пока i < 4

{

//Перебор рядов

//Выбрать следующий ряд

tmp = PINC; // присваивание к tmp

tmp &= 0xF8; //маска

tmp |= i;

PORTC = tmp;

__delay_cycles(Del_ms(1));

//Формирование кода нажатой клавиши

if (COL1)              //если нажата клавиша в COL1, то выполняется условие

temp = i*3+1;

else                        // иначе выполняется условие 2

if (COL2)

temp = i*3+2;

else                        // иначе выполняется условие 3

if (COL3)

temp = i*3+3;

if (temp)                // остановка действия

break;

}

return temp;           // возврат к temp

}

__task void main(void)   //Выполнение главной программы

{

unsigned char digit, k;     //Объявление целых констант

unsigned short num, rez;

common_init();        //Инициализация стенда

LCD_init();              //Инициализация МЖКИ

KBD_init();             //Инициализация клавиатуры

digit = 0;                  //Количество набранных цифр

num = 0;                  //Набранное число

rez = 0;                    //Результат операции

LCD_write_str("Введите число"); //Вывод строки 1 на дисплей МЖКИ

LCD_gotoXY (0, 1);                      // Координаты вывода символов

LCD_write_str("Число х 2 =");     //Вывод строки 2 на дисплей МЖКИ

while (1)                 //Бесконечный цикл

{

k = scan_key();       //Считывание нажатой клавиши

if (k)                        //Если клавиша нажата                  

{

switch (k)                //то происходит выбор одного из множества вариантов

{

case KEY_STAR:   //Если нажата клавиша '*'

digit = 0;

num = 0;

rez = 0;

k = 0xFF;

break;

case KEY_HASH:   //Если нажата клавиша '#'

rez = num * 2;

digit = 0;

k = 0xFF;

break;

case KEY_0:

k = 0;

break;

case KEY_1:

k = 1;

break;

case KEY_2:

k = 2;

break;

case KEY_3:

k = 3;

break;

case KEY_4:

k = 4;

break;

case KEY_5:

k = 5;

break;

case KEY_6:

k = 6;

break;

case KEY_7:

k = 7;

break;

case KEY_8:

k = 8;

break;

case KEY_9:

k = 9;

break;

}

if (k != 0xFF)             //если нажаты цифровые клавиши

{

if (digit)

{

num = num * 10 + k;  //расчет введенного числа

}

else

num = k;

if ((++digit) == 3) digit = 0;//увеличение количества введенных цифр

}

}

LCD_gotoXY (13, 0);

LCD_write_int (num, 3); //вывод введенного числа

LCD_gotoXY (12, 1);

LCD_write_int (rez, 4); //вывод результата операции

__delay_cycles(Del_ms(200));

}

}

Библиотечные функции

Заголовок #include "lib\common_utils.h"

Функции:

common_init() – Начальная инициализация оборудования стенда.

Заголовок #include "lib\lcd.h" – Работа с МЖКИ

Функции:

LCD_init() - Инициализация МЖКИ.

LCD_init() - Инициализация МЖКИ.

void LCD_put_char(char ch) – Вывод символа.

void LCD_write_str(char str[]) – Вывод строки.

void LCD_clear(void) – Очистка ЖКИ.

void LCD_gotoXY (unsigned char x, unsigned char y) – Перевод курсора в позицию

X,Y.

void LCD_write_int (signed int val, unsigned char digits) – Вывод целого числа

val в текущую позицию, используя digits символов.

2. Задания к лабораторной работе

Разработать программу для учебного стенда НТЦ-31.100, позволяющую вводить данные с клавиатуры (КЛ), выполнять определенные действия над данными и выводить поясняющие надписи и результат вычислений на матричный жидкокристаллический индикатор (МЖКИ) или на дискретный светодиодный индикатор (ДСИ).

Клавишу "#" использовать, как подтверждение ввода, а клавишу "*" – как сброс операции.

1) Ввести последовательно два трехзначных числа, найти их разность и результат вывести на МЖКИ

2) Ввести последовательно два трехзначных числа, найти их сумму и результат вывести на МЖКИ

3) Ввести последовательно два трехзначных числа, найти результат поразрядной логической операции ИЛИ и вывести на МЖКИ в десятичной форме

4) Ввести последовательно два трехзначных числа, найти их произведение и результат вывести на МЖКИ

5) Ввести последовательно два трехзначных числа, найти результат поразрядной логической операции ИСКЛЮЧАЮЩЕЕ ИЛИ и вывести на МЖКИ в десятичной форме

6) Ввести последовательно два трехзначных числа, найти результат поразрядной логической операции И, вывести результат на МЖКИ в десятичной форме

7) Ввести последовательно два двухзначных числа, найти их разность и результат вывести на ДСИ

8) Ввести последовательно два двухзначных числа, найти их сумму и результат вывести на ДСИ

9) Ввести последовательно два двухзначных числа, найти результат поразрядной логической операции ИСКЛЮЧАЮЩЕЕ ИЛИ и вывести на ДСИ

10) Ввести два двухзначных числа, найти минимальное из них и вывести его на ДСИ

11) Ввести последовательно два двухзначных числа, найти результат поразрядной логической операции И и вывести на ДСИ в десятичной форме

12) Ввести последовательно два двухзначных числа, найти результат поразрядной логической операции ИЛИ и вывести на ДСИ в десятичной форме

13) Ввести три трехзначных числа, найти максимальное из них и вывести его на МЖКИ

14) Ввести три двухзначных числа, найти максимальное из них и вывести его на ДСИ

15) Ввести три двухзначных числа, найти минимальное из них и вывести его на ДСИ

3. ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ

Ввести последовательно два трехзначных числа, найти их сумму

Похожие материалы

Информация о работе