Підключення матричної клавіатури.
Література
Принцип побудови
Матрична клавіатура
Принцип підключення
Схема для моделювання
Середовище PICC бібліотека LCD.c для роботи з дисплеєм
Середовище PICC бібліотека LCD.c для роботи з дисплеєм
Мова С++ функція printf
Бібліотека для роботи з текстом
Алгоритм основної програми
Текст основної програми
Текст основної програми (продовження)
Текст основної програми (продовження)
Текст основної програми (продовження)
Алгоритм сканування клавіатури
Текст програми. Константа для конвертації кодів рядка і стовпця натиснених кнопок у відповідні символи
Запитання
1.26M
Category: softwaresoftware

Розроблення програмного забезпечення для приладобудування. Підключення матричної клавіатури

1. Підключення матричної клавіатури.

Розроблення програмного забезпечення для
приладобудування
ПІДКЛЮЧЕННЯ МАТРИЧНОЇ
КЛАВІАТУРИ.

2. Література

ЛІТЕРАТУРА
Martin Bates. Interfacing PIC Microcontrollers Embedded Design by Interactive Simulation Elsevier[електронний ресурс]. Режим доступу: www.tech-software.net/temp/nine.pdf
Якименко Ю. І. Мікропроцесорна техніка: Підручник / Ю. І. Якименко, Т. О. Терещенко, Є. І. Сокол,
В. Я. Жуйков, Ю. С. Петергеря; За ред. Т. О. Терещенко. - 2-ге вид., переробл. та доповн. - К.: ГВЦ
“Видавництво «Політехніка»”; “Кондор”, 2004.-440 с.
Тавернье К. РIC-микрокоптроллеры. Практика применения: Пер. с фр. -М.: ДМК Пресс, 2004. - 272
с.: ил. (Серия «Справочник»).
Катцен С. РIС-микроконтроллеры. Все, что вам необходимо знать /; пер. с англ. Евстифеева А. В. —
М.: Додэка-ХХ1, 2008. — 656 с.: ил. (Серия «Программируемые системы»).
Martin Bates. Interfacing PIC Microcontrollers Embedded Design by Interactive Simulation. – Elsevier,
2006. [електронний ресурс]. Режим доступу: http://www.tech-software.net/temp/nine.pdf.
Справочник по среднему семейству микроконтроллеров РICmicro™. : ООО “Микро-Чип" Москва –
2002. [електронний ресурс]. Режим доступу: http://www.microchip.ru/files/d-sheetsrus/PIC16_Manual.pdf.
Максимов А. PROTEUS VSM. Система віртуального моделирования. [Електронний ресурс] Режим
доступу: http://labkit.ru/userfiles/file/education/Proteus/Proteus_ISIS_russian_manual.pdf.
Магда Ю. С. Микроконтроллеры Р1С: архитектура и программирование. - М.: ДМК Пресс, 2009. 240 с.: ил.
Программирование на Си для PIC. [електронний ресурс]. Режим доступу:
http://www.labkit.ru/html/C_for_PIC.

3. Принцип побудови

ПРИНЦИП ПОБУДОВИ

4. Матрична клавіатура

МАТРИЧНА КЛАВІАТУРА

5. Принцип підключення

ПРИНЦИП ПІДКЛЮЧЕННЯ

6. Схема для моделювання

СХЕМА ДЛЯ МОДЕЛЮВАННЯ

7. Середовище PICC бібліотека LCD.c для роботи з дисплеєм

СЕРЕДОВИЩЕ PICC БІБЛІОТЕКА LCD.C ДЛЯ
РОБОТИ
З ДИСПЛЕЄМ
///////////////////////////////////////////////////////////////////////////////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
LCD.C
////
Driver for common LCD modules
////
lcd_init() Must be called before any other function.
////
lcd_putc(c) Will display c on the next position of the LCD.
////
\a Set cursor position to upper left
////
\f Clear display, set cursor to upper left
////
\n Go to start of second line
////
\b Move back one position
////
If LCD_EXTENDED_NEWLINE is defined, the \n character ////
will erase all remanining characters on the current
////
line, and move the cursor to the beginning of the next ////
line.
////
If LCD_EXTENDED_NEWLINE is defined, the \r character ////
will move the cursor to the start of the current
////
line.
////
lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)
////
lcd_getc(x,y) Returns character at position x,y on LCD
////
lcd_cursor_on(int1 on) Turn the cursor on (on=TRUE) or off
////
(on=FALSE).
////
lcd_set_cgram_char(w, *p) Write a custom character to the CGRAM. ////

8. Середовище PICC бібліотека LCD.c для роботи з дисплеєм

СЕРЕДОВИЩЕ PICC БІБЛІОТЕКА LCD.C ДЛЯ
РОБОТИ З ДИСПЛЕЄМ
//задавання виводів мікроконтролера, до яких підключено виводи
дисплею. Потрібно для бібліотеки lcd.c
#define LCD_ENABLE_PIN PIN_C0
#define LCD_RS_PIN PIN_C1
#define LCD_RW_PIN PIN_C2
#define LCD_DATA4 PIN_C4
#define LCD_DATA5 PIN_C5
#define LCD_DATA6 PIN_C6
#define LCD_DATA7 PIN_C7
#include <lcd.c>
.
lcd_init();//настрювання дисплею
lcd_cursor_on(1);//увімкнення курсора
//вивід інформації на екран
printf (lcd_putc, "\f%Ld", resultnumber) ;//див наступний слайд

9. Мова С++ функція printf

МОВА С++ ФУНКЦІЯ PRINTF
printf (fname, cstring, values...)
Outputs a string of characters to a specified function.
Formatting is in accordance with the string argument. The
% character is used within the string to indicate a variable
value is to be formatted and output. Formatting rules for
the % follows.
c
s
u
d
Lu
Ld
g
e
Specifier
%u
%2u
%d
Character
String or character
Unsigned int
Signed int
Long unsigned int
Long signed int
Float with rounded decimal
Float in exponential format
Value=0x12
18
18
18
byte x,y,z;
printf("HiThere");
printf("RTCCValue=>%2x\n\r",get_rtcc());
printf("%2u %X %4X\n\r",x,y,z);
Value=0xfe
254
*
-2
printf(LCD_PUTC, "n=%u",n);

10. Бібліотека для роботи з текстом

БІБЛІОТЕКА ДЛЯ РОБОТИ З ТЕКСТОМ
#INCLUDE <stdlib.h>
i32value = atoi32(string);
Converts the string passed to the function into
an int representation.
char buffer[9]={0,0,0,0,0,0,0,0,0};
signed INT32 firstnumber=0;
firstnumber=atoi32 (buffer);

11. Алгоритм основної програми

АЛГОРИТМ ОСНОВНОЇ ПРОГРАМИ
натиснули
+,-,*,/
увімкнути
підтягуючі
резистори
Так
Ні
натиснули =
Так
ініціалізація
РКІ
конвертувати
текст в числовий
формат
конвертувати
текст в числовий
формат
увімкнути
курсор
запамятати тип дії
очистити
текстовий буфер
Ні
натиснули с
Ні
Так
обнулити всі
змінні і буфер
добавити символ
в буфер
очистити
табло
кількість
символів
менше 8
Ні
натиснена
кнопка
Ні
Так
очистити
текстовий буфер
виконати над
числами дію
зчитати код
кнопки
очистити
табло
код вірний
Ні
Так
результат
набраний текст
Так
інкремент
лічильника
символів

12. Текст основної програми

ТЕКСТ ОСНОВНОЇ ПРОГРАМИ
//змінні що зберігають перше, друге введені числа і
результат операції
signed INT32
firstnumber=0,secondnumber=0,resultnumber=0;
char buffer[9]={0,0,0,0,0,0,0,0,0};//текстовий буфер для
зберігання введеного числа
int8 bufferindex=0;//номер байта в буфері
//сюди зберігають інформацію про натиснення кнопок
+,-,*,/
char operation=0;//що треба робити при натиснені =

13. Текст основної програми (продовження)

