Главная страница
Навигация по странице:

  • 3. Разработка программы управления

  • Контроллер учета тепловой энергии в батареях отопления. Воронежский государственный университет


    Скачать 2.13 Mb.
    НазваниеВоронежский государственный университет
    АнкорКонтроллер учета тепловой энергии в батареях отопления
    Дата04.07.2022
    Размер2.13 Mb.
    Формат файлаrtf
    Имя файлаRazrabotka_kontrollera_sistemy_otoplenia.rtf
    ТипОтчет
    #624266


    Минобрнауки россии

    ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

    ВЫСШЕГО ОБРАЗОВАНИЯ

    “ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ”

    (ФГБОУ ВО «ВГУ»)

    Факультет компьютерных наук

    Кафедра информационных систем

    Контроллер учета тепловой энергии в батареях отопления

    Отчет по учебной практике,

    научно-исследовательской работе

    09.03.02 Информационные системы и технологии

    Информационные системы в телекоммуникациях

    6 семестр 2021/2022 учебного года

    Зав. кафедрой _____________________ к. т. н., доцент Д.Н. Борисов

    Обучающийся _____________________ ст. 3 курса оч. отд. Д.И. Тимофеев

    Руководитель ______________________ к. т. н., доцент С.А. Зуев

    Воронеж 2022


    Оглавление





    ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ 1

    ВЫСШЕГО ОБРАЗОВАНИЯ 1

    “ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ” 1

    (ФГБОУ ВО «ВГУ») 1

    Факультет компьютерных наук 1

    Кафедра информационных систем 1

    1. Описание функциональной схемы 4

    .2 Выбор элементов схемы 8

    .1 Общий алгоритм работы 9

    3.2 Описание работы программы 10

    Заключение 12

    Приложение 1 13

    Приложение 2 14



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

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

    1. Описание функциональной схемы




    T1, T2 …T9 - цифровые датчики применяемые для контроля температур в контурах системы.

    БУДТ - контакты дополнительной клавиатуры для управления из конкретных комнат.

    К1, К2 … К5 - высоковольтные ключи для управления отопителями или циркуляционными насосоми и котлом.

    ФПЗУ - внешнее запоминающее устройство (FLASH - память).

    БК - блок клавиатуры на 8 клавиш.

    ЖКИ - жидкокристаллический индикатор, необходимый для отображения параметров работы системы.

    2. Разработка принципиальной схемы



    .1 Выбор контроллера



    Для обеспечения использования наиболее подходящего контроллера оптимально рассмотреть несколько различных контроллеров, удовлетворяющих следующим требованиям:

    · 8-ми разрядный,

    · с низким энергопотреблением,

    · наличие статичного режима,

    · гарвардская архитектура,

    Мною были выбраны контроллеры следующих серий: AVR (ATiny2313), PIC (16C745), MK-51 (AT89C51). В каждой серии выбирается примерно аналогичных по характеристикам контроллеры сравниваются их параметры и оценивается на сколько они подходят для оценивания конкретной задачи. Информация о выбранных микроконтроллерах для удобства представлена в таблице, наглядно показывающей различия между ними:





    AVR (ATiny2313)

    PIC (16C745)

    MK-51 (AT89С51)

    ПЗУ (память программ)

    2 Кб

    8 Кб

    4 Кб

    Таймеры/счетчики

    1(8 разрядов) 1(16 разрядов)

    2(16 разрядов)

    2(16 разрядов)

    Число портов ввода/вывода

    18

    22

    32

    Питание

    2,7-5,5

    2,0-5,5

    4,0-5,5

    Архитектура

    RISC

    RISC

    CISC

    Тактовая частота

    20МГц

    24МГц

    24МГц

    Режим экономии энергии

    Idle,Power-down, Standby

    Sleep

    Idle,Power-down

    Память данных

    128 байт

    256 байт

    128 байт

    Стоимость

    50 руб.

    300 руб.

    50


    микроконтроллер фирмы Атмел - это 8-разрядные RISC микроконтроллер для встраиваемых приложений. Они привлекают внимание наилучшим соотношением показателей быстродействие/энергопотребление, удобными режимами программирования, доступностью программно-аппаратных средств поддержки и широкой номенклатурой выпускаемых кристаллов. Микроконтроллеры обычно поставляются со стертыми встроенными FLASH и EEPROM блоками памяти (содержимое всех ячеек = $FF), готовыми к программированию. Улучшенная RISC (enhanced RISC) архитектура AVR-микроконтроллеров объединяет в себе комплекс решений, направленных на повышение быстродействия микропроцессорного ядра AVR. Арифметико-логическое устройство (ALU), в котором выполняются все вычислительные операции, имеет доступ к 32-м оперативным регистрам, объединенным в регистровый файл. Выборка содержимого регистров, выполнение операции и запись результата обратно в регистровый файл выполняются за один машинный цикл. Большинство встраиваемых микроконтроллеров имеют только один такой регистр, непосредственно доступный ALU, - аккумулятор, что требует включения в программу дополнительных команд его загрузки и считывания. В качестве контроллера рассмотрим ATiny2313, представляющий собой 8-битовый микроконтроллер, имеющий, следующие характеристики: построен на основе расширенной RISC-архитектуры; 2К загружаемой флэш-памяти; 32 рабочих регистра; 2 таймера/счетчика; 128 байтов EEPROM; 15 линий ввода/вывода общего назначения; внешние и внутренние прерывания; встроенный последовательный порт.

    Альтернативой может быть контроллер другой серии например PIC 16С745. PIC16F84 - это 8-pазpядные микpоконтpоллеpы с RISC аpхитектуpой, производимые фирмой MicrochipTechnology. Это семейство микpоконтpоллеpов отличается низким энеpгопотpеблением и высокой скоростью. Микpоконтpоллеpы имеют встроенное ЭППЗУ пpогpамм, ОЗУ данных и выпускаются в 20 выводных корпусах. Память данных (ОЗУ) имеет pазpядность 8 бит, память пpогpамм (ППЗУ) для PIC16C84 14. Использование Гаpваpдскойаpхитектуpы позволяет достичь высокой скорости выполнения битовых, байтовых и pегистpовых операций.

    МК семейства МК-51 используют гарвардскую архитектуру. Классический микроконтроллер семейства 51 и его улучшенная модификация 52 серии имеет следующие данные: целочисленный 8-разрядный CISC-процессор, использование CISK архитектуры позволяет упростить программу за счет поддержки команд умножения и деления; тактовая частота до 80 МГц; командный цикл до 12 тактов; раздельные адресные пространства программ и данных; встроенная память программ объёмом 2-64 кб; встроенное ОЗУ данных объёмом 128б-64Кб; 40 выводов, 32 линии ввода-вывода; два или 4 8/16-разрядных таймера; последовательный порт RS-232; возможность подключения внешней памяти программ и данных, до 64 кб каждая (некоторые модели до 4Мб); режим пониженного энергопотребления.

    Различные модификации дополнительно имеют возможность работы с интерфейсами SPI, I2C, USB.

    Обоснование выбора контроллера


    Для данной задачи - разработки регистратора параметров технологического процесса - микроконтроллер семейства МК-51 является оптимальным, так как сочетает в себе большие возможности управления, необходимые для решения поставленной мной задачи. Кроме того по существенным параметрам: число портов ввода вывода (32), архитектура (CISC) - микроконтроллер MCS-51 АТ89C51 превосходит микроконтроллеры подобных серий других производителей. Кроме того микроконтроллер серии МК-51 не уступает микроконтроллерам AVR и PIC также в таких параметрах как: число таймеров счетчиков (2), тактовая частота (до 24 МГц), режимы экономии энергии(Idle, Power-down). А так же при серийном выпуске данного изделия большую роль будет играть его малая стоимость и высокая надежность работы.
    Краткие характеристики контроллера MCS-51 АТ89С51:

    Он обладает высокими техническими характеристиками:

    . Частота работы от 0 до 24МГц.

    . Объем встроенного флешь ПЗУ - 4КБ.

    . Объем регистрового ОЗУ 128 байт.

    . Два счетчика 16ти разрядных счетчика\таймера.

    . Порт выдерживает нагрузку до 20мА.

    . Число портов ввода вывода 32.

    . Котроллер поставляется в сорокавыводном корпусе.

    . Напряжения питания от 5В +-20% (номинальное 5В).


    .2 Выбор элементов схемы



    Сначала рассмотрим выбор датчиков температуры.

    В качестве датчика температуры рассмотрен вариант реализации DS18B20. Данный датчик может быть подключен по однопроводной сигнальной линии и передает данные по протоколу IWare. Благодаря обеспечению возможности адресного обращения возможно использование одной линии связи для всех датчиков.

    Датчик DS18B20 имеет следующие отличительные особенности:

    . Точность ±0.5°C от -50°C до +125°C,

    . Разрешение от 9 до 12 бит, которое настраивается пользователем,

    . Передача данных посредством 1-проводного последовательного интерфейса,

    . 64-битный уникальный и неизменяемый серийный номер,

    . Многоточечное считывание,

    . Рабочее напряжение от 3.0В до 5.5В,

    . Вариант датчика с запиткой с линии данных (DS18B20-PAR),

    . O-92, 150mil 8-контактный SOIC, или 1.98мм x 1.37мм корпус с шариковыми выводами (±2.0°C).

    3. Разработка программы управления



    .1 Общий алгоритм работы



    При старте системы на ЖКИ (жидкокристаллический индикатор) отображается время и показания датчиков температуры на данный момент, старт системы осуществляется нажатием клавиши «1». Далее пользователь может выбрать режим нажатием клавиши «2», в системе предусмотрено 4 режима работы (автоматический, пользовательский, экономный и «антизаморозка» ), режимы листаются по кругу с 1 по 4. В автоматическом режиме используются параметры, которые заданы по умолчанию, в пользовательском параметры, которые задает сам пользователь, экономный режим - поддержание ночью температуры 20º в спальне, и по 16º в других комнатах, к утру температура возрастает до 23º во всех комнатах, днем если никого нет дома температура понижается во всех комнатах до 16º, режим «антизаморозка» не дает замерзнуть воде в системе, если вода остывает до +3º то включается бойлер, нагрев происходит до +7º затем отключается. При нажатии клавиши «3» пользователь переходит к выбору канала, они листаются по кругу с 1 по 5 (коридор, спальня, кухня, зал, бойлер). Для сохранения параметров заданных пользователем используется клавиша «4». Чтобы увеличить температуру на +1 или уменьшить -1нужно воспользоваться клавишами «5», «6». При нажатии клавиши «7» пользователь может установить часы (+1 час), клавишей «8» установить минуты (+1 мин).

    В системе присутствует FLASH ПЗУ для хранения пользовательских настроек.
    Пример надписи на ЖКИ:

    1

    2

    :

    0

    0

    :

    0

    0




    К

    о

    р

    и

    д

    о

    р

    -

    2

    1

    °




    С

    п

    а

    л

    ь

    н

    я

    -

    2

    3

    °

    К

    у

    х

    н

    я

    -

    2

    0

    °







    З

    а

    л

    -

    2

    2

    °







    Б

    о

    й

    л

    е

    р

    -

    6

    5

    °








    3.2 Описание работы программы



    При включении в розетку контроллер производит начальную инициализацию основных переменных и массивов, прерываний и необходимых флагов. устанавливаются выставленные по умолчанию параметры, и система переходит к поддержанию нужной температуры, тока, включая охлаждение когда элементы перегреты и т. д. При старте система по умолчанию выключена и на индикаторе ничего не отображается. После нажатия клавиши «1» система включается в работу, на индикатор выводятся установленные по умолчанию параметры (начально все установлено в 0). Таким образом, реализуется простейший алгоритм настройки.

    Вначале идёт объявление переменных, стандартные счётчики. Для измерения температуры мы выделили байтовые переменные. Сначала контроллер посылает сигналы датчикам и получает ответы о том, что датчики готовы к работе с ним. Затем контроллер посылает сигнал конкретному датчику и получает от него измеренное значение температуры. После получения результатов от 2 датчиков температуры и АЦП контроллер сравнивает полученные результаты с параметрами температуры, введёнными пользователем, либо с параметрами, установленными по умолчанию. Если температура в комнате оказывается ниже установленной температуры, то микроконтроллер включает нагревательный элемент. Если температура оказалась выше установленной, то, напротив, посылается сигнал об отключении тэна, а вентилятор продолжает работать, втягивая прохладный воздух до тех пор, пока температура не будет равна установленным параметрам, в этом случае система отключается. Для того чтобы была возможность ввести параметры температуры и времени используются соответствующие клавиши которые отслеживаются по моментам нажатия. Для отработки нажатия клавиатура сканируется много раз в секунду и контролируется изменение кода клавиши. При старте системы первым возможным установленным уровнем является 0о С, после каждого последующего нажатия кнопки «4»(+) температура на дисплее увеличивается на 1о, соответственно после каждого нажатия кнопки «5»(-) температура уменьшается на 1 и как только достигает 0, приращение останавливается.

    Так как предусмотрен счетчик времени необходимо установить время, совпадающее с действующим. При введении времени сначала высвечиваются минуты, начиная с 1мин., затем, при нажатии на кнопку «6» параметр увеличивается на 1мин., как только параметр становится равен 60с, то время автоматически переводится в часы и, при нажатии на кнопку «7» время увеличивается на 1 час, после того как параметр становится равен 24ч., он переводится в 0, после этого отсчёт начинается заново.

    Заключение



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

    Вторым этапом реализации проекта стало написание программной части, которая обеспечивает управление оборудованием по заданному алгоритму. Для реализации функций обмена с температурными датчиками был изучен протокол IWare, который и был далее реализован в виде части программного кода. Также было выполнено описание программы и представлен её код.

    Результат проекта представлен в виде отчета имеющего два приложения: листинг программы и принципиальная схема.



    Приложение 1


    Схема устройства






    Приложение 2


    Листинг программы



    #include

    #includeiware=P3^2;RS=P2^5; /*data komand for LCD*/E=P2^6; /*synhr LCD*/SCL=P3^4; /*ey 4-8*/SDA=P3^5;power1=P3^4;power2=P3^5;power3=P3^6;power4=P3^7;kotel=P2^7;strob=P2^3;

    //номера датчиковchar const dat1[]={0xDD ,0x05 ,0xEC ,0x67 ,0x3D ,0x34 ,0xb9, 0x11 };char const dat2[]={0xDD ,0x05 ,0xEC ,0xAD ,0x35 ,0xb9 ,0xF9 ,0x32 };char const dat3[]={0xDD ,0x05 ,0x45 ,0x20 ,0x99 ,0xb5 ,0xF9 ,0x42 };char const dat4[]={0x55 ,0x00 ,0x05 ,0x45 ,0x20 ,0x99 ,0x3f, 0x02 }; char const dat5[]={0xDD ,0x05 ,0xEC ,0x67 ,0x3D ,0x34 ,0xb9 ,0x11 }; char const dat6[]={0xDD ,0x05 ,0xEC ,0xAD ,0x35 ,0xb9 ,0xF9 ,0x32 };char const dat7[]={0xDD ,0x05 ,0x45 ,0x20 ,0x99 ,0xb5 ,0xF9 ,0x42 };char const dat8[]={0x55 ,0x00 ,0x05 ,0x45 ,0x20 ,0x99 ,0x3f, 0x02 }; char const dat9[]={0xDD ,0x05 ,0x45 ,0x20 ,0x99 ,0xb5 ,0xF9 ,0x42 };char const str1[]={0x31 ,0x32 ,0x3A ,0x30 ,0x30 ,0x3A ,0x30 ,0x30, 0x40, 0x4B, 0x6F, 0x70, 0xB8, 0xE0, 0x6F, 0x70, 0x2D, 0x }; //умолчаниеchar const str2[]={0xDD ,0x05 ,0x45 ,0x20 ,0x99 ,0xb5 ,0xF9 ,0x42 }; //умолчаниеchar const str3[]={0x50 ,0x65 ,0xB6 ,0xB8 ,0xBC}; //режимchar const str4[]={0x41 ,0xB3 ,0xBF ,0x6F ,0xBC ,0x61 ,0xBF ,0xB8, 0xC0, 0x65, 0x63, 0xBA, 0xB8, B9 }; //автоматический char const str5[]={0xA8 ,0x6F ,0xBB ,0xC4 ,0xB7 ,0x6F ,0xB3 ,0x61, 0xBF, 0x65, 0xBB, 0xC4, 0x63, 0xBA, 0xB9, 0xB8 }; //пользовательскийchar const str6[]={0xС5 ,0xBA ,0x6F ,0xBD ,0x6F ,0xBC ,0xB8 ,0xC0, 0xBD, 0xC3, 0xB9 }; //экономичныйchar const str7[]={0x41 ,0xBD ,0xBF ,0xB8 ,0xB7 ,0x61 ,0xBC ,0x6F, 0x70, 0x6F, 0xB7, 0xBA, 0x61 }; //антизаморозкаchar seksot,sekt,min,hour; //shethiki vremeni for kontrol time work unsigned char key,dop_key1,dop_key2;char i,j,k,pp,n,s,dlo,regim,adrh,adrl,nz;int tis,dd;char iw;fon_off,ff,rwi2c;char const lcdini[]={8,0x3C,4,0x0D,1};char lcd1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };char lcd2[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };char dat[]= {0,0,0,0,0,0,0,0,0}; //for iware T s datchchar chas[]= {0,0,0,0,0,0,0,0,0};char min[]= {0,0,0,0,0,0,0,0,0};char t[]= {45,25,45,25,45,25,45,25,55};char const te[]= {35,20,35,20,35,20,35,18,45};char t[]= {45,25,45,25,45,25,45,25,45};delay (void char t) {for (dd=0;dd
    {fok=0;(iware) //start proc

    { iware=0;delay(100); //timeout 500mks=1;delay(14); //timeout 70 mks(!iware)

    {delay(86); //500mks

    if (iware) {fok=1;}

    } } }readiw (void) //чтение IWare

    {unsigned char pp,nn;=0; for(nn=0;nn<8;nn++)

    { iware=0; delay (3); //start obmena bit=1; delay(6); //+30мкс для чтения=iware;pp=pp>1;(14);iware=1;(3);}iw=pp; //сохранение результата

    }

    void writeiw (void char t) //read IWare

    {unsigned char pp,nn;=t;for(nn=0;nn<8;nn++)

    { iware=0; delay (3);=pp>1; iware=CY;(20);iware=1;(3);} }uart (void) interrupt 5 using 2

    { if (RI)

    { if(SBUF==0xff){ fon_off=1;}(SBUF==0){fon_off=0;} }(TI) {TI=0;(++step<12)=dat[step];

    }

    }readkey (void) interrupt 3 //INT1

    {key=P2&0x07;(key==0) onsystem=onsystem;

    }I2C(unsigned char adrh,adrl)

    {=1; scl=1; sda=0; sda=0; scl=0;scl=0; //старт обмена=0xa0; //indeks flach pzu(rwi2c) pp=pp+1; //set reginm read(i=0;i<8;i++)

    { scl=0;pp=pp>>1; sda=CY;scl=1;scl=1;scl=1;} =1;(sda) // read ACK

    { scl=0;scl=0;scl=0;scl=1;scl=1;scl=1;} =adrh;(i=0;i<8;i++)

    { scl=0;pp=pp>>1; sda=CY;scl=1;scl=1;scl=1;} =1;(sda) //read ACK

    { scl=0;scl=0;scl=0;scl=1;scl=1;scl=1;} =adrl;adresl=adresl+8; if (CY) adresh++; //avtoinkrement adresa(i=0;i<8;i++)

    { scl=0;pp=pp>>1; sda=CY;scl=1;scl=1;scl=1;} =1;(sda) // read ACK

    { scl=0;scl=0;scl=0;scl=1;scl=1;scl=1;} (rwi2c)

    {

    for(j=0;j<8;j++) //regim read

    { pp=0; (i=0;i<8;i++)

    { scl=0;scl=0;scl=0;scl=1;CY=sda;pp=pp>>1;scl=1;} (sda) //write ACK

    { scl=0;sda=0;scl=0;scl=1;scl=1;scl=1;scl=0;}

    } }else {

    for(j=0;j<8;j++)

    { pp=dat[j];

    for(i=0;i<8;i++)

    { scl=0;pp=pp>>1; sda=CY;scl=1;scl=1;scl=1;} =1;

    while(sda) //read ACK

    { scl=0;scl=0;scl=0;scl=1;scl=1;scl=1;}

    } }}timer0 (void) interrupt 1 using 2 /*Function interrupt timer0*/

    { =0xFC;TL0=0x65; //perepolnen 1000(++tis==1000)

    {tis=0;if (++sek==60)

    {sek=0;

    {if (min
    {if (t[1]>dat[1])power1=1 else power1=0; //proverka vozduh

    if (t[2]
    {if (min
    {if (t[3]>dat[3])power2=1 else power2=0; //proverka vozduh

    if (t[4]
    if (min
    {if (t[1]>dat[1])power1=1 else power1=0; //proverka vozduh

    if (t[2]
    if (min
    {if (t[1]
    if (t[2]>dat[2])power1=0;} //teplonositel

    if (min
    {if ((t[9]-10)>dat[9])kotel=1 else kotel=0; //proverka vozduh

    if ((t[9]+5)
    for(j=0;j<4;j++)

    {if (min==min[j*2+1])&&(chas==chas[j*2+1])

    {rwi2c=1;

    i2c(adresh,adrsl);for(j=0;j<9;j++)chas[j]=dat[j];

    i2c(adresh,adrsl);for(j=0;j<9;j++)min[j]=dat[j];

    i2c(adresh,adrsl);for(j=0;j<9;j++)t[j]=dat[j];

    }

    }

    if (++min==60)

    {min=0; if (++hour==24){hour=0;

    }}}

    lcd1[0]=hour/10+0x30; lcd1[1]=hour%10+0x30;lcd1[2]=0x2d; //вывод времени[3]=min/10+0x30; lcd1[4]=min%10+0x30;lcd1[5]=0x2d;

    lcd1[6]=sek/10+0x30; lcd1[7]=sec%10+0x30;

    lcd1[10]=t[1]/10+0x30; lcd1[11]=t[1]%10+0x30;lcd1[10]=0x2d;

    if (--dlo<1)&&(fon_off)

    {for(j=9;j<32;j++) {lcd1[j]=str1[j];dlo=1;} //восстановление стандартной строки

    lcd1[17]=t[1]/10+0x30; lcd1[18]=t[1]%10+0x30;

    lcd1[30]=t[3]/10+0x30; lcd1[31]=t[3]%10+0x30;

    lcd1[17]=t[5]/10+0x30; lcd1[18]=t[5]%10+0x30;

    lcd1[30]=t[7]/10+0x30; lcd1[31]=t[7]%10+0x30;

    lcd1[7]=t[9]/10+0x30; lcd1[8]=t[9]%10+0x30;

    lcd1[30]=t[3]/10+0x30; lcd1[31]=t[3]%100+0x30;

    }

    }(tis<5){e=0; rs=0;P0=lcdini[tis];e=1;} // send LCDif(tis<37){e=0; rs=1;P0=lcd1[tis-5];e=1;}if(tis<45){e=0; rs=1;P0=0x20;e=1;}if(tis<77){e=0; rs=1;P0=lcd2[tis-45];e=1;}

    // сканирование дополнительной клавиатуры

    strob=0;dop_key1=P0;strob=1;

    if !(dop_key1==dop_key2)

    { if (dop_key1==0x7F)t[0]++;

    if (dop_key1==0xAF)t[0]--;

    if (dop_key1==0xDF)t[2]++;

    if (dop_key1==0xEF)t[2]--;

    if (dop_key1==0xF7)t[4]++;

    if (dop_key1==0xFA)t[4]--;

    if (dop_key1==0xFD)t[6]++;

    if (dop_key1==0xFE)t[6]--;

    dop_key2==dop_key1;

    }} /*end Function interrupt timer0*/ini(void)

    {SCON=0x50; //obmen 8bit takt for timer1=0xDC //for 11.0592MGc COM-9600=0x00 /set temer 20 000 Gc*/=0x22; /*2 regim reload timer*/=1; /*enable interrupt timer0*/=0; /*priority = 0*/=1; /*enable interrupt*/

    ES=1; //последовательный порт

    EX1=1; //внешнее прерывание (считывается клавиатура)

    TR0=1; /*start timet0*/=1;}main (void)

    { init();(1)

    {

    if (fraboti){

    for(j=0;j<32;j++)

    {lcd1[j]=str1[j];

    lcd2[j]=str2[j];

    }

    if (key=2)

    {for(j=9;j<14;j++)

    {lcd1[j]=str3[j];}

    regim++; }

    if (regim==5) regim=1;

    lcd1[15]=regim+0x30;

    if (regim==1)

    {for(j=17;j<31;j++) {lcd1[j]=str4[j];} t[0]=20;t[1]=45;t[2]=22;t[3]=45;t[4]=22;t[5]=45;t[6]=20;t[7]=45;t[8]=65;}

    if (regim==2)

    {for(j=17;j<33;j++) {lcd1[j]=str5[j];} }

    if (regim==3)

    {for(j=17;j<28;j++) {lcd1[j]=str6[j];}t[0]=16;t[1]=35;t[2]=18;t[3]=35;t[4]=22;t[5]=45;t[6]=20;t[7]=45;t[8]=65;}

    if (regim==4)

    {for(j=17;j<30;j++) {lcd1[j]=str7[j];}t[0]=1;t[1]=5;t[2]=2;t[3]=5;t[4]=2;t[5]=5;t[6]=2;t[7]=5;t[8]=15;}

    if (key=3)

    {for(j=9;j<14;j++)

    {lcd1[j]=str8[j];}

    kanal++;

    if (kanal==9) kanal=1;

    lcd1[15]=kanal+0x30;

    if (kanal==1) {for(j=17;j<24;j++)

    {lcd1[j]=str9[j];}[25]=0x54;lcd1[27]=t[kanal]/10+0x30;lcd1[28]=t[kanal]%10+0x30;}

    if (kanal==2) for(j=17;j<24;j++) {lcd1[j]=str10[j];}

    if (kanal==3) for(j=17;j<22;j++) {lcd1[j]=str11[j];}

    if (kanal==4) for(j=17;j<20;j++) {lcd1[j]=str12[j];}

    if (kanal==5) for(j=17;j<23;j++) {lcd1[j]=str13[j];}

    if (kanal==6) for(j=17;j<24;j++) {lcd1[j]=str10[j];}

    if (kanal==7) for(j=17;j<22;j++) {lcd1[j]=str11[j];}

    if (kanal==8) for(j=17;j<20;j++) {lcd1[j]=str12[j];}

    if (kanal==9) for(j=17;j<23;j++) {lcd1[j]=str13[j];}

    }

    if (key=4) { //сохранение настроек

    rwi2c=1;adresh=(24*nz)>>8;adresl=(24*nz);if(++nz=10)nz=0;

    for(j=0;j<9;j++)dat[j]=chas[j];i2c(adresh,adrsl);

    for(j=0;j<9;j++)dat[j]=min[j];i2c(adresh,adrsl);

    for(j=0;j<9;j++)dat[j]=t[j]};i2c(adresh,adrsl);

    if (key=5) {t[kanal]++;lcd1[30]=t[kanal]/10+0x30;lcd1[31]=t[kanal]%10+0x30;}

    if (key=6) {t[kanal]--;lcd1[30]=t[kanal]/10+0x30;lcd1[31]=t[kanal]%10+0x30;}

    if (key=7) {if(++chas[n]==24)chas[n]=0;lcd1[30]=chas[n]/10+0x30;lcd1[31]=chas[n]%10+0x30;}

    if (key=8) {if(++min[n]=60) min[n]=0;lcd1[31]=min[n]/10+0x30;lcd[31]=min[n]%10+0x30;}

    }

    resetiw;

    if (fok)

    {writeiw(0xCC); //пропустить передачу кода

    writeiw(0x44); //запустить оцифровку

    while(sotsek<75); //переполнение таймера

    resetiw();

    writeiw(0x55); //работать по адресу

    for(j=0;j<8;j++)

    {

    writeiw(dat1[j]);

    }

    writeiw(0xb8); //считываем температуру

    readiw();

    if (iw==0xff){ readiw(); t[1]=0x80+(iw+1)>>1;} //если температура отрицательная

    else {readiw(); t[1]=iw>>1} //если температура положительная

    dat[j]=iw;

    }

    writeiw(dat2[j]);

    }

    writeiw(0xb8); //считываем температуру

    readiw();

    if (iw==0xff){ readiw(); t[1]=0x80+(iw+1)>>1;} //если температура отрицательная

    else {readiw(); t[1]=iw>>1} //если температура положительная

    dat[j]=iw;

    }


    написать администратору сайта