Перейти к содержанию

Лабораторная работа 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];

  1. Тип данных 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);

}

}

Список контрольных вопросов

  1. Что такое семисегментный индикатор?
  2. Где и как он используется?
  3. Что может и что не может отображать индикатор? Почему?
  4. Для чего нужна точка на индикаторе?
  5. Какие схемы индикаторов бывают?
  6. Что такое массивы?
  7. Как объявлять массивы?
  8. Как присваивать и как считать значение элемента массива?
  9. Какие числа может хранить тип данных byte?
  10. Сколько памяти занимает этот тип?
  11. Что делает и как работает функция byteRead?

Список дополнительных задач:

  1. Изменить программу так, чтобы индикатор выдавал не секунды, а де- сятые доли секунд.
  2. Подключить дополнительный индикатор и изменить программу так, чтобы она считала до минуты.

Center-nav

← Назад | Оглавление | Вперёд →