Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Программа управления






 

На рис. 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);

code[count] = key; //записать очередной символ в

//массив ввода

count++; //перейти к сканированию следующего

//символа

}

}

for(i=0; i< = 50; i++) // ожидание ввода символа

{

PORTB = 0х02; //опрос второго ряда клавиатуры

keypress = PORTB;

key = keypad(keypress, second);

if (key! = 'Z') {

printf(" %с", key);

code[count] = key; //записать очередной символ в

//массив ввода

count++; //перейти к сканированию следующего

//символа

}

}

for(i=0; i< = 50; i++) //ожидание ввода символа

{

PORTB = 0х04; //опрос третьего ряда клавиатуры

keypress = PORTB;

key = keypad(keypress, third);

if (key! = 'Z') {

printf(" %c", key);

code[count] = key; //записать очередной символ в

//массив ввода

count++; //перейти к сканированию следующего

//символа

}

}

for(i=0; i< = 50; i++) //ожидание ввода символа

{

PORTB = 0х08; //опрос четвертого ряда клавиатуры

keypress = PORTB;

key = keypad(keypress, fourth);

if (key! = 'Z') {

printf(" %c", key);

code[count] = key; //записать очередной символ в

//массив ввода

count++; //перейти к сканированию следующего

//символа

}

}

} //очередные 4 символа введены, можно сверять с эталонными

/*Проверка соответствия кода на эталонный*/

j = 0;

for(i=0; i< 3; ++i) //проверка по каждому символу эталонной

//последовательности

{

if(pin[i]==code[i]) //очередной символ правильный

{

j++;

} else //очередной символ неправильный

{

j--;

}

}

if (j == (length - 1)) //если j=3, то все символы введены правильно

{

putcommands(0x01);

lcd_print(" Access Granted");

}

else //символы введены неправильно

{

putcommands(0x01);

lcd_print(" Access Denied");

}

}

putcommands(0x01);

lcd_print(" Goodbye! "); //конец попыток ввода

}

 

/*--------------------------------------------------------------------*/

/*Перечень функций, которые использованы в этой программе */

/*--------------------------------------------------------------------*/

/* Функции, программный код которых был приведен ранее по тексту главы*/

char which_key(unsigned int keypress);

void delay_5ms(void);

void delay_100us(void);

void initialize_lcd(void);

void putchars(unsigned char с);

void putcommands(unsigned char d);

void lcdprint(char *string);

char keypad(unsigned int keypress, int row);

 

//Функция, которая приведена ниже

void initialize_key(void)

/*------------------------------------------------------------------------*/

/* Функция initialize_key устанавливает направление передачи линий портов */

/* для обслуживания клавиатуры */

/*------------------------------------------------------------------------*/

void initialize_key(void) {

DDRB = 0x0F; //линии PORTB[0]…PORTB[3] на вывод

//линии PORTB[4]…PORTB[7] на ввод

PORTB = 0х00; //четыре младших линии порта PORTB в 0

}

/*-------------------------------------------------------------------------*/

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.