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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

Активный ряд клавиатурной матрицы при помощи дешифратора 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. ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ

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

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.