Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
- Название:Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
- Автор:
- Жанр:
- Издательство:Издательский дом «ДМК-пресс»
- Год:2007
- Город:Москва
- ISBN:5-9706-0034-2
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С краткое содержание
В книге последовательно рассматриваются все этапы создания встраиваемых систем на микроконтроллерах с применением современных технологий проектирования. Задумав эту книгу, авторы поставили перед собой задачу научить читателя искусству создания реальных устройств управления на однокристальных микроконтроллерах.
Издание содержит материал, охватывающий все вопросы проектирования, включает множество заданий для самостоятельной работы, примеры программирования, примеры аппаратных решений и эксперименты по исследованию работы различных подсистем микроконтроллеров.
Данная книга является прекрасным учебным пособием для студентов старших курсов технических университетов, которые предполагают связать свою профессиональную деятельность с проектированием и внедрением встраиваемых микропроцессорных систем. Книга также будет полезна разработчикам радиоэлектронной аппаратуры на микроконтроллерах.
Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Рассмотренная ранее матричная клавиатура используется для ввода четырех символов кода доступа. Если последовательность этих символов совпадает с эталонной последовательностью, которая хранится в памяти программы, то доступ разрешается. Если же введенная последовательность символов ошибочная, то доступ блокируется. Для информирования пользователя о состоянии системы доступа используется символьный ЖК индикатор.
Далее мы приводим функциональную схему аппаратных средств, блок-схему алгоритма работы и полную программу управления кодовым замком.
5.8.1. Схема подключения периферийных устройств
Электрическая схема подключения клавиатуры на 16 клавиш и символьного ЖК индикатора к выводам портов МК семейства 68HC12 приведена на рис. 5.22. Линии порта PORT B обслуживают матричную клавиатуру. В соответствии с электрической схемой линии PORTB[0]…PORTB[3] должны работать в режиме вывода, а линии PORTB[4]…PORTB[7] — в режиме ввода. Восьмиразрядная шина данных интерфейса индикатора подключена к выводам порта PORT P. Так же, как и в примере параграфа 5.6.2, мы будем производить только операции записи в контроллер управления индикатором. Поэтому порт PORT P будет постоянно работать в режиме вывода. Линии управления индикатором подключены к выводам PORTDLC2: PORTDLC3.

Рис. 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
#include
/*используемые функции*/
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);
Интервал:
Закладка: