Читаем PIC-микроконтроллеры. Все, что вам необходимо знать полностью

Функция get_it (), текст которой приведен в Программе 11.8, накапливает в переменной count число вызовов функции scan_it (), каждый раз сравнивая возвращаемое значение, которое присваивается переменной new_key, с предыдущим значением, хранящимся в переменной old_key. Если эти значения не совпадают, то счетчик обнуляется. Выход из цикла происходит только после 254 идентичных считываний, в результате чего в вызывающую программу возвращается стабильное значение.

Программа 11.8. Подавление дребезга для драйвера клавиатуры

unsigned int get_it(void)

{

        unsigned int count, old_key, new_key;

        count = 0;

        while(count<255)

        {

             new_key = scan_it();

             if(new_key == old_key)

             { count++;}

             else

             {

                 old_key = new_key;

                 count = 0;

              }

        }

        return (old_key);

}

Пример 11.5

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

Если учесть, что для управления каждым индикатором требуется восемь линий (семь сегментов плюс десятичная точка), то получается, что для управления «-разрядным дисплеем нам потребуется 8хn параллельных линий. Типичное решение этой проблемы представлено на Рис. 11.15. В этой схеме 3-разрядный дисплей управляется тремя параллельными регистрами, подключенными к локальной шине, наподобие той, что была использована в схеме на Рис. 11.12. Этот же принцип можно использовать и с дисплеями большей разрядности, взяв соответствующее число регистров.

Индикаторы, показанные на схеме, выполнены по схеме с общим катодом, поэтому каждый сегмент включается тогда, когда на соответствующем выходе регистра присутствует ВЫСОКИЙ уровень. Резисторы, включенные последовательно с сегментами, служат для ограничения тока. На практике некоторые логические схемы могут отдавать больший выходной ток в состоянии НИЗКОГО уровня, поэтому чаще используются индикаторы с общим анодом, в которых включение сегментов осуществляется подачей НИЗКОГО уровня. В крупногабаритных дисплеях, например высотой 5 см (2 дюйма), каждый сегмент может состоять из нескольких СИД, включенных последовательно и/или параллельно. В этом случае для управления индикатором может потребоваться большее напряжение и/или ток, для обеспечения которых необходимо подключить к выходам регистра подходящие драйверы.

Рис. 11.15.Расширение порта для управления 7-сегментными индикаторами

Альтернативное решение, показанное на Рис. 11.16, часто применяется для дисплеев на базе светодиодных индикаторов. Вместо использования отдельного регистра для каждого разряда, все индикаторы подключены параллельно к одному из портов микроконтроллера. Каждый индикатор поочередно включается на короткий промежуток времени, отображая соответствующие данные с выходного порта. Если обновлять изображение чаще чем 50 раз в секунду (а еще лучше — чаще 100 раз в секунду), то из-за инерционности системы зрения будет казаться, что индикаторы не мерцают[149]. Разумеется, ток, протекающий через каждый сегмент, следует увеличить, чтобы скомпенсировать снижение яркости, вызванное импульсным режимом работы. А поскольку в таком режиме СИД работают более эффективно, зависимость между сопротивлением последовательных резисторов и коэффициентом заполнения управляющего сигнала будет не прямо пропорциональной.

Рис. 11.16.Динамическое управление тремя 7-сегментными индикаторами

Прикиньте все плюсы и минусы обоих решений, учитывая как аппаратные затраты, так и затраты на программирование. Для иллюстрации своего ответа напишите программу, отображающую число, хранящееся в регистре h’20’. Например, если в этом регистре (назовем его BINARY) находится число h’FF’, то на дисплее должно отображаться .

Решение

Что касается программного обеспечения, то тут можно выделить две основные функции. Сначала код, находящийся в регистре BINARY, необходимо преобразовать в три BCD-разряда (HUNDREDS, TENS и UNITS). После этого значение каждого из разрядов (0…9) следует преобразовать в 7-сегментный код, чтобы включить соответствующие сегменты индикаторов, отображая требуемую цифру. У нас уже есть подпрограммы для реализации 1-го (см. Программу 6.11 на стр. 196) и последнего (см. Программу 6.6 на стр. 184) этапов. С учетом этих программ, можно составить алгоритм управления схемой, приведенной на Рис. 11.15:

1. Преобразовать двоичное однобайтное число в BCD-число.

2. ВЫПОЛНЯТЬ:

Перейти на страницу:

Все книги серии Программируемые системы

PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

Радиоэлектроника

Похожие книги

Электроника для начинающих
Электроника для начинающих

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

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки