Лабораторная работа 10. семисегментный индикатор
Цель работы:
Дальнейшее ознакомление с работой светодиодной сборки и знакомство с принципом работы семисегментного индикатора, а также применение полученных знаний и навыков для создания программы по отображению данных на семисегментном индикаторе.
Теоретическая часть
Семисегментный индикатор – устройство отображения цифровой информации. Наиболее простая реализация индикатора представлена на Рисунке 10.1. Семисегментный индикатор состоит из семи элементов индикации (сегментов) и дополнительного светодиода (точки), включа- ющихся и выключающихся по отдельности (Рисунок 10.2). Включая их в разных комбинациях, из них можно составить упрощённые изображения арабских цифр. Каждый из светодиодов имеет свой анод, катод у всех общий.
![[media/image51.jpeg]]
Рисунок 10.1. Семисегментный индикатор
Рисунок 10.2. Схема подключения индикатора
Сегменты обозначаются буквами от A до G; восьмой сегмент — десятичная точка, предназначенная для отображения дробных чисел, называется decimal point (DP) (Рисунок 10.3).
Кроме десяти цифр, семисегментные индикаторы способны отображать буквы. Но лишь немногие из букв имеют интуитивно понятное семи- сегментное представление.
-
В латинице: заглавные - A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z,
-
строчные - a, b, c, d, e, g, h, i, n, ñ, o, q, r, t, u.
-
В кириллице: А, Б, В, Г, г, д, Е, е, и, й, Н, О, о, П, п, Р, С, с, У, Ч, Ы (два разряда), Ь, Э/З.
Рисунок 10.3. Обозначение сегментов индикатора
В обычном светодиодном индикаторе девять выводов: один идёт к катодам всех сегментов, и остальные восемь — к аноду каждого из сег- ментов. Эта схема называется «схема с общим катодом», существуют так- же схемы с общим анодом.
Семисегментные индикаторы имеют высокую популярность. Этому способствуют следующие их качества:
- Низкая цена. В средствах индикации нет ничего дешевле светодиодных цифровых индикаторов.
- Разнообразие размеров. Известны светодиодные индикаторы с высотой цифры от 2,5 мм, до 32 см.
- Светятся в темноте. Зачастую это свойство очень важное.
- Малые токи управления. Современные светодиодные индикаторы могут подключаться к выводам микроконтроллеров без дополнительных ключей.
- Допускают жесткие условия эксплуатации (температурный диапазон, высокая влажность, вибрации, агрессивные среды и т.п.). По этому качеству светодиодным индикаторам нет равных среди других типов эле- ментов индикации.
- Неограниченный срок службы.
Практическая часть
В данной работе необходимо разработать программу, которая будет отображать данные на семисегментном индикаторе. Для этого необходимо использовать массивы и тип данных byte.
Массивы
Описание:
Массивы — именованный набор однотипных переменных, с доступом к отдельным элементам по их индексу.
Ниже приведены несколько корректных вариантов объявления массивов:
int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = «hello»;
Массив может быть объявлен без непосредственной инициализации элементов массива, как в случае массива myInts. Массив myPins был объ- явлен без явного задания размера. Компилятор сам посчитает факти- ческое количество элементов и создаст в памяти массив необходимого размера. Размер может быть задан явно, одновременно с инициализа- цией элементов массива. Обратите внимание, что при создании масси- ва типа char, необходим дополнительный элемент массива для нулевого символа.
Индексация массива начинается с 0. Это значит, что для массива с 10- тью элементами, индекс 9 будет последним.
Присваивание значения элементу массива: mySensVals[0] = 10;
Возвращение значения элемента массива:
x = mySensVals[4];
- Тип данных byte
Описание:
byte хранит 8-битовое положительное число, от 0 до 255. Может хра- нить как целочисленные, так и десятичные числа.
Функция считывания бита bitRead
Описание:
Считывает состояние указанного бита числа.
Синтаксис:
bitRead(x, n)
Параметры:
x: число, у которого необходимо считать бит;
n: номер бита, состояние которого необходимо считать. Нумерация начинается с младшего значащего бита (крайнего правого) с номером 0.
Возвращаемые значения:
Состояние бита (0 или 1).
Схема подключения
К данной рабочей программе используется следующая схема под- ключения (Рисунок 10.4). Для реализации проекта потребуются следую- щие компоненты: макетная плата, резистор на 220 Ом (7 шт), семисег- ментный индикатор (1 шт) и провода.
Рисунок 10.4. Схема подключения
После сборки схема имеет следующий вид (Рисунок 10.5):
Рисунок 10.5. Внешний вид схемы после сборки
Рабочая программа
#define first_segment_pin 2
#define segment_count 8
// Префикс «0b» значит, что целое число в двоичном коде.
// Единицами обозначаются номера сегментов индикатора,
// включенные для отображения цифры.
// Так как всего цифр десять, в массиве необходимо
// иметь 10 чисел.
// Чтобы отобразить число 0, загораются все сегменты,
// поэтому в наборе шесть единиц.
byte numberSegments[10] =
{
0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010,
0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110,
};
void setup(){
for (int i = 0; i < segment_count; ++i) pinMode(i + first_segment_pin, OUTPUT);
}
void loop(){
// Определяется число, которое будет отображено.
// С помощью деления на 10 с остатком, плата будет получать
// каждую цифру по порядку, зацикленному на десятке.
int number = (millis() / 1000) % 10;
// Код, в котором закодирована цифра
int mask = numberSegments[number];
// для каждого из 7 сегментов индикатора...
for (int i = 0; i < segment_count; ++i) {
// ...определение, должен ли сегмент индикатора быть включён. Для
// этого
// считывается бит, соответствующий текущему сегменту.
// Если сегмент установлен, значение - true (1), если нет – false (0)
boolean enableSegment = bitRead(mask, i);
// Включение/выключение сегмента на основе полученного значения
digitalWrite(i + first_segment_pin, enableSegment);
}
}
Список контрольных вопросов
- Что такое семисегментный индикатор?
- Где и как он используется?
- Что может и что не может отображать индикатор? Почему?
- Для чего нужна точка на индикаторе?
- Какие схемы индикаторов бывают?
- Что такое массивы?
- Как объявлять массивы?
- Как присваивать и как считать значение элемента массива?
- Какие числа может хранить тип данных byte?
- Сколько памяти занимает этот тип?
- Что делает и как работает функция byteRead?
Список дополнительных задач:
- Изменить программу так, чтобы индикатор выдавал не секунды, а де- сятые доли секунд.
- Подключить дополнительный индикатор и изменить программу так, чтобы она считала до минуты.
Center-nav