Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
"Разработка контроллера управления
цифровым кодовым замком"
Выполнил: Власов Н.В.
студент гр. 9637
Проверил: Новиков А.О.
Техническое задание
Необходимо разработать контроллер, выполняющий функцию расширенной авторизации с использованием внешнего электронного ключа и ввода цифрового пароля на клавиатуре.
Интерфейс обеспечивается за счет простейшей индикации состояния системы включением или отключением светодиода. Ввод данных - кодов пароля на 12 разрядной цифровой клавиатуре:
1) 10 первых клавиш которые соответствуют цифрам от 0 до 9.
2) Две оставшиеся используются как управляющие, одна из которых подтверждение ввода, а другая отмена ввода.
Для обеспечения взаимодействия с компьютером предусмотрено подключение через последовательный COM порт(RS232) или USB реализованный как виртуальный адаптер (USB/COM)
Общие реализуемые функции:
Система предусматривает считывание кода iBuuton и передачи его на компьютер с ожиданием ответа от системы.
Для дальнейшей авторизации требуется ввести пароль код.
Далее если пользователь прошел авторизацию, то необходимо произвести считывание зашифрованного кода из ОЗУ iButtonа, для последующей передачи его на сервер авторизации Kerberos.
Также предусмотрено использование мастер ключа находящегося у администратора с его помощью выполняется добавление последующих клиентов (новых IButton) и запись в них идентификационного кода Kerberos. Пароль вводимый при добавлении ключа является дешифрующим ключем для декодирования кода записываемого в память.
Для исключения кражи шифрованной информации система не имеет собственного внешнего ПЗУ а все ключи хранятся в системе Kerberos.
Введение
Развитие микроэлектроники и широкое применение ее изделий в промышленном производстве, в устройствах и системах управления самыми разнообразными объектами и процессами является в настоящее время одним из основных направлений научно-технического прогресса.
За последние годы микроэлектроники бурное развитие получило направление, связанное с выпуском однокристальных микроконтроллеров, которые предназначены для «интеллектуализации» оборудования различного назначения. Однокристальный микроконтроллер представляет собой приборы, конструктивно выполненные в виде БИС, и включающие в себя все составные части «голой» микро ЭВМ: микропроцессор, память программы, память данных, также программированные интерфейсные схемы для связи с внешней средой. Использование микроконтроллеров в системах управления обеспечивает достижение исключительно высоких показателей эффективности при столь низкой стоимости, что микроконтроллерам видимо нет разумной альтернативной базы для построения управляющих и регулирующих систем.
1. Разработка функциональной схемы
Для правильного последующего проектирования устройства и реализации его в виде принципиальной электрической схемы требуется первоначально провести анализ основных функций и построение функциональной схемы устройства.
Рис. 1
ПИ преобразователь электронного интерфейса RS232 + - 12 В, который создаёт требуемые +/ - 12 В засчет встроенного внутреннего генератора и конденсаторов обвязки, подключённых к данному чипу.
МК управляющий микроконтроллер. Он считывает пароль введённый пользователем при помощи клавиатуры параметры. В зависимости от правильности введенного пароля микроконтроллер посылает сигналы
СУ считывающее устройство. Оно считывает данные с iButton и передает их на микроконтроллер
ЖКИ - жидко-кристаллический индикатор
БК-блок матричной клавиатуры на 12 клавиш
Алгоритм работы замка когда пользователь прикладывает ключ к считывающему устройству, микропроцессор считывает его код и пытается найти этот код в своей памяти. Если такой код в памяти существует, то микропроцессор дает команду на отпирание замка двери. Если код прикладываемого ключа отсутствует в памяти, то ничего не происходит, и дверь остаётся закрытой. Если код ключа и пароль замка совпадают, то двери отпираются.
2. Разработка принципиальной схемы устройства
2.1 Выбор микроконтроллера
Для выбора контроллера я решил провести анализ следующих серий микроконтроллеров широко представленных на рынке и используемых в аналогичных устройствах: AVR, PIC, MK-51.
Перед тем как выбирать контроллер надо четко определиться, каким критериям должен соответствовать контроллер для нашего устройства. Основные требования к контроллеру: достаточное количество портов, объем памяти, простая реализация и др.
Краткий обзор AVR
AVR ядро базируется на усовершенствованной RISC архитектуре, с регистровым файлом быстрого доступа, содержащим 32 регистра общего назначения, непосредственно связанных с арифметико-логическим устройством (ALU), и мощной системой команд. За один тактовый цикл из регистрового файла извлекаются два операнда, выполняется команда и результат записывается в регистр назначения. Такая высокоэффективная архитектура обеспечивает производительность почти в десять раз большую, чем стандартные CISC микроконтроллеры.
Обзор PIC
Альтернативой является PIC 16С745. Все команды данного контроллера состоят из одного слова (14 бит шириной) и исполняются за один цикл (200 нс при 20 МГц), кроме команд перехода, которые выполняются за два цикла (400 нс). Контроллер имеет прерывание, срабатывающее от четырех источников, и восьмиуровневый аппаратный стек. Высокая нагрузочная способность (25 мА макс. втекающий ток, 20 мА макс. вытекающий ток) линий ввода/вывода упрощают внешние драйверы и, тем самым, уменьшается общая стоимость системы. Имеется возможность работы с тремя таймерами и каналом I2C. Но при всем этом цена более высокая, чем у 52 контроллера. Так же недостатком является однократно программируемое ПЗУ, что требует покупки более дорогого отладочного кристалла.
Обзор семейства МК51
Для использования в данном устройстве мной был выбран микропроцессор АТ89S2051 серии MSC-51. Он обладает высокими техническими характеристиками:
Частота работы от 4х до 24МГц.
Объем встроенного флеш ПЗУ 2КБ.
Объем регистрового ОЗУ 128 байт.
Два счетчика 16ти разрядных счетчика\таймера.
Порт выдерживает нагрузку до 20мА.
Число портов ввода вывода 15(оставлены порты P1 и P3).
Котроллер поставляется в двацативыводном корпусе.
Напряжения питания от 2.7 до 6В (номинальное 5В).
Из дополнительных достоинств хочется отметить более простой программатор и невысокую цену 50-60р. Распиновка выводов контроллера представлена на рисунке. Все выше сказанное позволяет реализовать требуемые функции и существенно упростить схему. Другой весьма важный довод, что данный тип контроллера мне наиболее хорошо знаком по курсу лабораторных работ и допускает написание программ на языке высокого уровня PLM.
Рис. 1
В активном режиме микроконтроллер на частоте 12 МГц потребляют порядка 25 мА и в пассивном режиме, В стоповом режиме ожидания потребление не превышает 100 мкА но данный режим мной не предусмотрен в программе. Внутренняя архитектура во многом сходна с полными контроллерами 51 серии и ограничена лишь количеством выводов, для наглядности, я решил представить внутреннюю структурную схему от фирмы производителя, из технической документации на контроллер. На структурной схеме также виден аналоговый компаратор встроенный в контроллер и позволяющий в паре с ЦАП проводить оцифровку аналоговых сигналов но данное решение мной было отвергнуто из за нецелесообразности и усложнения схемы. Тем более датчики уже оттарированы и дают высокую точность измеренного сигнала. Такое решение наиболее простое и доступное в данном контроллера. Так как мне требуется не очень большое число выводов, данный контроллер полностью обеспечивает необходимые потребности в разрядности управляющих и входных портов.
Рис. 2
2.2 Выбор электронного ключа
В качестве электронного ключа мной было рассмотрено несколько вариантов во-первых это пластиковые карты специального образца или smart карты данный вариант не подошел так как требует или сложную контактную площадку или дорогой считыватель. В качестве второго варианта предполагалось использование микросхем флешь памяти небольшой емкости при невысокой цене и простоте изготовления разъем обладает невысокой долговечностью, а при некачественном контакте считывание кода не происходит. Третьим вариантом были таблетки iButton которые наиболее подходят в данном случае так как имеют небольшую стоимость, простой контактный разъем и возможность выбора таблетки с необходимым объемом памяти. Последний четвертый вариант использование RFid радио идентификаторов не подходит так как данные радиоключи хотя и совместимы с IButton но не имеют собственной памяти в которую записывается ключKerberos. iButton - это микросхема, помещенная в стандартный круглый корпус диаметром 16,3 мм из нержавеющей стали (корпус MicroCan). Корпус устойчив к воздействию ударов, грязи и влажности. Есть две модификации с разной толщиной: F3 и F5. На рис. 1 показаны чертежи корпусов обеих версий. Поскольку крышки у них одинаковы, для "ответной" части замка применяется одна и та же считывающая чашка.
Рис. 3
Кромка корпуса MicroCan позволяет удобно закреплять его в держателях.
Корпус состоит из двух электрически изолированных друг от друга частей, являющихся контактами, через которые микросхема соединяется с внешним миром. Таким образом, получается недорогой (в смысле использования аппаратных ресурсов считывающей аппаратуры) и надежный интерфейс-один провод данных и один общий провод. Энергия, необходимая для обмена информацией и работы микросхемы в корпусе, поступает от провода данных. На рис. 2 показана структурная схема iButton.
Микросхема изготовлена по технологии КМОП, и в состоянии ожидания основной ток потребления - только ток утечки (у КМОП он очень мал). Для сохранения энергопотребления на предельно низком уровне во время "активных" состояний (чтение данных, например), а также для совместимости с существующими сериями микросхем логики и микропроцессорами линия данных в iButton выполнена как в выход с открытым стоком.
Рис. 4
Для взаимодействия с внешними устройствами на микросхемах КМОП нужен только нагрузочный резистор сопротивлением около 5 кОм, подсоединенный к плюсу питания VDD (+5 В) и к выходу обычного двунаправленного порта с открытым стоком (рис. 5).
Рис. 5
Если вход и выход процессора используют разные выводы, то их подключают, как показано на рис. 6.
Рис. 6
Для ключа iButton описанного выше, используется специальный, оптимизированный протокол, позволяющий осуществлять двунаправленный обмен данными. Протокол носит название 1-Wire. Последовательная передача осуществляется в полудуплексном режиме (т. е. либо прием, либо передача), внутри дискретно определенных временных интервалов, называемых тайм-слотами.
Микроконтроллер (master-устройство), подключенный к считывающей чашке, всегда инициирует передачу с помощью посылки командного слова на прикладываемый к чашке ключ iButton (он играет роль подчиненного, или slave-устройства). К шине может быть подключено несколько slave-устройств. Подобно электрическим вилке и розетке, которые определяют потребитель и источник электричества, контактное считывающее устройство в виде чашки является атрибутом master-устройства (которое, кстати, во многих случаях служит источником энергии для iButton), а круглая металлическая "таблетка" iButton является slave-устройством. Такое точное разделение позволяет легко избежать конфликтов - соединения двух master-устройств.
Команды и данные посылаются бит за битом и собираются в байты, причем вначале передается наименее значащий бит LSB (Least Significant Bit). Синхронизация устройств master и slave происходит по спаду импульса, когда master замыкает линию данных стоком выходного транзистора на общий провод. Через определенное время после этого происходит анализ состояния данных на линии (высокий или низкий уровень) для получения одного бита информации. В зависимости от направления передачи информации в текущий момент этот анализ делает либо master-устройство, либо slave-устройство. Этот метод обмена информацией называют передачей данных в тайм-слотах (рис.7).
Режим записи 1
Рис. 7 - Режим записи 0
Рис. 8 - Режим чтения
Рис. 9
Каждый тайм-слот отсчитывается независимо от другого, и при обмене данными могут иметь место паузы без возникновения ошибок.
Почти сразу после присоединения к считывающему устройству (через несколько микросекунд) slave-устройство iButton выдает в линию импульс, чтобы "сказать" master-устройству, что оно присутствует на линии и ждет команду. Этот сигнал называется presence pulse (импульс присутствия, далее - просто presence). Master может также давать запрос на iButton с целью получения presence путем посылки специального импульса, называемого импульсом сброса (reset pulse, далее - просто reset). Если iButton принял сигнал reset, он анализирует линию данных, и как только линия снова достигнет высокого уровня, iButton сгенерирует presence. Полная последовательность импульсов reset и presence показана на рис.6.
После выдачи 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.
В главном цикле программы заполняются все регистры для выполнения обработчиков прерывания. В бесконечном цикле происходит постоянная проверка идет ли обмен по протоколу 1-ware и далее уже в зависимости от нажатых клавиш проходят различные проверки и выполняются операторы согласно алгоритма работы микроконтроллера.
3.3 Описание функционирования программы
Рабочая программа реализуется в двух основных частях. Обработчик прерывания таймера. В котором ведется постоянное определение ключом и выполняется отображение на ЖКИ. При подключении ключа int 0 и в обработчике прерываний запускается процедура обмена.
Еще образуется прерывание последовательного порта позволяя отправлять информацию о ключах и получать информацию о командах. Для реализации сравнений ключа после приема а также вывода основных сообщений в массив ЖКИ. Используется основная часть программы. Рассматривая подробнее работу обработчика внешнего прерывания. Как только возникает подключение ключа, он закорачивается на время (60 мксек). Закорачивая сигнальную линию выраженного прерывания поэтому необходимость дожидаться завершения этого импульса. Далее идет обработка с формированием стартового импульса для начала обмена. Стартовый импульс 500 мсек., что обеспечивает требования 480 мксек. Необходимое для организации сброса. Дожидаемся сигнала ответа через 70 мксек после чего выдерживается пауза для восстановления линии, и подзарядки ключа (300 мксек.). Следующий шаг это передача команды 33 считать код. Считывание кода начинается сразу после передачи команды сразу после паузы 50 мксек. Считываем 8 байт кода и производим сравнение его с имеющимися в памяти кодами. Если код совпал пользователю предлагается ввести пароль для пароля зарезервировано 10 позиций. Ввод последней цифры может быть отменен клавишей 11 (del). Завершение ввода не меньше символов выполняется клавишей 12 в основном теле программы. Если введенный цифры совпали то дверь открывается, если не совпали то дверь остается заблокирована.
Код нажатия клавиш определяет в процедуре обработчика таймера путем перемещения по битно по разрядам нулевого значения. Если на порту 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,sekl; //shethiki
unsigned char poz,nkey; //otobragaem segment
unsigned int interruptcnt;
sbit iware=P3^2;
bit fok;
unsigned char lcd1[]={0xDD,0x05,0xEC,0xAD,0x35,0xb9,0xF9,0x0D,0xFD,0xBD,0x02}; //lcd 1 str
unsigned char lcd2[]={0,0,0,0,0,0,0,0,0,0,0}; //lcd 1 str
unsigned char dat[]= {0,0,0,0,0,0}; //klav
char iw;
unsigned char dat1[]={0xDD,0x05,0xEC,0xAD,0x35,0xb9,0,3,6,9,7,1};
unsigned char dat1[]={0xD1,0x05,0xEC,0xAD,0x35,0xb9,0xF9,0x0D,0xFD,0x5D,0x12};
unsigned char dat1[]={0xD2,0x05,0xE2,0xAD,0x35,0xb0,0xF9,0x0D,0xFD,0xBD,0x67};
unsigned char dat1[]={0xDD,0x05,0xEC,0xAD,0x35,0xb9,0xF9,0x0D,0xFD,0xBD,0xDE};
unsigned char dat1[]={0xDA,0x05,0xEC,0xAD,0x35,0xb9,0xF9,0x0D,0xFD,0x2D,0xAA};
unsigned char dat1[]={0xD6,0x05,0xEC,0xA5,0x35,0xb9,0xF1,0x0D,0xFD,0x1D,0x01};
unsigned char dat1[]={0xAA,0x05,0xEC,0xAD,0x35,0xb9,0xF9,0xAA,0xFD,0xBD,0x0F};
unsigned char dat1[]={0xCC,0x05,0xEC,0xAD,0x35,0xb9,0xF9,0x0D,0xFD,0xBD,0x02};
unsigned char dat1[]={0xC1,0x05,0xEC,0xAD,0x35,0xb9,0xF9,0x0D,0xFD,0xBD,0x0A};
unsigned char dat1[]={0xA1,0x05,0xEC,0xAD,0x32,0xb9,0xF9,0x0D,0xAA,0xBD,0x03};
unsigned char dat1[]={0x11,0x05,0xEC,0xAD,0x35,0xb9,0xF9,0x0D,0xFD,0xBD,0x09};
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);e=1;}
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);e=1;}
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*/
ES=1;
EX1=1;
TR0=1; /*start timet0*/
while (1)
{
while (iware);//ogidanie klucha
resetiw;
if (fok)
{write(0x33);
for(j=0;j<8;j++)
{
readiw();
dat[j]=iw;
}
j=0;
fok=0;nkey=11;
for(n=0;n<10;n++)
for(j=0;j<6;j++;)
if (dat[j+n*12]==dat1[j])fok=1; else {fok=0;;}
if (fok) {nkey=n;}
n1=0;P1=0xFE;
while (key!=12)&&(n<6)
for(i=0;i<6;i++)
{
if (key==0) =key
if (!P3^3) {dat[6+n1]=j;key=j;n1++;}
else if (!P3^4) {dat[6+n1]=j*2;key=j*2;n1++;
if (key==11)n1--;}
P1=P1<<1;
}
ok=0;
for(j=6;j<12;j++;)
{
if (dat[j+n*12]==dat1[j]) fok=1;
else {fok=0;
}
if (fok) {SBUF=n;poz=0;
P3^7=1; for(i=0;i<2000;i++) delay(200);P3^7=0;}//vse sovpalo na 2 sek open door
}
}
}
}
Размещено на Allbest.ru