Pic16f877a – отладочная плата

Отладочная плата mikroElektronika EasyPIC4

ME-EASYPIC4 – отладочная плата с богатым набором периферии для разработки и отладки приложений на базе микроконтроллеров семейства PICmicro от Microchip.

Плата универсальна и позволяет устанавливать микроконтроллеры в корпусах DIP8, DIP14, DIP18, DIP20, DIP28 и DIP40. Наличие встроенного USB отладчика превращает плату в многофункциональную отладочную систему.

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

Отличительные особенности:

  • места под установку микроконтроллеров в корпусах DIP8, DIP14, DIP18, DIP20, DIP28 и DIP40;
  • интегрированный USB отладчик (PICFlash2);
  • место под установку ЖКИ 2х16 с регулятором контрастности;
  • место под установку графического ЖКИ с регулятором контрастности;
  • интерфейсы: RS-232 с возможностью отключения, USB 2.0 и PS/2;
  • 4-символьный 7-сегментный светодиодный индикатор;
  • место под установку температурного датчика DS1820;
  • цепь сброса;
  • стабилизатор напряжения для питания МК;
  • цепь ввода аналоговых сигналов;
  • светодиоды и кнопки, подключенные ко всем выводам микроконтроллера, с возможностью подтяжки к GND и Uпит. или отключения;
  • 5 штырьковых разъемов (PORT A – PORT E) по 10 выводов, для подключения периферийных плат пользователя (EXTRA BOARDS);
  • возможность запитки от USB-порта;
  • установленный стабилизатор напряжения и разъем для подключения внешнего источника питания.

Основные параметры

Параметр Значение
Интерфейс подключения USB / RS232
Ядро базового компонента PICmicro
Разрядность, бит 8
Базовый компонент PIC16F877A
Вспомогательный компонент MAX232LM7805
Целевое напряжение, В 5.0
Напряжение питания, В 9 – 32 DC / 7 – 23 AC / 5
Источник питания внешний / USB

Комплектация:

  1. отладочная плата с установленным МК PIC16F877;
  2. кабели RS-232 и USB;
  3. диск с ПО и документацией;
  4. документация на плату.

Принципиальная схема отладочной платы

megachip.ru

Варианты написания:

MEEASYPIC4, EASYPIC4, ME EASYPIC4, EASYPIC4, ME-EASYPIC4 EASYPIC4, ME-EASYPIC4 EASYPIC4

Производитель: mikroElektronika

На английском языке: Development system mikroElektronika EasyPIC4

Источник: https://www.rlocman.ru/op/tovar.html?di=67861&/ME-EASYPIC4

Экспериментальная плата для программирования PIC16F877A

Источник: http://anubis-system.ucoz.com/publ/programmirovanie_mikrokontrollerov/ehksperimenty/ehksperimentalnaja_plata_dlja_programmirovanija_pic16f877a/7-1-0-7

Представляю вашему вниманию мой вариант электронных часов на микроконтроллере PIC16F877A.

На рисунке 1 изображена принципиальная схема часов. Ядром схемы является микроконтроллер PIC16F877A. Микроконтроллер работает по алгоритму, изображенному на рисунке 2. Стоить отметить, что алгоритм весьма условный и отображает два основных цикла работы прибора, это:

  1. Цикл настойки (настройка секунд, минут и часов);
  2. Цикл отображения часов (работа часов).

Код программы написан на языке ассемблер, смотреть листинг 16F877ATEMP.ASM.

Данные часы собраны на демонстрационной (отладочной) плате фирмы Microchip PICDEM 2 PLUS. Схему демонстрационной платы PICDEM 2 PLUS можно найти на сайте [1].

Полный цикл внутрисхемного программирования и отладки микроконтроллера PIC16F877A был осуществлён при помощи MPLAB IDE v8.15 (интегрированная среде разработки), компилятор MPASM v5.22 (входит в MPLAB IDE v8.15) и MPLAB ICD 2 (внутрисхемный отладчик – «Дебагер»).

Для тех, кто не располагает средствами приведёнными выше, а имеет свою программу для работы с *.HEX файлами и иной программатор, можно в соответствующем проекте найти файл 16F877ATEMP.HEX. Техническую спецификацию микроконтроллера можно найти на сайте [1] и [2].

Микроконтроллер DD1 имеет функциональные выводы RC4, RC5 и RD2 – RD7, которые служат для ввода и вывода информации. Тактовыми кнопками SB1 «Выбор» и SB2 «Ввод» происходит настройка часов. Стоит отметить, что микроконтроллер различает три состояния тактовой кнопки (смотреть листинг):

  1. Не нажата;
  2. Нажата кратковременно (менее 2 секунд);
  3. Нажата и удерживается (более 2 секунд). Если кнопка удерживается более 8 секунд, то происходит переполнение счётчика TMR1 и сбой в работе генератора секунд, после чего нужно заново настраивать часы.

Тактовые кнопки SB1 и SB2 подключены к выводам микроконтроллера RC4 и RC5 через токоограничивающие резисторы R4 и R5. В отжатом положении тактовых кнопок SB1 и SB2 резисторы R6 и R7 имитирует низкий логический уровень (пассивное состояние цепи ввода информации).

Микроконтроллер DD1 не имеет функции принудительного сброса, вывод для сброса подключен через резистор R1 к положительному потенциалу питания. Стоить отметить, что если вы повторяете мою работу на демонстрационной плате PICDEM 2 PLUS, то там есть тактовая кнопка для сброса микроконтроллера.

Для генерации тактовой частоты используется кварцевый резонатор QZ1 с ёмкостями C1 и C2. Прибор может эксплуатироваться в диапазоне температур от –20 °С до +70 °С.

Для отображения информации используется жидкокристаллический дисплей HG1. Техническую спецификацию дисплея можно найти на сайте [3]. Он имеет контроллер, в котором реализована функция знакогенерации. Отображает две строки по шестнадцать символов в каждой. Управление дисплеем осуществляется через выводы микроконтроллера RD2 – RD7.

Загрузка данных происходи полубайтами, через выводы RD4 – RD7. «Защёлка» – RD3. Выбор регистра сигнала формируем на выводе RD2. Резисторами R2 и R3 устанавливаем контрастность дисплея HG1.

Стоит отметить, что данный дисплей HG1 имеет светодиодную жёлто-зелёную подсветку на схеме выводы A LED (15) и K LED (16) можно подключить через токоограничивающий резистор к питанию после стабилизации.

Для точного счёта времени модулем TMR1 был использован внешний тактовый генератор на базе кварцевого резонатора QZ2 с ёмкостями C3 и C4. Кварцевый резонатор QZ2 с ёмкостями C3 и C4 подключен к выводам T1OSO и T1OSI. Точность хода времени 1 секунда. Максимальное значение подсчитанного времени 23 часа 59 минут 59 секунд, далее происходит обнуление и подсчёт времени начинается заново.

Прибор запитывается от переменного или постоянного источника напряжения, подключаемого к разъему X1. Номинальное напряжение источника питания 9 – 15 В. Номинальный ток источника питания 0.5 А. Для стабилизации питания используется обычная схема из диодного моста VD1, линейного стабилизатора DA1, фильтрующих конденсаторов C5 – C9.

После включения прибора (подключению к источнику питания) происходит переход в основной режим работы, где на дисплее HG1 виден ход часов (до настройки виден отсчёт секунд). Для настройки часов нужно перейти в режим настройки секунд, для этого нужно нажать любую тактовую кнопку SB1 «Выбор» или SB2 «Ввод».

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

Для перехода к настройки минут нужно кратковременно нажать тактовую кнопку SB1 «Выбор»,на дисплее HG1 будут видны часы у которых минуты взяты в квадратные скобки. А аналогичным образом настраиваются минуты как и секунды. Далее происходит переход к настройки часов, а затем и секунд, вот такой цикл.

Для выхода из режима настройки нужно удерживать более 2 секунд тактовую кнопку SB1 «Выбор».

В данном устройстве можно заменить следующие детали. Микроконтроллер DD1 из серии PIC16F877A-I/P-xxx с рабочей тактовой частотой 20 МГц в корпусе DIP40. Дисплей HG1 подойдет любой из серии WH1602x. Стабилизатор напряжения DA1 отечественный КР142ЕН5А (5 В, 1.5 А).

Диодный мост VD1 на рабочее напряжение не меньше 25 В и ток не меньше 0.5 А. Разъём питания X1 аналогичный указанному на схеме с центральным контактом d=2.1 мм. Неполярные конденсаторы С5, С8 и С9 номиналом 0.01 – 0.47 µF x 50 V.

Электролитические конденсаторы С6 и С7 ёмкостной номинал тот же, а напряжение не ниже указанного на схеме.

Думаю, что часы на PIC16F877A послужат для Вас отправной точкой для создания более сложного прибора, например, часов с несколькими будильниками, таймерами или коммутаторами нагрузки и т.д. Желаю удачи!

Ссылки в интернете

Скачать исходники

Источник: http://shemopedia.ru/chasyi-na-pic16f877a.html

Отладочная плата PIC-MT-USB

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

Отладочная плата PIC-MT-USB выпускается компанией OLIMEX, и предназначена для разработки устройств на основе микроконтроллеров серии PICmicro в  корпусе DIP с 40 выводами.

В качестве процессоров можно использовать модели PIC16F877 или PIC16F887.

На плате имеются все элементы, необходимые для работы микроконтроллера, а также двухстрочный жидкокристаллический дисплей и интерфейс USB.

Принципиальная схема платы PIC-MT-USB

Конструкция платы

В состав платы PIC-MT-USB входят следующие устройства:

  • Панель для микроконтроллера в корпусе DIP40
  • Кварцевый резонатор для микроконтроллера, имеющий частоту 20МГц и оснащенный необходимыми емкостями
  • Две пользовательских кнопки
  • Двухцветный светодиод
  • Жидкокристаллический индикатор на 2 строки по 16 символов, включенный по четырехпроводной схеме.
  • Разъем USB
  • Преобразователь USB-COM с необходимыми элементами
  • Джампер типа питания EXT1
  • Штыревые разъемы портов ввода/вывода A,C,E  микроконтроллера
  • Разъем внутрисхемного программирования

Описание элементов отладочной платы

Основное назначение платы – прототипирование или штучное изготовление устройств, оснащенных дисплеем и интерфейсом USB. Последний выполнен с использованием преобразователя USB-COM на микросхеме FT232. Все линии со стороны COM доступны для использования и выведены на плате в виде свободных отверстий.

При использовании USB, плата может питаться от линии напряжения порта. Для этого предусмотрена перемычка Ext1. Микросхема FT232 является распространенным стандартным решением для подобных устройств. Она позволяет организовать виртуальный COM-порт в ПК, работающий с микроконтроллером по линиям USB.

Все необходимые драйверы можно скачать на официальном сайте FTDI.

Разъем внутрисхемного программирования предназначен для подключения программаторов, поставляемых OLIMEX. Между тем, разводка разъема совпадает со стандартом, используемым в программаторе PICKit2. Для подключения его к плате, достаточно аккуратно перевернуть пластмассовый кожух разъема.

Напряжение питания платы равно +5В. Подключить его можно через USB, либо к штыревому разъему периферийного порта, либо непосредственно припаяв провода к плате.

Отладочная плата PIC-MT-USB отличается небольшими габаритами. Это позволяет ее использовать в качестве основного блока, при создании разнообразных электронных устройств. К сожалению OLIMEX не сопровождает плату подробной документацией. На официальном сайте можно найти только схему и небольшой пример использования.

You have no rights to post comments

Источник: https://mcucpu.ru/index.php/ucontrollers/otladochnye-platy/65-picmtusb

Alex_EXE

Одним из многообещающих моих проектов был контроллер для колесных и гусеничных роботов различной конфигурации с двумя ведущими моторами малого и среднего тока, основанный на микроконтроллере PIC16F877A.

Который по изначальной задумки должен был иметь драйверы двух коллекторных моторов с током до 4А, 5 универсальных аналого-цифровых входов, 8 универсальных цифровых выходов и прочею солянку.

Но, к сожалению, на выбранный МК была возложена слишком большая ноша, и в середине работы над ним он перестал с ней справляться.

Робоконтроллер 877A

Но ничего, на ошибках учатся.

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

Изначально этот контроллер разрабатывался, как контроллер нижнего уровня, т.е. он должен был являться чисто исполнителем и не должен был обладать какой-либо своей логикой, а управление должно было происходить с контроллера верхнего уровня, в качестве которого мог выступать, к примеру, ноутбук или навороченный ARM контроллер, или на крайний случай прямое управление по Bluetooth.

Заложенная спецификация:

  • Встроенный драйвер 2-х коллекторных двигателей с током до 4-х А
  • Контроль тока каждого из двигателей и контроль общего напряжения
  • Управление по Bluetooth
  • 5 универсальных аналого-цифровых входов
  • 8 универсальных цифровых логических/PPM выходов
  • Контроль энкодеров каждого из моторов (колеса)
  • Связь с I2C датчиками и периферией
  • Бонус предыдущего пункта управление по I2C с Nunchake WII
  • Раздельно питание контроллера с датчиками и цифровых исполнительных устройств подключенных к 8-ми универсальным цифровых выходам

Функциональная схема

На самом деле заложить хотелось гораздо больше, но из выбранного контроллера, уже на этапе проектирования, удалось выжат только это.

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

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

Плата

Схема имеет следующий вид:

Принципиальная схема

Схему можно разделить на следующие части:

  • микроконтроллер с обвязкой
  • два драйвера двигателей
  • слаботочный 0,5А стабилизатор для микроконтроллера и датчиков на 5В
  • силовой 3А стабилизатор для периферии на 5В
  • блок из 5-ти аналого-цифровых входов
  • блок из 8-ми цифровых выходов
  • блок интерфейсов UART, i2c и ещё двух портов
  • блок для подключения двух энкодеров
  • и последний блок, состоящий из 3-х делителей для контроля входного напряжения и тока моторов.

Замечу, что джампер предполагался для замыкания 5В цепей после слаботочного 78l05 стабилизатора и силового LM2576 в случае экономии на одном из них. Ещё на схеме упустил ICSP разъём для внутрисхемного программирования, на плате он есть, и из-за него в схеме присутствует диод VD1 с вытекающими схемотехническими последствиями.

Печатка выглядит следующим образом:

Вид печатки сверху

Вид печатки снизу

Спецификацию приводить не буду. Единственное, что об устройстве драйверов двигателей можно прочитать в статье — драйвер коллекторного двигателя 1-4А. И отмечу, что схема и печатка могут содержать небольшие неточности, т.к. их не приводил к конечному виду.

Прошивка

Прошивку выкладываю во все её сырости и не оптимизированности. В принципе она рабочая и робот вполне успешно катается, управляемый по Bluetooth. Протокол управления собственной разработки, использованная версия PRAL2.0 , в одной из следующих статей опишу его.

Что было реализовано:

  • управления 2-мя моторами с плавным разгоном (плавный старт, остановка, реверс), что бы стартовыми токами не перегружало и не выбивало аккумуляторы (прецеденты до введения были, а датчики тока реализовать не удалось)
  • управление по UART на скорости 9600 по протоколу PRAL2.0 заточенное под Bluetooth
  • логическое управление нагрузками (исполнителями) подключенными к универсальным цифровым выходам
  • было реализовано, но позже «заморожено» управление с Nunchuk Wii
  • была начата реализация работы с АЦП и контроль напряжений, но на этом остановился.

Что есть – то есть, может кому-нибудь пригодятся мои наработки. Повторюсь, они выложены в сыром виде и без намека на оптимизацию.

Гусеничная платформа

И на последок расскажу об используемой гусеничной платформе – Rover 5 Tracked Robot Chassis.

Робот на природе

Несмотря на её красоту – она меня разочаровала. Хоть она гусеничная и имеет приличную проходимость, но она также имеет неприятные конструктивные особенности:

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

Ну и пара мелких придирок: малая скорость и пластиковые шестерни в редукторах. Так же, думаю, ей не понравится грязь, т.е. она пригодна только для домашнего применения.

Заключение

Хоть неудачный, но всё же опыт, может он ещё кому-нибудь будет полезным.

Позже, как доберусь с фотиком до рабочей лаборатории, пересниму контроллер и робота.

Скачать файлы проекта

Источник: https://alex-exe.ru/radio/robotics/fail-controller-robot-platform-877a/

Interfacing LCD and Keypad with PIC16F877A Microcontroller

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

Я часто наблюдал когда собранная схема отлично моргала светодиодами у меня на столе, но ни в какую не хотела заводится в PROTEUS-е.

Кроме этого, скажу вам по секрету, PROTEUS-у пофиг какой у вас микроконтроллер и какой к нему подключен кварц, поставите 60МГц будет 60, хоть 80, это при том что серия PIC16 вообще не поддерживает такую частоту и в реале “камень” (микроконтроллер PIC16F877A) просто не заведется, а в PROTEUS-е это очередной глюк. Если кому интересно стало, попробуйте собрать простенькую схемку на основе микроконтроллера и настройте его на кварц 60-100МГц и посмотрите что будет.

 Однако я увлекся лирикой, пора приступать к самому главному. Для того чтобы в реале можно все попробовать, пощупать и померить я решил собрать платку “живую”.

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

 Концепция:

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

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

Навесная элементная база позволяет легко заменить сгоревшую часть и продолжить работу с устройством.

  После небольшого упрощения на платке осталась лишь DIP-панелька под контроллер, кварц с обвязкой из конденсаторов и схема сброса микроконтроллера (резистор и кнопка).

Кроме этого, модуль оборудован собственным линейным стабилизатором питания, вообще у меня для этих целей есть лабораторный источник питания с регулировкой и напряжения и тока и даже дисплеем с показаниями, но все равно я предпочитаю ставить в платках подобного типа микросхему стабилиззатор и не заморачиваться с регулировкой на блоке. На плате присутсвует разьем внутрисхемного программирования, довольно удобно для программирования и отлаживания кода в реальном времени. На плате выведены разьемы для подключения дополнительных модулей с питанием от +5V. Два порта защищены резисторами, поэтому к ним можно смело подключать транзисторы, светодиоды и т.д. не боясь что нибудь спалить. Если столько резисторов ни к чему их всегда можно заменить на обычные перемычки. 

 Схема:

  Сказано сделано, в EAGLE развел плату и с помощью всеми известного ЛУТ сотворил себе первый модуль. Детали у меня были все на руказ так что ждать не стал, спаял все сразу, уж больно руки чесались.

В принципе Плата сама по себе настолько проста что без изменения годится не только для PIC16А877А, но и всех микроконтроллеров фирмы Microchip выполненных в корпусе DIP40. Настройки плата не требует и после пайки сраза готова к работе, тем более что сборка проходит один раз в отличие от макетки.

Теперь если мне что-то необходимо я собираю часть схемы на макетке подключаю к ней ядро и спокойно работаю.

 Плата:

 И собственно сам модуль в готовом виде:

Чтобы не греть несколько раз утюг сразу сделал себе плату под корпус поменьше

Если кому-то приглянулся мой вариант макетки я с удовольствием поделюсь исходником – качать здесь

Design of LCD and Keypad Interface to PIC Mircocontroller

Interfacing LCD and Keypad are one of the important interfacing concepts of PIC microcontroller since both the input and output element can form a complete embedded system design. This tutorial is about teaching you how to get input input values from keypad by polling method and display the input into a 16×2 LCD.

16×2 LCD:

This type of LCD is widely used to display the status of the system and to display the obtain output. This LCD consists of 16 columns and 2 rows, therefore named as 16×2 LCD. Usually a LCD consists of two built in registers known as Data and Command register. Command reg is meant for giving commands such as blink on, cursor on/off etc while Data reg is to display the input character.

You have to follow these steps to write a command or data into the LCD.

  • Place the Data/Command in the pins D0-D7 of the LCD.
  • If you are intended to write command you gotta make the RS(register select) pin of the LCD low, that is RS=0
  • Whereas for writing data you have to make this RS high, that is RS=1
  • Then the EN of the LCD must undergo a high to low logic transition with some delay in between them, that is EN=1 to EN=0 with specific delay.
  • The R/W pin should remain in the Logic 0.

