Микропроцессорный контроллер кодового замка

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    11,37 Кб
  • Опубликовано:
    2012-12-16
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Микропроцессорный контроллер кодового замка

СОДЕРЖАНИЕ

1. Техническое задание

. Краткое описание микроконтроллера

.1 Общее описание микроконтроллера

.2 Порты ввода-вывода

.3 Разработка структурно-функциональной схемы

. Функциональная схема устройства

.1 Выбор элементной базы

.2 Описание алгоритма программы

.3 Используемые процедуры

.4 Листинг программной части

1. Техническое задание

Целью данной курсовой работы является разработка схемы устройства - «Микропроцессорный контроллер кодового замка» с использованием микроконтроллера.

Разрабатываемое устройство будет иметь следующие возможности:

в дежурном режиме устройство работает как часы, отображая текущее время.

в режиме замка устройство позволяет по паролю осуществлять открытие дверей, если введенный пароль верен для соответствующей двери. Если введенный пароль не верный, то на ЖКИ выдается сообщение: ошибка. Если неправильный пароль вводится 3 раза, срабатывает сигнализация.

режим программирования: при вводе мастер-пароля можно 1) редактировать пароли; 2) просмотреть информацию о последних введенных паролях и времени ввода пароля; 3) устанавливать новое время.


2. Краткое описание микроконтроллера

.1 Описание микроконтроллера

Восьмиразрядный высокопроизводительный однокристальный микроЭВМ КР1816ВЕ51 выполнен по высококачественной n-МОП технологии. Содержит масочно-программирумое в процессе изготовления кристалла ПЗУ памяти программ емкостью 4096 байт и рассчитан на применение в массовой продукции.

ОМЭВМ содержат следующие узлы:

центральный восьмиразрядный процессор;

память программ объемом 4 Кбайт;

память данных объемом 128 байт;

четыре восьмиразрядных програмируемых канала ввода-вывода;

два 16-битовых многореиных таймера-счетчика;

систему прерываний с пятью векторами и двумя уровнями;

последовательный интерфейс;

тактовый генератор.

Название

Вывод

Тип

Назначение

Р1.0-Р1.7

1-8

Вход/ выход

8-разрядный двунаправленный порт Р1. Вход адреса А0-А7 при проверке внутреннего ПЗУ (РПЗУ).

RST

9

вход

Сигнал общего сброса. Вывод резервного питания ОЗУ от внешнего источника.

Р3.0-Р3.7   Р3.0 Р3.1 Р3.2 Р3.3 Р3.4 Р3.5 Р3.6  Р3.7

   10-17  

Вход/ Выход  Вход Выход Вход Вход Вход Вход Выход  Выход

8-ми разрядный двунаправленный порт Р3 с дополнительными функциями.  Последовательные данные приемника - RxD. Последовательные данные передатчика - TxD. Вход внешнего прерывания 0 - INT0. Вход внешнего прерывания 1 - INT1. Вход таймера/счетчика 0 - Т0. Вход таймера/счетчика 1 - Т1. Выход стробирующего сигнала при записи во внешнюю память данных - WR. Выход стробирующего сигнала при чтении из внешней памяти данных - RD.

BQ2

18

Выход

Выводы для подключения кварцевого резонатора.

BQ1

19

Вход


0 В

20


Общий выход

Р2.0-Р2.7

21-28

Вход/ выход

8-разрядный двунаправленный порт Р2. Выход адреса А8-А15 в режиме работы с внешней памятью. В режиме проверки внутреннего ПЗУ выводы Р2.0-Р2.6 используются как вход адреса А8-А14. Вывод Р2.7 - разрешение чтения ПЗУ - Е.

PME

29

Выход

Разрешение программной памяти.

ALE

30

Вход/ выход

Выходной сигнал разрешения фиксации адрса. При программировании РПЗУ сигнал - PROG.

DEMA

31

Вход/ выход

Р0.7-Р0.0

32-39

Вход/ выход

8-разрядный двунаправленный порт Р0. Шина адреса / данных при работе с внешней памятью. Выход данных D7-D0 в режиме проверки внутреннего ПЗУ (РПЗУ).

