Автор работы: Пользователь скрыл имя, 16 Января 2014 в 15:33, курсовая работа
Необходимо разработать контроллер, выполняющий функцию расширенной авторизации с использованием внешнего электронного ключа и ввода цифрового пароля на клавиатуре.
Интерфейс обеспечивается за счет простейшей индикации состояния системы включением или отключением светодиода. Ввод данных - кодов пароля на 12 разрядной цифровой клавиатуре:
1) 10 первых клавиш которые соответствуют цифрам от 0 до 9.
2) Две оставшиеся используются как управляющие, одна из которых подтверждение ввода, а другая отмена ввода.
После выдачи presence iButton ожидает получения команды. Любая команда записывается в iButton с помощью последовательности тайм-слотов, передающих биты 1 и 0. Такая последовательность создает полный байт команды.
Для передачи данных в обратном направлении (чтение iButton) используются те же самые правила для представления 0 или 1 Поскольку iButton разработано как slave-устройство, оно оставляет master- устройству право определять начало каждого тайм-слота.
Рис. 10 - Стартовая инициализация
Чтобы произвести чтение iButton, master для чтения одного бита данных просто генерирует тайм-слот записи лог. 1 (именно тайм-слот записи, а не чтения). Если бит, который должен послать iButton, равен 1, то iButton просто ожидает появления следующего тайм-слота, пропуская текущий. При этом с линии данных master считывает 1. Если бит, который посылает iButton, равен 0, то iButton удерживает линию данных в состоянии низкого уровня определенное время и master считывает с линии данных 0.
Запрограммированная лазерным лучом ROM-секция (ПЗУ) содержит 6-байт-ное уникальное для каждого устройства iButton число - серийный номер. Кроме того, во всех iButton записаны код типа устройства (family code) и проверочный байт CRC. Младшие 7 бит family code указывают на тип устройства. Старший бит family code используется в качестве флага в версиях, редназначенных для особых покупателей. Таким образом можно закодировать 128 разновидностей устройств.
48-битный (6-байтный) серийный номер может представить любое десятичное число до 2,81 1014. Если выпускать в год 1000 биллионов (1012) устройств одного и того же типа, то этого числа хватит на 281 год. Кроме того, можно выпускать 128 типов различных устройств. Если старший бит family code установлен в 1, то устройство функционирует так же, как и стандартное, однако серийный номер устанавливается по специальным правилам - часть серийного номера резервируется для обозначения конкретного покупателя (заказчика).
На рис. 11 показано, как организованы данные для DS1990A.
Рис. 11
Первый байт, передаваемый из ПЗУ, является кодом типа устройства - family code. После него идет уникальный серийный номер (6 байт), у которого наименее значащий байт передается первым. Последний байт несет информацию Cyclic Redundancy Check (CRC), что означает проверочный циклический избыточный код. CRC специальным образом вычисляется на основе первых семи байт. Это позволяет быстро проверить правильность передачи информации - если CRC, вычисленный устройством master от первых 7 байт, совпадает с принятым от iButton, то чтение было полностью верным. Этот метод - одна из причин, по которой iButton не требует стабильного электрического контакта со считывающим устройством.
iButton делает выборку данных на линии посередине тайм-слота. По определению активная часть 1-Wire тайм-слота (tsLcrr) составляет 60 мкс. В нормальном состоянии iButton будет делать выборку сигнала с линии после 30 мкс относительно спада сигнала.
Внутренняя величина базового времени iButton может отличаться от стандартной, следовательно, может меняться время выборки сигнала. Допустимый диапазон изменения составляет от 15 до 60 мкс. Это означает, что реальное чтение линии slave-устройством может произойти в любом месте относительно старта тайм-слота между 15 и 60 мкс, т. е. может изменяться в соотношении 1 к 4. Во время этого окна времени напряжение на линии должно оставаться либо ниже VILMAX(максимально допустимое напряжение низкого уровня), либо больше VIHMAX (минимально допустимое напряжение высокого уровня).
2.3 Описание принципиальной схемы
На входе для сопряжения с СОМ портом стоит микросхема преобразователя управления Блок сопряжения с последовательным портом преобразователь+-12 для RS 232 последовательного микроконтроллера.Она генерирует необходимое напряжение из напряжения 5в использует внешнее подключение емкостей С1,С4.Чашка считывателя представляет собой механический контакт R fip радио ключ. Для защиты используется стабилизатор VD1 ограниченно и питание резистором IButton. Резистор Р2 является подтягивающим к +5в линию обмена. Схема подключения стандартная, используется С6,С7.
3. Разработка программы управления
3.1 Принцип функционирования
программа управление электронный ключ
Сам контролер функционирует по циклической программе в начале предварительно настраивает параметры микропроцессора, устанавливает частоту переполнения таймера, настраиваются входные прерывания и внутренние переменные. Основная часть действующей программы выполняется по переполнению прерывания таймера, при этом в каждом такте выполняется подсчет времени, так же выводится по кругу очередная индицируемая цифра.
При обнаружении нажатия, какой либо клавиши выполняется переход к подпрограмме установке выбранного параметра, но запуск к программе выполняется из основного тела программы зацикленного в бесконечном цикле, при этом обработчик прерывания продолжает работать, сканировать клавиатуру и выводить на ЖКИ необходимую информацию.
3.2 Описание алгоритма работы программы
В начале программы происходит инициализация всех используемых переменных, которые используются нашим микроконтроллером. Заполняются массивы данных отображаемые на ЖКИ и массив кодов. Устанавливаем биты микроконтроллера.
Потом идут процедуры обработки нажатых кнопок. Описывается обработчик прерывания таймера, обработчик вывода данных через UART.
В главном цикле программы заполн
3.3 Описание функционирования программы
Рабочая программа реализуется в двух основных частях. Обработчик прерывания таймера. В котором ведется постоянное определение ключом и выполняется отображение на ЖКИ. При подключении ключа int 0 и в обработчике прерываний запускается процедура обмена.
Еще образуется прерывание
последовательного порта
Код нажатия клавиш определяет в процедуре обработчика таймера путем перемещения по битно по разрядам нулевого значения. Если на порту P3.3, P3.4 возникает нулевое значение то мы определяем какая клавиша нажата. Если сохраняется единичное значение то все клавиши. Если ноль А текущая то клавиша нажата. Если отличная от нуля то ввода цифры не происходит. Самый 1 ключ администратора который позволяет просматривать установленное время определяя значение часов.
Заключение
Поставленная задача была реализована, разработана функциональная схема. После анализа функциональной схемы рассмотрение множества разработок и отдельных электронных узлов была разработана схема контроллера управления системой кодового замка, которая реализует поставленную задачу на аппаратном уровне. При схемотехнической реализации блока был произведен выбор наиболее оптимального контроллера для решения задачи.
Вторым этапом реализации
проекта стало написание
Результат проекта представлен в виде отчета имеющего два приложения: листинг программы и принципиальная схема.
Приложение 1
Схема устройства
Приложение
Листинг программы
#include<reg51.h>
#include<stdlib.h>
char xdata out _at_ 0x10; /* xdata 0x10 */
unsigned char seksotl,sekth,regim; //shethiki vremeni
unsigned char hourbh,hourbl,minbh,minbl; //shethiki budilnik
unsigned char zvuk; //dlit zvuka
unsigned char hourh,hourl,minh,minl,sekh,
unsigned char poz,nkey; //otobragaem segment
unsigned int interruptcnt;
sbit iware=P3^2;
bit fok;
unsigned char lcd1[]={0xDD,0x05,0xEC,0xAD,
unsigned char lcd2[]={0,0,0,0,0,0,0,0,0,0,0}
unsigned char dat[]= {0,0,0,0,0,0}; //klav
char iw;
unsigned char dat1[]={0xDD,0x05,0xEC,0xAD,
unsigned char dat1[]={0xD1,0x05,0xEC,0xAD,
unsigned char dat1[]={0xD2,0x05,0xE2,0xAD,
unsigned char dat1[]={0xDD,0x05,0xEC,0xAD,
unsigned char dat1[]={0xDA,0x05,0xEC,0xAD,
unsigned char dat1[]={0xD6,0x05,0xEC,0xA5,
unsigned char dat1[]={0xAA,0x05,0xEC,0xAD,
unsigned char dat1[]={0xCC,0x05,0xEC,0xAD,
unsigned char dat1[]={0xC1,0x05,0xEC,0xAD,
unsigned char dat1[]={0xA1,0x05,0xEC,0xAD,
unsigned char dat1[]={0x11,0x05,0xEC,0xAD,
void delay (void char t)
{
unsigned char dd;
for (dd=0;dd<t;dd++)//timeuot na 5*t mks
}
void reset (void)
{
if (!iware) delay(100);//esli linia =0 timeout 500mks
fok=0;
if (iware) //start proc
{iware=0;
delay(100); //timeout 500mks
iware=1;
delay(14);//timeout 70 mks
if (!iware)
{
delay(100); //500mks
if (iware) {fok=1;}
}
}
}
void readiw (void)//read IWare
{
unsigned char pp,nn;
pp=0;
for(nn=0;nn<8;nn++)
{
iware=0; delay (3); //start obmena bit
iware=1; delay(6); //+30mks dla chtenia
CY=iware;pp=pp>1;
delay(14);iware=1;
delay(3);}
iw=pp;//save rezultat
}
void writeiw (void char t)//read IWare
{unsigned char pp,nn;
pp=t;
for(nn=0;nn<8;nn++)
{
iware=0; delay (3);
pp=pp>1; iware=CY;
delay(20);iware=1;
delay(3);
}
}
void uart (void) interrupt 4 using 2
{
if (RI)
{
if(SBUF==0xff){P3^7=1; for(i=0;i<2000;i++) delay(200);P3^7=0;}//vse sovpalo na 2 sek open door
if (SBUF==0){sec=0; min=0;chas=0;}
if (TI)
{TI=0;
if (++step<12)
}
}
void timer0 (void) interrupt 1 using 2 /*Function interrupt timer0*/
{
TH0=0xd8; /*set timer0=55539*/
TL0=0xf3;
seksot++;
if (seksot==100)
{seksot=0;sec++;
if (60 == sek)
{
sek=0;min++;}
if (60== min)
{
min=0;
{
hour++;
if (24== hour){hour=0;}
}
}
lcd2[0]=n+0x30;
lcd2[6]=hour/10+0x30;
lcd2[7]=hour%10+0x30;
lcd2[8]=min/10+0x30;
lcd2[9]=min%10+0x30;
lcd2[10]=sek/10+0x30;
lcd2[11]=sec%10+0x30;
// send LCD
if(sec<12){e=0; rs=0;P1=lcd1[sec]&0x0f;e=1;
delay(255);e=0; rs=0;P1=((lcd1[sec]&0xf0)>>4);
else if(sec<40){e=0; rs=0;P1=0;e=1; delay(255);e=0; rs=0;P1=2;e=1;}
else if(sec<52){e=0; rs=0;P1=lcd2[sec]&0x0f;e=1;
delay(255);e=0; rs=0;P1=((lcd2[sec]&0xf0)>>4);
if(sec==99){e=0; rs=0;P1=1;e=1;} //reset lcd
} /*end Function interrupt timer0*/
void main (void)
{
SCON=0x50;//obmen 8bit takt for timer1
TH1=0xFD;
sekl=0; /*time 1s*/
TH0=0xd8; /*set timer0=55635*/
TL0=0xef;
TMOD=0x21; /*1 regim*/
ET0=1; /*enable interrupt timer0*/
PT0=0; /*priority = 0*/
EA=1; /*enable interrupt*/
Информация о работе Разработка контроллера управления цифровым кодовым замком