ТЕКСТ ОСНОВНОЇ ПРОГРАМИ (ПРОДОВЖЕННЯ)
void main(){
port_B_pullups (0xFF);//увімкнення підтягуючих резисторів порта B
lcd_init ();//ініціалізація дисплею
lcd_cursor_on(1);//увімкнення курсора
WHILE (TRUE){
//TODO: User Code
//перевірка чи натиснена кнопка
IF (kbd_keydown () ){
//зчитуємо кнопку
INT8 key=kbd_getc () ;
//чи код кнопки вірний
IF (key!=0){
//вибираємо яку дію виконувати залежно від натисненої кнопки
SWITCH (key) {

14. Текст основної програми (продовження)

ТЕКСТ ОСНОВНОЇ ПРОГРАМИ (ПРОДОВЖЕННЯ)
//при натисненні кнопок +,-,*,/ дії одинакові
CASE '+':
CASE '-':
CASE '*':
CASE '/':firstnumber=atoi32 (buffer); //конвертувати 1 число з
тексту
operation=key;//зберегти тип вибраної олперації
memset (buffer, 0, 9);bufferindex=0;//очистити текстовий буфер
lcd_putc("\f"); break;//очистити екран
//дії при натисненні кнопки =
CASE '=':secondnumber=atoi32 (buffer) ;//конвертувати 2
число з тексту
memset (buffer, 0, 9);bufferindex=0;//очистити текстовий
буфер
//вибір яку дію над числами треба здійснити

15. Текст основної програми (продовження)

ТЕКСТ ОСНОВНОЇ ПРОГРАМИ (ПРОДОВЖЕННЯ)
SWITCH (operation) {
CASE '+':resultnumber=firstnumber+secondnumber; break;//додавання
CASE '-':resultnumber=firstnumber-secondnumber; break;//віднімання
CASE '*':resultnumber=firstnumber*secondnumber; break;//множення
CASE '/':resultnumber=firstnumber/secondnumber; break;//ділення
}//SWITCH
printf (lcd_putc, "\f%Ld", resultnumber) ;//вивід результату на екран
BREAK;
//дії при натисненні кнопки с - очищаємо текстовий буфер, змінні, екран
CASE 'c':memset (buffer, 0, 9);bufferindex=0; firstnumber=0; secondnumber=0; operation=0;lcd_putc('\f');
break;
//при натисненні кнопок з цифрами
default :buffer[bufferindex]=key; //добавлення введеного символу в текстовий буфер
IF (bufferindex<8){++bufferindex; }//максимальна кількість символів 8
printf (lcd_putc, "\f%s", buffer) ;//дублювання інформації текстового буфера на екран
}//SWITCH
}//
//чекаємо коли кнопку відпустять
WHILE (kbd_keydown () ){}
}//IF
}
}

16. Алгоритм сканування клавіатури

АЛГОРИТМ СКАНУВАННЯ КЛАВІАТУРИ
рядок зсув вліво
на 4
1
колонка=0 до 3
вийти з
результатом 0
колонка=0
Ні
натиснена
кнопка
1
Так
Так
Ні
вивід в порт B
0b11111110
рядок=0b1110
Так
Ні
колонка=1
Так
рядок=0
Ні
вивід в порт B
0b11111101
рядок=0b1101
Так
Ні
колонка=2
Так
рядок=1
Ні
вивід в порт B
0b11111011
рядок=0b1011
Так
прочитати
елемент масиву
Ні
колонка=3
Так
рядок=2
Ні
вивід в порт B
0b11110111
рядок=0b0111
Так
вийти
Ні
рядок=3
зчитати
входи порта
в рядок
1

17. Текст програми. Константа для конвертації кодів рядка і стовпця натиснених кнопок у відповідні символи

ТЕКСТ ПРОГРАМИ. КОНСТАНТА ДЛЯ
КОНВЕРТАЦІЇ КОДІВ РЯДКА І СТОВПЦЯ
НАТИСНЕНИХ КНОПОК У ВІДПОВІДНІ СИМВОЛИ
char CONST KEYS[4][4] = {{'7','8','9','/'},
{'4', '5', '6', '*'},
{'1', '2', '3', '-'},
{'c', '0', '=', '+'}};
keys[row][col];

18. Запитання

ЗАПИТАННЯ
English     Русский Rules