Ucc

40


Вывод питания от источника напряжения +5В


Организация памяти.

Память данных предназначена для приема, хранения и выдачи информации, используемой в процессе выполнения программы. Память данных, расположенная на кристалле ОМЭВМ, состоит из регистра адреса ОЗУ, дешифратора, ОЗУ и указателя стека.

Регистр адреса ОЗУ предназначен для приема и хранения адреса выбираемой с помощью дешифратора ячейки памяти, которая может содержать как бит, так и байт информации.

ОЗУ представляет собой 128 восьмиразрядных регистров, предназначенных для приема, хранения и выдачи различной информации.

Указатель стека представляет собой регистр, предназначенный для приема и хранения адреса ячейки стека, к которой было последнее обращение.

В ОМЭВМ предусмотрена возможность расширения памяти данных путем подключения внешних устройств емкостью до 64 Кбайт.

Память программ предназначена для хранения программ и имеет отдельное от памяти данных адресное пространство объемом до 64 Кбайт, причем часть памяти программ с адресами 0000h-0fffh расположена на кристалле ОМЭВМ. Память программ, расположенная на кристалле, состоит из 12-разрядного дешифратора и ПЗУ емкости 4К*8 бит. Запись программ в ПЗУ происходит во время изготовления кристаллов.

контроллер программа процедура

2.2 Устройства ввода-вывода

Порты Р1-Р3 имеют идентичные характеристики. Данные, записанные в них, статически фиксируются и не изменяются до перезаписи.

В режиме работы с внешней памятью программ порт Р2 служит для выдачи сигналов старших разрядов адреса и статически фиксирует их до момента изменения.

Для перевода любой линии портов Р1-Р3 на прием входной информации необходимо в соответствующий фиксатор-защелку порта записать «1» с помощью команд выдачи данных. Сигнал RST устанавливает все порты на прием входной информации.

Порт Р0 - восьмиразрядный двунаправленный порт с тремя состояниями. Информация, выдаваемая портом Р0 с помощью команд выдачи сопровождается строб-импульсом WR.

При записи информации в порт Р0 с помощью команд приема вырабатывается строб-импульс RD.

Кроме операция ввода-вывода информации предусмотрена возможность выполнения логических операция И, ИЛИ и исключающее ИЛИ непосредственно на фиксаторах портов Р0-Р3.

В режиме работы с внешней памятью программ порт Р0 служит для выдачи младших разрядов адреса памяти программ и приема кодов команд. В режиме работы с внешним ОЗУ данных порт Р0 служит для выдачи адреса внешнего ОЗУ данных и приема-выдачи данных при обмене с внешним ОЗУ.

При работе с последовательным портом ОМЭВМ линии Р3.0 и Р3.1 используются, соответственно, как вход и выход последовательного канала.

.3 Разработка структурно-функциональной схемы

Устройство состоит из следующих функциональных блоков:

Блок микроконтроллера

Осуществляет функционирование микроконтроллера. Состоит из следующих элементов:

схема тактового генератора. Осуществляет выработку внешнего сигнала тактирования микроконтроллера частотой 12МГц.

схема первоначального сброса микроконтроллера. Обеспечивает корректный запуск.

сам микроконтроллер.

Блок клавиатуры

Осуществляет подключение матрицы из 12 кнопок к 7 выводам микроконтроллера. Код строки матрицы выдается в младших трех битах порта P2, код столбца матрицы выдается в старших четырех битах порта Р2. В узлах полученной матрицы из 3 строк по 4 столбца расположены кнопки. На 3 младших бита порта подается логическая «1». На старшие 4 бита подается 0. Как только нажата клавиша (происходит переключение), состояние бита строки, соответствующей столбцу, перейдет в «0».

Блок индикации набора пароля.

Осуществляет подключение LCD-панели к порту Р0 и порту Р3 (биты Р3.0, Р3.1, Р3.2) микроконтроллера.. Отображает дополнительную информацию на LCD-экране.

Блок электронного ключа замка.


