Система охранной сигнализации
Характеристика системы охранной сигнализации, особенности выбора микроконтроллера. Основные этапы развития микроэлектроники. Общая характеристика микроконтроллера PIC16F8776 фирмы Microchip: принцип действия, анализ структурной схемы устройства.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 23.12.2012 |
Размер файла | 176,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
охранный сигнализация микроконтроллер
Развитие микроэлектроники и широкое применение ее изделий в промышленном производстве, в устройствах и системах управления самыми разнообразными объектами и процессами является в настоящее время одним из основных направлений научно-технического прогресса.
Использование микроэлектронных средств в изделиях производственного и культурно-бытового назначения приводит не только к повышению технико-экономических показателей изделия (стоимости, потребляемой мощности, габаритных размеров) и позволяет многократно сократить сроки разработки и отодвинуть сроки «морального старения» изделий, но придает им принципиально новые потребительские качества (расширенные функциональные возможности, модифицируемость, адаптивность и т.д.).
За последние годы микроэлектроники бурное развитие получило направление, связанное с выпуском однокристальных микроконтроллеров (ОМК), которые предназначены для «интеллектуализации» оборудования различного назначения. ОМК представляют собой приборы, конструктивно выполненные в виде БИС, и включающие в себя все составные части «голой» микроЭВМ: микропроцессор, память программы, память данных, также программируемые интерфейсные схемы для связи с внешней средой. Использование микроконтроллеров в системах управления обеспечивает достижение исключительно высоких показателей эффективности при столь низкой стоимости (во многих применениях система может состоять только из одной БИС микроконтроллера), что микроконтроллерам, видимо, нет разумной альтернативной базы для построения управляющих и регулирующих систем. К настоящему времени более двух третей мирового рынка микропроцессорных средств составляют именно ОМК.
Объект автоматизации
В качестве объекта автоматизации была выбрана система сигнализации. Система позволяет осуществлять охранный контроль над помещением на основе получения информации от датчиков движения, термодатчика, датчика дыма и линии разрыва. При поступлении сигналов срабатывания от соответствующих датчиков происходит подача сигнала на блоки управления, отвечающие за конкретный вид тревоги. Время срабатывания каждого из датчиков фиксируется. Имеется возможность устанавливать и изменять текущее время, а также температуру срабатывания термодатчика. Управление осуществляется при помощи клавиатуры. Состояние, а также режимы работы устройства отображаются на индикаторе.
Выбор микроконтроллера
Для решения поставленной задачи прежде всего необходимо выбрать микроконтроллер. Основанием для выбора данного микроконтроллера послужили следующие причины:
- наличие достаточного количества портов ввода-вывода. К микроконтроллеру необходимо подключить клавиатуру, LCD-дисплей, датчики, блоки управления сигналами тревоги.
- наличие встроенного АЦП.
- наличие программного пакета для написания и отладки программы микроконтроллера Hi-Tech.
- достаточная изученность микроконтроллера.
В моей работе я решил использовать ПИК контроллер PIC16F8776. Это однокристальный 8-разраядный FLASH CMOS микроконтроллер компании Microchip Technology. Микроконтроллеры серии PIC16FXX фирмы Microchip являются электрически программируемыми. Память программ может быть стерта и повторно запрограммирована без удаления из схемы. Микроконтроллеры будут иметь одинаковые параметры для опытного образца, экспериментальной партии и выпуска продукции.
Архитектура основана на концепции раздельных шин и областей памяти для данных и для команд (Гарвардская архитектура). Такая концепция обеспечивает простую, но мощную систему команд, разработанную так, что битовые, байтовые и регистровые операции работают с высокой скоростью и с перекрытием по времени выборок команд и циклов выполнения.
Рис. Цоколевка выводов имеет вид
Выводы RA*, RB* и RС* - это контакты ввода/вывода, связанные с регистрами микроконтроллера PORTA, PORTB и PORTC соответственно. VDD и VSS - выводы питания (+Uпит и GND соответственно). Серия 16FXX работает в широком диапазоне питающих напряжений, но обычно VSS подключен к 0В, а VDD подключен +5В. Вывод основного сброса /MCLR обычно подключен к VDD (напрямую или через резистор), потому что микроконтроллер содержит надежную схему сброса при включении питания. Выводы OSC1 и OSC2 подключаются к генератору тактовой частоты и могут быть сконфигурированы для различных его типов, включая режимы кварца и RC-генератора.
Характеристика перефирийных модулей:
· Три таймера/счётчика:
§ таймер0: 8-ми разрядный таймер/счётчик с 8-ми разрядным предделителем;
§ таймер1: 16-ти разрядный таймер/счётчик с предделителем и возможностью прибавления в спящем режиме от внешнего источника;
§ таймер2: 8-ми разрядный счётчик с 8-ми разрядным предделителем и постделителем;
· два модуля захвата, сравнения, 10-ти разрядный ШИМ;
· 10-ти разрядный 6-ти канальный Аналогово Цифровой Преобразователь;
· синхронный последовательный порт с SPI и I2C интерфейсом;
· универсальный синхронно асинхронный приёмопередатчик.
Микроконтроллер построен по RISC архитектуре, имеет 35 команд. Максимальная рабочая тактовая частота 20 МГц, имеет 256 байт Flash памяти данных, 368 байт ОЗУ и 8 кбайт Flash памяти программ, до 14 источников прерывания, 9-ти уровневый аппаратный стек, сторожевой таймер позволяющий перезагружать микроконтроллер.
Принцип действия устройства. Описание структурной схемы
Структурная схема устройства представлена на чертеже 2201.К04.097.01.00.Э1, она состоит из следующих блоков:
- микроконтроллер;
- клавиатура;
- LCD-дисплей;
- схемы управления блоками тревоги (электронные ключи);
- блоки тревоги;
- термодатчик;
- датчики движения;
- датчик дыма;
- линия разрыва.
Клавиатура предназначена для управления устройством. Нажатая клавиша обрабатывается микроконтроллером, который выполняет необходимые действия. Клавиатура состоит из 4-х кнопок: «On/Off», «+», «-», «Sel». Кнопка «On/Off» позволяет включить или выключить режим готовности устройства, кнопки «+», «-» позволяют осуществлять навигацию между режимами контроля над работой устройства, а кнопка «Sel» предназначена для изменения параметров текущего режима работы.
LCD-дисплей - текстовый дисплей, 2 строки по 16 символов. Он необходим для отображения текущего состояния устройства и отображает один из выбранных режимов.
Режим 1.
Отображение текущего времени и текущей температуры в зоне контроля (если температура в зоне контроля превышает критическую температуру, то в нижнем правом углу индикатора отображается мигающий «!»).
Рисунок 1. Формат отображения 1-го режима.
Режим 2.
Позволят изменить текущее время в интерактивном режиме используя клавиатуру.
Рисунок 2. Формат отображения 2-го режима.
Режим 3.
Позволяет изменить температуру, которая считается критической, т.е. температуры при достижении которой происходит посылается сигнал тревоги «пожар».
Рисунок 3. Формат отображения 3-го режима.
Режим 4.
Отображает информацию о времени срабатывания первого и второго датчиков движения. (Если датчик не срабатывал ни разу, то вместо времени отображается «Not»).
Рисунок 4. Формат отображения 4-го режима.
Режим 5
Отображает информацию о времени срабатывания третьего датчика движения и датчика дыма. (Если датчик не срабатывал ни разу, то вместо времени отображается «Not»).
Рисунок 5. Формат отображения 5-го режима
Термодатчик, датчики движения, датчик дыма, линия разрыва и схемы управления блоками тревоги подключаются к портам микроконтроллера.
В случае превышения критической температуры в зоне контроля происходит подача высокого сигнала на схему управления блоком тревоги «пожар».
В случае срабатывания одного из датчиков движения или датчика дыма в зоне контроля происходит подача высокого сигнала на схему управления блока тревоги «движение» или «дым» соответственно.
При поступлении сигнала о разрыве линии высокий сигнал подаётся на схему управления блоком тревоги «разрыв».
Выбор элементной базы
При разработке устройства были использованы следующие электронные компоненты:
· Микроконтроллер PIC16F8776 фирмы Microchip.
· Термодатчик TL431C.
· Датчик движения KS-200DLT. Он имеет достаточно низкую частоту ложных срабатываний и высокую помехоустойчивость. Детектор надежен и прост в эксплуатации.
· Датчик дыма фотоэлектрический MERIDIAN MN-240. Он обеспечивает высокую надёжность в эксплуатации за счёт защиты от воздействия радиопомех, высокого значения коэффициента сигнал/шум и автоматического тестирования.
· 2-х строчечный текстовый жидкокристаллический дисплей WH1602A-YYK-CP фирмы Winstar
Описание принципиальной схемы
Схема электрическая принципиальная представлена на чертеже 2201.К04.097.01.00.Э3.
Элемент ZQ1 представляет собой кварцевый резонатор. Так как для данного устройства не требуется высокая скорость обработки информации, то частота кварцевого резонатора выбрана равной 4 МГц для упрощения математических операций при программировании микроконтроллера.
Элемент DA1 представляет собой термодатчик TL431C, выходное значение которого калибруется при помощи резистора R2.
Элементы D2, D3, D4 - датчики движения KS-200DLT. D5 - Датчик дыма MERIDIAN MN-240.
Все датчики подключены к портам микроконтроллера RA0-RA4, настроенным на вход.
На порт микроконтроллера RA5 подключена линия разрыва.
Элементы R1, R3, R4, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15 представляют собой резисторы с сопротивлением 10кОм.
Элемент V1 представляет собой светодиод, предназначенный для индикации работы устройства. Он подключен к источнику питания через резистор R17 сопротивлением 620 Ом.
С1, С2, С3 и С4 - конденсаторы большой ёмкости (1000 мкФ), которые включены по питанию, для сглаживания импульсных помех, возникающих при работе схемы.
Конденсаторы С5 и С6 включены по типовой схеме включения кварцевого резонатора ZQ1, обеспечивающего работу тактового генератора контроллера.
VD1, VD2, VD3, VD4- диоды серии 220Д.
VD5, VD6, VD7, VD8- стабилитроны серии КС156А, обеспечивающие подачу на входы контроллера напряжения не более 5 вольт.
RC-цепочка R16С7 формирует сигнал «сброс» при включении питания, это необходимо для установки микроконтроллера в исходное состояние. При включении питания напряжение на конденсаторе C7 равно нулю, и на вход MCLR микроконтроллера поступает сигнал сброса, через некоторое время конденсатор C5 зарядится до уровня лог.1 через резистор R16, и микроконтроллер начнёт работу.
Текстовый LCD-дисплей HG1 имеет размер экрана 2 строки по 16 символов, размер одного символа - 5х8. Обмен данными с дисплеем производится по 4-х разрядной шине данных, причём сначала передаются старшие 4 байта, а затем младшие, управление - по 3-м линиям: RS - отвечает за формат передаваемых сигналов (1 - данные, 0 - команда); RW - определяет направление передачи информации (0 - запись (от контроллера к дисплею), 1 - чтение (от дисплея к контроллеру) ); Е - сигнал активности дисплея, при Е=0 дисплей не воспринимает сигналы шин данных и управления, при Е=1 ведётся обмен информацией между дисплеем и контроллером. Резистором R18 производится регулировка контрастности изображения на LCD-дисплее.
Клавиатура SA1, SA2, SA3, SA4 подключена к порту В микроконтроллера, так как этот порт имеет прерывание по изменению уровня на линиях RB7..RB4.
Схемы управления блоками тревоги подключены к линиям RB0..RB4 порта В.
Разработка программного обеспечения МПС. Описание алгоритма работы устройства. Описание основных частей программы
В программе можно выделить следующие логические блоки:
· Блок объявления переменных
В этом блоке регистрам и специальным битам системных регистров присваиваются символьные значения для более удобного обращения к ним. Также описываются и инициализируются вспомогательные управляющие флаги и переменные.
· Блок инициализации программы
В этом блоке осуществляется первоначальная настройка микроконтроллера. Установка битов управления и направления передачи данных в портах ввода вывода, а также инициализация и включение LCD-дисплея.
В частности устанавливаются следующие направления передачи данных:
o Порт RA (RA0-RA5) - полностью на ввод данных. Причем RA0- аналоговый вход для АЦП.
o RB0-RB3 - вывод, RB4-RB7- ввод.
o Порт RC (RC0-RC7) - полностью на вывод данных.
· Основной цикл программы
Осуществляется проверку управляющих флагов и на основе этой проверки вызывает соответствующие процедуры.
· Процедура обработки прерываний.
Осуществляет проверку источника прерывания (таймер или клавиатура), осуществляет контроль состояния датчиков и устанавливает соответствующие флаги управления, ежесекундно инкрементирует текущее время, следит за состоянием клавиатуры.
· Функция корректировки времени.
Осуществляет защиту переполнения ячейки памяти, хранящей текущее время.
· Функция корректировки температуры.
Осуществляет защиту переполнения ячейки памяти, хранящей критическую температуру (не должна превышать 99 градусов).
· Процедура чтения данных из индикатора.
Последовательно считывает младшую и старшую тетрады с 4-х разрядной шины данных и конвертирует их в одну 8-ми битовую переменную.
· Функция записи данных в индикатор.
Последовательно передаёт в индикатор старшую и младшую тетрады 8-ми битовой переменной через 4-х разрядную шину данных.
· Процедура проверки готовности индикатора.
Осуществляет проверку готовности индикатора на возможность записи очередных данных.
· Функция записи в индикатор управляющих команд.
· Функция вывода данных на LCD-дисплей.
Осуществляет заполнение экрана данными, в зависимости от текущего режима управления (1-5).
· Процедура, вызываемая при нажатии кнопки «On/Off».
· Процедура, вызываемая при нажатии кнопки «-».
· Процедура, вызываемая при нажатии кнопки «+».
· Процедура, вызываемая при нажатии кнопки «Sel».
Описание алгоритма работы главной программы main()
При включении питания микроконтроллер начинает выполнение программы с функции main(). В ней описаны команды инициализации контроллера: настройка АЦП на порт RA0, настройка LCD-дисплея (4-х разрядная шина данных, 2 сточки, последовательное перемещение курсора), конфигурация портов на ввод и на вывод, разрешение прерываний от порта В и таймера 0. Далее происходит зацикливание при помощи бесконечного цикла while(1), в теле которого происходит проверка управляющих флагов и в зависимости от состояния этих флагов осуществляется вызов соответствующих процедур и сброс состояния флага.
Листинг программы
#include <pic.h>
#define PORTBIT (adr, bit) ((unsigned) (&adr)*8+ (bit))
static bit RS @ PORTBIT (PORTC, 6);
static bit RW @ PORTBIT (PORTC, 5);
static bit E @ PORTBIT (PORTC, 4);
char probel=0x20 ;//0x20; //0x5F
unsigned int _time=0,_settime, _time1=0,_time2=0,_time3=0,_time4=0;
unsigned char status=0, temperature, settemperature=50, regim=1, subregim=0, mig=0;
unsigned char d1=0, d2=0, d3=0, d4=0, d5=0, d6=0, kl=0, displayed=1;
//Функция корректировки представления времени
void CorrectTime(unsigned int &ttime)
{
if (ttime>24*60-1)
{ttime=_time1=_time2=_time3=_time4=0;
}
}
//Функция корректирования температуры
void CorrectTemperature(unsigned char &ttemperature)
{
if (ttemperature>99) ttemperature=99;
if (ttemperature<30) ttemperature=30;
}
//Пауза
void Wait(uchar kk)
{
while(kk--);
}
//Читаем из индикатора
unsigned char ReadInd(void)
{
unsigned char DATA;
TRISC=0x0F;//на ввод 4мл бита порта
RW=1;
E=1;
DATA=(PORTC&&0x0F)<<4;//считываем 4ст. бита
E=0;
E=1;
DATA=DATA||(PORTC&&0x0F);//считываем 4мл бита
E=0;
RW=0;
return(DATA);
}
//Записываем в индикатор код
void WriteInd(uchar Dann)
{
uchar stDann, mlDann;
stDann=Dann&&0xF0;//старшие тетрады
mlDann=Dann&&0x0F;//младшие тетрады
TRISC=0;
RW=0;
PORTC=PORTC&&0xF0;//очищаем 4мл бита порта С
PORTC=PORTC||stDann;//передаём 4ст бита
E=1;
E=0;
PORTC=PORTC&&0xF0;//очищаем 4мл бита порта С
PORTC=PORTC||mlDann;//передаём 4мл бита
E=1;
E=0;
TRISC=0x0F;
}
//Проверка готовности индикатора
void Check(void)
{
uchar DATA;//описали переменную DATA типа uchar
RS=0;
do
{
DATA=ReadInd();
DATA<<=1;
}
while(CARRY);//если бит переноса равен 1,то индикатор не готов
}
void WriteData(uchar kod)
{
Wait(20);
Check();
RS=1;
WriteInd(kod);//записать в индикатор код
}
void WriteCommand(uchar kod)
{
Wait(20);//пауза(20 машинных циклов)
Check();//проверить состояния индикатора
RS=0;
WriteInd(kod);//записать в индикатор код
RS=1;
}
//Вывод на дисплей
void Display(int i)
{
CorrectTime(_time);
CorrectTemperature(settemperature);
CorrectTime(_settime);
WriteCommand(0x01);//(00000001)очистка экрана
// -------Вывод 1-го режима------------
if (i==1) {
if (status==1)
{
WriteData(0x4f); //O
WriteData(0x6E); //n
WriteData(probel); //_
} else
{
WriteData(0x4f); //O
WriteData(0x66); //f
WriteData(0x66); //f
}
WriteData(0x7c); //|
WriteData(probel); //_
WriteData(0x54); //T
WriteData(0x69); //i
WriteData(0x6D); //m
WriteData(0x65); //e
WriteData(0x3A); //:
WriteData(probel); //_
WriteData(0x30+(_time/60)/10); //desyatki chasov
WriteData(0x30+(_time/60)%10); //edinitsy chasov
WriteData(0x3A); //:
WriteData(0x30+(_time%60)/10); // desytki minut
WriteData(0x30+(_time%60)%10); // edinitsy minut
//вторая строка
WriteData(0x54); //T
WriteData(0x65); //e
WriteData(0x6D); //m
WriteData(0x70); //p
WriteData(0x65); //e
WriteData(0x72); //r
WriteData(0x61); //a
WriteData(0x74); //t
WriteData(0x75); //u
WriteData(0x72); //r
WriteData(0x65); //e
WriteData(0x3A); //:
WriteData(probel); //_
WriteData(0x30+temperature/10); // desyatki temperatury
WriteData(0x30+temperature%10); // edinitsy temperatury
if ((temperature<settemperature)||(mig==0))
WriteData(probel); //_
else
WriteData(0x21); //!
}
// -------Вывод 2-го режима------------
if (i==2) {
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
WriteData(0x53); //S
WriteData(0x65); //e
WriteData(0x74); //t
WriteData(probel); //_
WriteData(0x54); //T
WriteData(0x69); //i
WriteData(0x6D); //m
WriteData(0x65); //e
WriteData(0x3A); //:
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
//вторая строка
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
if ((mig==1)&&(subregim==1)) {
WriteData(probel); //_
WriteData(probel); //_
} else
{
WriteData(0x30+(_settime/60)/10); //desyatki chasov
WriteData(0x30+(_settime/60)%10); //edinitsy chasov
}
WriteData(0x3A); //:
if ((mig==1)&&(subregim==2)) {
WriteData(probel); //_
WriteData(probel); //_
} else
{
WriteData(0x30+(_settime%60)/10); // desytki minut
WriteData(0x30+(_settime%60)%10); // edinitsy minut
}
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
}
//-----------------------------------------------------------
// -----Вывод 3-го режима-------------------
if (i==3) {
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
WriteData(0x43); //C
WriteData(0x72); //r
WriteData(0x69); //i
WriteData(0x74); //t
WriteData(0x69); //i
WriteData(0x63); //c
WriteData(0x61); //a
WriteData(0x6c); //l
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
WriteData(probel); //_
//вторая строка
WriteData(probel); //_
WriteData(0x54); //T
WriteData(0x65); //e
WriteData(0x6D); //m
WriteData(0x70); //p
WriteData(0x65); //e
WriteData(0x72); //r
WriteData(0x61); //a
WriteData(0x74); //t
WriteData(0x75); //u
WriteData(0x72); //r
WriteData(0x65); //e
WriteData(0x3A); //:
WriteData(probel); //_
if ((mig==1)&&(subregim==1)) {
WriteData(probel); //_
WriteData(probel); //_
} else
{
WriteData(0x30+settemperature/10); // desyatki temperatury
WriteData(0x30+settemperature%10); // edinitsy temperatury
}
}
//------Вывод 4-го режима-------
if (i==4) {
WriteData(0x53); //S
WriteData(0x65); //e
WriteData(0x6e); //n
WriteData(0x73); //s
WriteData(0x6f); //o
WriteData(0x72); //r
WriteData(probel); //_
WriteData(0x31); //1
WriteData(0x3A); //:
WriteData(probel); //_
if (_time1==0) {
WriteData(probel); //_
WriteData(0x4E); //N
WriteData(0x6F); //o
WriteData(0x74); //t
WriteData(probel); //_
} else
{WriteData(0x30+(_time1/60)/10); //desyatki chasov
WriteData(0x30+(_time1/60)%10); //edinitsy chasov
WriteData(0x3A); //:
WriteData(0x30+(_time1%60)/10); //desyatki minut
WriteData(0x30+(_time1%60)%10); //edinitsy minut
}
WriteData(probel); //_
//вторая строка
WriteData(0x53); //S
WriteData(0x65); //e
WriteData(0x6e); //n
WriteData(0x73); //s
WriteData(0x6f); //o
WriteData(0x72); //r
WriteData(probel); //_
WriteData(0x32); //2
WriteData(0x3A); //:
WriteData(probel); //_
if (_time2==0) {
WriteData(probel); //_
WriteData(0x4E); //N
WriteData(0x6F); //o
WriteData(0x74); //t
WriteData(probel); //_
} else
{WriteData(0x30+(_time2/60)/10); //desyatki chasov
WriteData(0x30+(_time2/60)%10); //edinitsy chasov
WriteData(0x3A); //:
WriteData(0x30+(_time2%60)/10); //desyatki minut
WriteData(0x30+(_time2%60)%10); //edinitsy minut
}
WriteData(probel); //_
}
//------Вывод 5-го режима-------
if (i==5) {
WriteData(0x53); //S
WriteData(0x65); //e
WriteData(0x6e); //n
WriteData(0x73); //s
WriteData(0x6f); //o
WriteData(0x72); //r
WriteData(probel); //_
WriteData(0x33); //3
WriteData(0x3A); //:
WriteData(probel); //_
if (_time3==0) {
WriteData(probel); //_
WriteData(0x4E); //N
WriteData(0x6F); //o
WriteData(0x74); //t
WriteData(probel); //_
} else
{WriteData(0x30+(_time3/60)/10); //desyatki chasov
WriteData(0x30+(_time3/60)%10); //edinitsy chasov
WriteData(0x3A); //:
WriteData(0x30+(_time3%60)/10); //desyatki minut
WriteData(0x30+(_time3%60)%10); //edinitsy minut
}
WriteData(probel); //_
//вторая строка
WriteData(0x53); //S
WriteData(0x65); //e
WriteData(0x6e); //n
WriteData(0x73); //s
WriteData(0x6f); //o
WriteData(0x72); //r
WriteData(probel); //_
WriteData(0x34); //4
WriteData(0x3A); //:
WriteData(probel); //_
if (_time4==0) {
WriteData(probel); //_
WriteData(0x4E); //N
WriteData(0x6F); //o
WriteData(0x74); //t
WriteData(probel); //_
} else
{WriteData(0x30+(_time4/60)/10); //desyatki chasov
WriteData(0x30+(_time4/60)%10); //edinitsy chasov
WriteData(0x3A); //:
WriteData(0x30+(_time4%60)/10); //desyatki minut
WriteData(0x30+(_time4%60)%10); //edinitsy minut
}
WriteData(probel); //_
}
}
//>>--------Нажатие кнопки "On/Off"---------------------
void on_off() {
status=!status;
}
//<<----------------------------------------------------
//>>--------Нажатие кнопки "-" -------------------------
void Down() {
if (subregim==0)
{regim --;
_settime=_time;
if (regim<1) regim=1;
}
if ((regim==2)&&(subregim==1)) _settime-=60;
if ((regim==2)&&(subregim==2)) _settime-=1;
if ((regim==3)&&(subregim==1)) settemperature-=1;
}
//<<
//>>-------- Нажатие кнопки "+"-------------------------
void Up() {
if (subregim==0)
{regim ++;
settime=_time;
if (regim>5) regim=5;
}
if ((regim==2)&&(subregim==1)) _settime+=60;
if ((regim==2)&&(subregim==2)) _settime+=1;
if ((regim==3)&&(subregim==1)) settemperature+=1;
}
//<<----------------------------------------------------
//>>--------Нажатие кнопки Select-----------------------
void Select()
{
if (regim==2){
subregim++;
if (subregim==3)
{subregim=0;
regim=2;
_time=_settime;
}
}
if (regim==3){
subregim++;
if (subregim==2)
{subregim=0;
regim=3;
}
}
}
//<<-------------------------------------------------------
interrupt INTR()
{
if (T0IF)//запрос прерывания от таймера
{
TMR0=0x6;//(00000110)загрузка в таймер начального значения (переполнение через 250 циклов, 1 цикл = 1 мкс)
ms++;//отсчёт четвертей миллисекунд
if ((ms==2000)||(ms==4000)) mig=!mig; //флаг мигания курсора
if (ms>4000)//если миллисекунд больше 1000
{ms=0;//обнуление
_time++;
//>>------------Проверка термодатчика-----------------------------
d1=1;
//<<--------------------------------------------------------------
//>>----------Проверка 1-го датчика движения----------------------
if ((RA1==0)&&(status==1)) d2=1;
//<<--------------------------------------------------------------
//>>----------Проверка 2-го датчика движения----------------------
if ((RA2==0)&&(status==1)) d3=1;
//<<--------------------------------------------------------------
//>>----------Проверка 3-го датчика движения----------------------
if ((RA3==0)&&(status==1)) d4=1;
//<<--------------------------------------------------------------
//>>----------Проверка датчика дыма-------------------------------
if ((RA4==0)&&(status==1)) d5=1;
//<<--------------------------------------------------------------
//>>----------Проверка линии разрыва------------------------------
if ((RA5==1)&&(status==1)) d6=1;
//<<--------------------------------------------------------------
//>>-----При включённом состоянии мигание светодиода -------------
if ((status==1)&&(mig==1)) RC7=0; else RC7=1;
//<<--------------------------------------------------------------
Displayed=1;
}
T0IF=0;//сброс флага запроса прерывания от таймера
}
if (RBIF)//запрос прерывания от клавиатуры
{// прерывание от клавиатуры
if (!RB7) kl=1;
if (!RB6) kl=2;
if (!RB5) kl=3;
if (!RB4) kl=4;
RBIF=0;//сброс флага запроса прерывания от клавиатуры
}
}//конец обработки прерываний
void main ()
{
TRISA=0xFF;// настройка RA<0-5> как входы
TRISB=0xF0;//(11110000)конфигурация порта на ввод
TRISC=0;//конфигурация порта на вывод
WriteCommand(0x30);
WriteCommand(0x28);//(00101000) 5x8, 2 строки, 4 разр. SD
WriteCommand(0x0С);//(00001100) включение ЖК
WriteCommand(0x06);//(00000110) настройка курсора (сдвиг на 1 вправо)ADCON0=0x41;//(01000001)включение модуля АЦП, частота Fosc/8;
ADCON1=0x8E;//(10001110)// включаем 0-й каналов АЦП
INTCON=0xA8;//(10101000)
// бит 7 - разрешены все немаскированные прерывания (GIE)
// бит 6 - запрещены прерывания от переферийных модулей (PEIE)
// бит 5 - разрешены прерывания по переполнению TMR0 (T0IE)
// бит 4 - запрещены внешние прерывания INT (INTE)
// бит 3 - Разрешены прерывания по изменению сигналов на входах
RB7-RB4 (RBIE)
// бит 2 - флаг прерывания по переполнению TMR0 (T0IF)
// бит 1 - флаг внешнего прерывания INT (INTF)
// бит 0 - флаг прерывания по изменению сигналов на входах
RB7-RB4 (RBIF)
while (1)
{
//проверка термодатчика
if (d1==1)
{ d1=0;
ADGO=1;//запускаем АЦП
while (ADGO);//ждем пока АЦП закончит преобразование
temperature=(ADRESL+ADRESH*256)*5000/1023;//вычисляем температуру
if ((temperature>settemperature)&&(status==1))
RB0=1 else RB0=1; // сработал датчик температуры
}
if (d2==1) _time1=_time; // сработал 1-й датчик движения
if (d3==1) _time2=_time; // сработал 2-й датчик движения
if (d4==1) _time3=_time; // сработал 3-й датчик движения
if (d1||d2||d3) {RB1=1; d1=d2=d3=0;} else RB1=0;
if (d5==1) {RB2=1; d5=0} else RB2=0; //сработал датчик дыма
if (d6==1) {RB3=1; _time4=_time; d6=0} else RB3=0; //сработала линия разрыва
if (displayed) {Display(Regim); displayed=0;}
if (kl==1) {on_off(); kl=0;}
if (kl==2) {Down(); kl=0;}
if (kl==3) {Up(); kl=0;}
if (kl==4) {Select(); kl=0;}
};
}
Заключение
При выполнении данного курсового проекта была изучена архитектура микроконтроллера PIC16F876 фирмы Microchip и построена на его основе микропроцессорная система сигнализации. При этом также был изучен текстовый жидкокристаллический дисплей WH1602A-YYK-CP фирмы Winstar и встроенный в него контроллер HD44780. Приобретены навыки программирования микропроцессорных систем и построения на их основе устройств сбора и обработки информации.
Размещено на Allbest.ru
Подобные документы
Алгоритм работы охранной сигнализаций. Датчик движения, звуковая сирена, реле, транзистор, резистор, конденсатор, цифровой сегментный индикатор. Изготовка домашней охранной сигнализации. Определение зон установки датчиков для обеспечения охраны объекта.
дипломная работа [1,7 M], добавлен 22.07.2013Тема работы: тактика оснащения объектов периметральными системами охранной сигнализации связана с оснащением объекта ограждением. Технические средства и системы защиты внешнего периметра объекта. Типы периметральных систем охранной сигнализации.
реферат [21,4 K], добавлен 21.01.2009Анализ возможных способов применения автоматических систем охраны объектов связи различного назначения. Сравнительная оценка технических способов охраны военных объектов. Разработка структурной схемы системы охранной сигнализации приемного радиоцентра.
дипломная работа [2,2 M], добавлен 20.11.2013Системы охранной сигнализации, учет специфики охраняемых объектов, определяемой концентрацией, важностью и стоимостью охраняемых материальных ценностей. Подгруппы охраняемых объектов. Термины и определения, используемые в системах охранной сигнализации.
реферат [23,4 K], добавлен 21.01.2009Автоматизация - качественно новый этап в совершенствовании производства. Система сигнализации как функция контроля за состоянием объектов. Назначение и состав устройства, его принцип действия. Описание технологии монтажа, изготовление печатной платы.
курсовая работа [325,3 K], добавлен 04.05.2009Анализ схемы и конструкции ИК линии связи в охранной сигнализации. Формирование УГО, КТО компонентов библиотеки, Образование их интегрального образа. Упаковка компонентов схемы в корпус. Процедура автоматической трассировки двухсторонней печатной платы.
курсовая работа [1,1 M], добавлен 08.01.2013Система охраны и технические средства объектов (имущества). Виды извещателей, формирующих сигналы тревоги и приемо-контрольный прибор. Расчет экономической эффективности от внедрения средств охранной сигнализации. Техника безопасности при эксплуатации.
дипломная работа [375,1 K], добавлен 27.04.2009Разработка интегрированной системы сигнализации на базе использования оптико-электронных и звуковых извещателей применительно к условиям торгово-развлекательного комплекса. Расчет экономической эффективности от внедрения системы охранной сигнализации.
дипломная работа [2,3 M], добавлен 05.11.2016Назначение и область применения микромощного радиопередатчика для охранной сигнализации. Анализ схемы электрической принципиальной передатчика. Расчет электрических параметров печатных проводников. Расчет вибро- и ударопрочности. Технология сборки узла.
курсовая работа [449,3 K], добавлен 29.05.2014Охранная сигнализация на магнито-контактных датчиках. Разработка структурной схемы многоканальной охранной системы сигнализации. Выбор материала и способ изготовления печатного основания. Расчёт габаритных размеров печатной платы. Описание шины.
дипломная работа [4,3 M], добавлен 18.11.2013