Usually LCD’s have some preassigned commands that would do specific tasks in functioning of the LCD. The command table of a 16×2 LCD is given below.

Command Table for 16×2 LCD

Still not clear about the working of LCD? I suggest you to go through this Tutorial on LCD interface

We have used a 4×3 keypad which means it has four rows and three columns in it. The keypad was scanned for any key inputs and this was done by means of a method called polling.

The scanning takes place by keeping a specific Row low at a time and read the status of the column pins as input at that instant.

This chain goes on through all the rows and by this way input is read by Microcontroller.

Read how to constuct keypad and how the scanning works  in this Tutorial of Keypad Interface and scanning.

CODE:

The below code was built by using CCS C Compiler for PIC Microcontrollers.

#include
#bit C1=0x08.0     //Assigning Columns of Keypad to PORT D
#bit C2=0x08.1
#bit C3=0x08.2
#bit R1=0x08.3    //Assigning the rows of Keypad to PORT D
#bit R2=0x08.4
#bit R3=0x08.5
#bit R4=0x08.6
#bit TRIS_C1=0x88.0                //Setting the TRIS  pins of PORT D
#bit TRIS_C2=0x88.1
#bit TRIS_C3=0x88.2
#bit TRIS_R1=0x88.3
#bit TRIS_R2=0x88.4
#bit TRIS_R3=0x88.5
#bit TRIS_R4=0x88.6
#byte lcd=0x06                        //Assigning LCD to the PORT B
#byte TRIS_lcd=0x86
#bit rs=0x07.0
#bit en=0x07.1
#bit TRIS_rs=0x87.0             //Assigning RS pin to PORT C.0
#bit TRIS_en=0x87.1            //Assigning EN pin to PORT C.1
void lcd_msg(char b,int c);
char keypad();
char a;
void main()
{
TRIS_R1=TRIS_R2=TRIS_R3=TRIS_R4=0;  //Directions to row and col
TRIS_C1=TRIS_C2=TRIS_C3=1;
TRIS_lcd=TRIS_rs=TRIS_en=0;
lcd_msg(0x38,0);                                     //lcd_msg function calling for data/command to lcd
lcd_msg(0x80,0);
lcd_msg(0x0f,0);
   while(TRUE)
   {
     a=keypad();                                      //Taking keypad input to a char variable
     lcd_msg(a,1);
   } }
char keypad()
{
while(TRUE)
{
     R1=1;                                           //Scanning Process
     R2=R3=R4=0;
     if(C1==1)
     {
     while(C1==1);
     return '1';
     }
     if(C2==1)
     {
     while(C2==1);
     return '2';
     }
     if(C3==1)
     {
     while(C3==1);
     return '3';
     }
     R2=1;
     R1=R3=R4=0;
     if(C1==1)
     {
     while(C1==1);
     return '4';
     }
     if(C2==1)
     {
     while(C2==1);
     return '5';
     }
     if(C3==1)
     {
     while(C3==1);
     return '6';
     }
     R3=1;
     R1=R2=R4=0;
     if(C1==1)
     {
     while(C1==1);
     return '7';
     }
     if(C2==1)
     {
     while(C2==1);
     return '8';
     }
     if(C3==1)
     {
     while(C3==1);
     return '9';
     }
     R4=1;
     R1=R2=R3=0;
     if(C1==1)
     {
     while(C1==1);
     return '*';
     }
     if(C2==1)
     {
     while(C2==1);
     return '0';
     }
     if(C3==1)
     {
     while(C3==1);
     return '#';
     }
}
}
void lcd_msg(char b,int c)                  //LCD command/data sending function
{
lcd=b;
rs=c;
en=1;
delay_ms(20);                                 //calling out delay of 20msec
en=0;
delay_ms(20);
}

The code comprises of Two subroutines – “lcd_msg()” is for writing data/command to the LCD where keypad() is to scan the keys of the keypad. In the “lcd_msg()” function the command/data value is directly passed to the function while calling by means of “char b” and RS value by using “int c” , 0 implies for command and 1 for data
.

Источник: http://www.gadgetronicx.com/interfacing-lcd-and-keypad-pic16f877a/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}