Состоит из транзисторной пары и открывает или закрывает двери посредством реле или электромагнита вдвигающего язычок.

3. Функциональная схема устройства

3.1 Выбор элементной базы

При разработке устройства были использованы следующие электронные компоненты:

Микроконтроллер КР1816ВЕ51. Этот микроконтроллер был выбран по причине хорошего соответствия поставленной задаче и низкой стоимости.Hitachi HD44870. Данный контроллер фактически является промышленным стандартом и широко применяется при производстве алфавитно-цифровых ЖКИ-модулей. АЦ ЖКИ-модули представляют собой недорогое и удобное решение, позволяющее сэкономить время и ресурсы при разработке новых изделий, при этом обеспечивают отображение большого объема информации при хорошей различимости и низком энергопотреблении.

Электронный стабилизатор КР145ЕН5А

.2 Описание алгоритма программы

) Дежурный режим.






В

Р

Е

М

Я










1

2

:

2

2

:

4

0




В дежурном режиме (пока не нажата клавиша) работы устройства на ЖКИ отображается текущее время.

) Режим ввода пароля.

В

В

Е

Д

И

Т

Е

 

П

А

О

Л

Ь


*

*

*

*

*

*











В этот режим работы устройство автоматически, если нажата управляющая клавиша ВВОД. Далее осуществляется вывод строки «Введите пароль» на ЖКИ и ожидается нажатие клавиши. Далее вводим клавиши и подтверждаем ввод кнопкой ВВОД. Если такой пароль существует, открывается дверь. Если пароль не совпадает с зарегистрированными, то выдается сообщение об ошибке. Если ввод неправильного пароля повторяется 3 раза, после третьего раза выдается сообщение об ошибке и подается звуковой сигнал.

В

В

Е

Д

И

Т

Е


П

А

Р

О

Л

Ь


*

*

*

*

*

*

*



О

Ш

И

Б

К

А


Если введен мастер-пароль, можно редактировать старые пароли или установить новое время. Выдается строка «Введите №». Дальше ожидается нажатие клавиши.

ВВЕДИТЕ№*































Если нажата клавиша ОК, осуществляется установка нового времени. Выводится сообщение «Введите время». После этого ждем нажатия клавиш. Вводятся цифры нового времени, которые затем выводятся на ЖКИ с символом «:»;

ВВЕДИТЕВРЕМЯ















1

2

4

0

5

9











Если нажата одна из цифровых клавиш, начинается процедура ввода нового пароля. Сначала выводится сообщение «Введите пароль» и ожидается нажатие клавиш. Вводятся цифры нового пароля, которые затем отображаются на ЖКИ.

ВВЕДИТЕПАРОЛЬ















1

2

9

8

7

5











.3 Описание используемых процедур

Процедура-обработчик прерываний таймера.

В ней осуществляется проверка нажатия клавиши, особенно контролируется нажатие управляющих клавиш ПАРОЛЬ и ОК, а также осуществляем подсчет секунд, минут и часов.

Процедуры вывода сообщений: выводят сообщения на ЖКИ ВВЕДИТЕ, НОВЫЙ, ПАРОЛЬ, ВРЕМЯ, ОШИБКА, ПОВТОРИТЕ.

Процедура вывода времени на ЖКИ: выводит текущее время на ЖКИ.

Процедура вывода номера пароля и времени ввода на ЖКИ. Процедура выводит на ЖКИ номер и время введенного ранее пароля. Доступна, если набран мастер-пароль.

Процедура вывода на ЖКИ. Осуществляет вывод данных, помещаемых в буфер на ЖКИ.

Процедура поиска пароля. Ищет пароль среди известных 10 паролей. Одновременно проверяет введенный пароль на мастер пароль. Если введен мастер-пароль, происходит переход в процедуру программирования.

Процедура программирования. Работает, если введен мастер-пароль.

Позволяет редактировать уже введенные пароли, устанавливать время, просматривать номера и время введенных ранее паролей.

После начала работы процедуры выводится сообщение: введите номер. В зависимости от нажатой клавиши, будет выбран тот или иной режим работы процедуры.

