Шрифт:
Рис. 5.22. Функциональная схема аппаратных средств для системы кодового замка
Можно убедиться, что рассмотренные ранее по отдельности схемы подключения клавиатуры и ЖК индикатора полностью повторены, вплоть до конкретных выводов портов. Поэтому мы сможем воспользоваться ранее приведенными программами управления без каких-либо изменений.
5.8.2. Программа управления
На рис. 5.23 представлена блок-схема алгоритма управления кодовым замком. Ниже приведен полный текст программного кода программы управления, составленный по этой блок-схеме алгоритма.
Рис. 5.23. Блок-схема алгоритма управления кодовым замком
/*------------------------------------------------------------------------*/
/* filename: lock.c программа управления электронной системой доступа */
/* Число символов кода доступа равно 4. Правильная кодовая комбинация:C963*/
/* Аппаратная конфигурация: */
/* PORTB 8 линий интерфейса клавиатуры */
/*PORTP 8 линий шины данных интерфейса ЖК индикатора */
/*PORTDLC2 RD/WR, PORTDLC3 E. */
/*------------------------------------------------------------------------*/
/*подключаемые файлы*/
#include <912b32.h>
#include <stdio.h>
#include <math.h>
/*используемые функции*/
char which_key(unsigned int keypress); //определение, какая клавиша
//нажата
void delay_100us(void); //задержка 100 мкс
void delay_5ms(void); //задержка 5 мс
void initialize_lcd(void); //инициализация контроллера ЖК
//индикатора
void initialize_key(void); //инициализация портов для
//клавиатуры
void putchars(unsigned char с); //запись одного символа в индикатор
void putcommands(unsigned char d); //запись одной команды в индикатор
void lcd_print(char *string); //запись в индикатор строки символов
char keypad(unsigned int keypress, int row);
void main(void) {
int first = 0х01; //инициализация служебных переменных для опроса
int second = 0х02; //клавиатуры
int third = 0х04;
int fourth = 0х08;
int i,j,k, count = 0;
unsigned int keypress;
char key;
int length=4;
char pin[] = {'С', '9', '6', '3'}; //задание эталонной последовательности
//символов
char code[4]; //массив для введенной пользователем
//последовательности символов
initialize_lcd ; //инициализация ЖК индикатора
initialize_key; //инициализация портов для клавиатуры
for (k=0; k<4; k++) //разрешает 4 раза ввести комбинацию из
{ //4 символов
count = 0;
putcommands(0x01);
lcd_print("Enter Code:");
while (count < length) //обработка 4 нажатий клавиатуры
{
for(i=0; i<=50; i++) //ожидание ввода символа
{
PORTB = 0х01; //опрос первого ряда клавиатуры
keypress = PORTB;
key = keypad(keypress, first);
if (key != 'Z') //если клавиша нажата
{
printf("%c", key);