Если нажата клавиша ОК - осуществляется установка нового времени.

Если нажата клавиша ПАРОЛЬ - мы может просмотреть 10 ранее введенных паролей и время ввода.

Если нажата одна из цифровых клавиш - начитает работать режим редактирования одного из ранее запрограммированных паролей.

Процедура инициализации.

В ней устанавливаются режимы работы таймерф, инициализируется ЖКИ, показания часов устанавливаются в 00:00:00.

: procedure; /*пpоцедуpа инициализации*/=00000001b;/*пеpвый pежим для 0 о таймеpа */=1;/*пpеpывание по фpонту сигнала пеpеполнения*/,tl0=0;tr0=1; /*обнуляем счетчики и pазpешаем pаботу 0 таймеpa*/=0;/*запускаем таймеp 0 и 1*/=1;/*pазpешаем пpеpывания Т0 T1*/=1;/*pазpешаем все пpеpывания*/=00111111b; st=0;/* скан 1 столбца*/

n_key=0; k_old=0;fl_ind=1;fl_p=1;=0;fl_r1=0;fl_r2=0;fl_r3=0;fl_r4=0; flN=0;

/*инициализация ЖКИ*/

do I=0 to 3;

rs=0;rw=1b;e=1b; call time(10);while (p0 and 80h)<>0; end;=0; rs=0; rw=0; call time(10);=LCD_Ini(i);;

/*устаналиваем значения по умолчанию*/

chas=0;min=0;sek=0;

out_ind;init;

Листинг программы.: do;

$include(reg812.dcl)

declare

/* объявление основных переменных и флагов */_vvedite(*) byte (42h,0b3h,65h,0e3h,0b8h,0bfh,65h,20h),/*стр Введите*/

str_time(*) byte (0b3h,70h,65h,0bch,0c7h,20h),/*стр время*/_nov(*) byte(0bdh,6fh,0b3h,0c3h,0b9h,20h),/*стр новый*/_parol(*) byte(0a8h,61h,70h,6fh,0BBh,0c4h,20h),/*стр пароль*/_ohibka(*) byte (4fh,0c1h,0b8h,0b2h,0bah,61h,20h),/*стр ошибка*/_povtor(*) byte (0beh,0b3h,0bfh,0bfh,06fh,070h,0b8h,0bfh,65h,20h), /*стр повторите*/_pasvord(10)byte constant(1,9,4,6,2,0,2,4,3,8),/*пароль программирования*/

pasv_buf(10),/*буфер введенного пароля*/(100) byte,/* массив добавляемых паролей*/(75) byte, /*массив последних 10 введ паролей*/ _Ini (*) byte constant(08h,02h,0fh,01h), /*команды инициализации ЖКИ*/(56) bute ,/* содержимое индикатора */

(i,ip,jp,per,s,np,st,timN,nreg,pl) byte,/* переменные для работы */

(flag,fl_p,flH,fl_key,fl_pasv,fl_ok,fl_ind) byte,/*флаги определения режима работы */_key byte, /*номер нажатой клавиши */

(k1_old) byte,/*номер последней нажатой клавиши */

(sek,min,chas) word;/*секунды,минуты и часы*/

/*пеpеименование pазpядов поpта */rs literally 'P3.0',/* RS линия связи с LCD*/

rw literally 'P3.1',/*RW линия связи с LCD*/literally ‘P3.2’;_int: procedure interrupt 1; /*---Обработчик прерывания таймера---------------*/

if st=0 then P2=10111111; /*установка сканируемого столбца*/

if st=1 then P2=11011111;st=2 then P2=11101111;st=3 then P2=11110111;st=4 then do; /*если нет нажат клавиш сброс флага нажатия иначе утанавливаем */n_key=0 then do; fl_key=0;key_old=0;end

else key_old=n_key;/*предшеств кл */ =0; n_key=0;; st=st+1;

/*блок проверки нажатия клавиш*/(p2.0=0b) then do n_key=st*3+1; fl_key=1; end;(p2.1=0b) then do n_key=st*3+2; fl_key=1; end;(p2.2=0b) then do n_key=st*3+3; fl_key=1; end;

if fl_key=1 then do/*обработка нажатий на определенныке клавиши*/

if (n_key=11)and(n_key<>key_old) then fl_pasv=1;/*флаг ввода пароля на вход*/(n_key=12)and(n_key<>key_old) then fl_ok=1;/*флаг установки подтверждения*/

end; =per+1; /* увеличиваем счетчик переполнений */

if per>=15 then do; /*отсчет времени*/

per=0;sek=sek+1;/*отсчет секунд*/

if sek>=60 then do; min=min+1;sek=0;/*минут*/min=60 then do; chas=chas+1; if chas=24 then chas=0;end;end;/*часов*/

flag=1;/*флаг необходимости обновления изображения индикатора*/;=0; /* сброс флага переполнения */

end timer_int;_ind:procedure; /* вывод Введите*/=0;j=1; do while str_vvedite(i)<>20h; ind(j)=str_vvedite(i);=i+1;j=j+1;end; ind(j)=20h;j=j+1;vvod_ind;_ind:procedure; /* вывод новый*/=0; do while str_nov(i)<>20h; ind(j)=str_nov(i);=i+1;j=j+1;end; ind(j)=20h;j=j+1;nov_ind;_ind:procedure; /* вывод пароль*/=0;do while str_parol (i)<>20h; ind(j)=str_parol(i);=i+1;j=j+1;end;ind(j)=20h;j=j+1;parol_ind;_ind:procedure; /* вывод Ошибка*/=0; do while str_ohibka(i)<>20h;ind(j)=str_ochibka (i);=i+1;j=j+1;end;ind(j)=20h;j=j+1;ohibka_ind;_ind:procedure; /* вывод Ошибка*/=0; do while str_povtor(i)<>20h;ind(j)=str_povtor(i);=i+1;j=j+1;end;ind(j)=20h;j=j+1;povtor_ind;:procedure;/*вывод ВРЕМЯ*/=0; do while str_time(i)<>20h;ind(j)=str_time(i);=i+1;j=j+1;end;ind(j)=20h;j=44;time ;_ind:procedure; /* вывод времени*/=5; call time;(j)=(chas/10)+30h;ind(j+1)=(chas mod 10)+30h; ind(j+2)=0d0h;(j+3)=(min/10)+30h;ind(j+4)=(min mod 10)+30h; ind(j+5)=0d0h;(j+6)=(sek/10)+30h;ind(j+7)=(sek mod 10)+30h;j=j+7; out_ind;time_ind;

timep_ind:procedure;/*выводим номер и время введенного пароля*/

ind(j)=pl+30h;ind(j+1)=2dh;(j+2)=(reg(pl+1)/10)+30h;ind(j+3)=(reg(pl+1) mod 10)+30h; ind(j+4)=0d0h;(j+5)=(min/10)+30h;ind(j+6)=(min mod 10)+30h; out_ind;timep_ind;_ind: procedure; /*вывод буфера на жки*/time(20);rs,rw=0; P0=1;/*очистка ЖКИ*/I=0 to 55; =0;rw=1;e=1b;P0=0ffhwhile (P0 and 80h)<>0; end;=1; rw=0;call time(20);=Ind(i); e=0;call time(20); end; I=0 to 55; ind(i)=20h;end;/*очистка буфера индикатора*/

end out_ind;

/*процедурa поиска введенногo пароля*/_pasv:procedure;_p=0;Ip=0;/*флаг перехода в режим программирования*/

do while (Ip<=9) and (pasv_buf(ip)=master_pasvord(ip));

ip=ip+1;end;Ip=9 then call progr;/*введен пароль программирования, вызов процедуры */

/*программирования*/ =0;jp=0;np=12;nr=0;nr=0 to 9;/*проверяем весь массив паролейip=0 to 9;/*сравниваем введенный пароль с установленными*/

do while (Ip<=9) and (pasv_buf(ip)=pasv(ip));

ip=ip+1;end;Ip=9 then np=nr;/*введеный пароль совпадает с записанным по номеру nr*/

end;;poisk_pasv;

progr:procedure;/*программирование нового пароля*/

call vvod_ind;ind(j)=4eh;call out_ind;/*Выводим строку Ведите№*/

do while n_key<>0;end;/*ждем отпускания клавиши*/

do while n_key=0;end; /*ждем нажатия клавиши*/

if (n_key=12) then do;/*установка параметров времени*/

call vvod_ind; call time;j=44;call out_ind; /*выводим строку введите время*/ip=0 to 5;while n_key<>0;end;/*ждем отпускания клавиши*/while n_key=0;end;n_key=10 then n_key=0;_buf(ip)=n_key;ind(j+ip)=n_key+30h;call out_ind;/* ввод инф и выв на индикатор*/;= rol(pasv_buf(0),4)+ pasv_buf(1);/*устанавливаем часы*/

min= rol(pasv_buf(2),4)+ pasv_buf(3);/*устанавливаем минуты секунды*/= rol(pasv_buf(4),4)+ pasv_buf(5);/*устанавливаем часы*/

end;progr;(n_key=11) then do;/*просмотр лога введенных паролей*/

do while n_key<>12;/*пока не нажат ОК можем просматривать лог*/

call vvod_int; ind(j)=4eh;j=41; call out_ind; /*выводим строку введите N*/

do while n_key<>0;end;/*ждем отпускания клавиши*/

do while n_key=0;end;n_key=10 then do; pl=n_key; call timep; end;;progr;

n_key<11 then do;/*ввод пароля*/=0;vvod_ind;call parol_ind; out_ind;/* выводим строку введите пароль*/while (ip<10)and(n_key<>12);/*цикл ввода пароля*/

do while n_key<>0;end;/*ждем отпускания клавиши*/ while n_key=0;end;/*ждем нажатия следующей клавиши*/

if n_key=10 then n_key=0;_buf(ip)=n_key;ind(j+ip)=n_key+30h;call out_ind;/* ввод инф и выв на индикатор*/;;progr;: procedure; /*пpоцедуpа инициализации*/

tmod=00010001b;/*пеpвый pежим для 0 и 1 го таймеpа */=1;/*пpеpывание по фpонту сигнала пеpеполнения*/,tl0=0;tr0=1; /*обнуляем счетчики и pазpешаем pаботу 0 таймеpa*/=0;/*запускаем таймеp 0 и 1*/=1;/*pазpешаем пpеpывания Т0 T1*/=1;/*pазpешаем все пpеpывания*/=00111111b; st=0;/* скан 1 столбца*/

n_key=0; k_old=0;fl_ind=1;fl_p=1;=0;fl_r1=0;fl_r2=0;fl_r3=0;fl_r4=0; flN=0;

/*инициализация ЖКИ*/

do I=0 to 3;

rs=0;rw=1b;e=1b; call time(10);while (M and 80h)<>0; end;=0; rs=0; rw=0; call time(10);=LCD_Ini(i);;

/*устаналиваем значения по умолчанию*/

chas=0;min=0;sek=0;

out_ind;init;

/*Tело основной программы */init;while 1;=0; while flag=0; end;/*ждем пока не пройдет секунда*/time_ind; /*Строка Время 12:19:33 */n_key=11 then do; ip=0;vvod_ind;call parol_ind; out_ind;/* выводим строку введите пароль*/while (ip<10)and(n_key<>12);/*цикл ввода пароля*/

do while n_key<>0;end;/*ждем отпускания клавиши*/ while n_key=0;end;/*ждем нажатия следующей клавиши*/

if n_key=10 then n_key=0;_buf(ip)=n_key;ind(j+ip)=23h;/* ввод инф и выв на индикатор #####*/;out_ind;poisk_pasv;/*проверяем пароль */

if np<11 then p3.3=1 /*открываем замок */

else do;j=0;call ohibka;call povtor;call out_ind;end;/*сообщаем об ошибке*/

n=n+3;if n>29 then n=0;/*увеличиваем и проверяем указатель лога*/

End;

;start;

Похожие работы на - Микропроцессорный контроллер кодового замка

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!