Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

ми сегментный индикатор

Читайте также:
  1. Денежные индикаторы
  2. Динамика целевых индикаторов и показателей эффективности реализации федеральной целевой программы
  3. ЖИДКОКРИСТАЛЛИЧЕСКИЕ ИНДИКАТОРЫ
  4. И некоторые другие "старые и надежные" индикаторы.
  5. Индикатор поля частотомер ST-007
  6. Индикатор скорости изменения цены (Price Rate-of- Change).
  7. Индикатора

Работает 7-ми сегментный индикатор следующим образом: в каждом сегменте (a, b, c, d, e, f, g, dp) установлен светодиод. Как помним, у светодиода есть два вывода: анод (+) и катод (-). В данном индикаторе катоды всех светодиодов объединены в один (общий катод), а аноды имеют индивидуальные выходы.

Следующие рисунки поясняют сказанное:

 

Распиновка индикатора:

 

 

Соответствие номеров пинов и сегментов следующее:

 

Номер пина Сегмент
  e
  d
  Общий катод (GND)
  c
  dp (точка)
  b
  a
  Общий катод (GND)
  f
  g

 

Чтобы отобразить на индикаторе цифру «1», надо зажечь сегменты b и c. Чтобы это сделать надо подать +5В на пины (смотрим по таблице) 6 и 4. При этом через токоограничивающий резистор (100 Ом) у нас должна быть подключена земля на один из пинов, соответствующих общему катоду (3 или 8).

Итак, используем плату Arduino: будем управлять сегментами с помощью цифровых пинов.

Подключение индикатора к Arduino (пин 5 («точка») не используем):

 

Номер пина Arduino Номер пина индикатора Сегмент индикатора
    e
    d
GND (через резистор)   Общий катод (GND)
    c
    b
    a
    f
    g

Массивы:

Массив состоит из элементов одного и того же типа. Ко всему массиву целиком можно обращаться по имени. Кроме того, можно выбирать любой элемент массива. Для этого необходимо задать индекс, который указывает на его относительную позицию. Число элементов массива назначается при его определении и в дальнейшем не изменяется. Если массив объявлен, то к любому его элементу можно обратиться следующим образом: указать имя массива и индекс элемента в квадратных скобках. Массивы определяются так же, как и переменные:

byte a[10];

Здесь объявлен массив а из 10 элементов целого типа: а[0], а[1],..., а[9] (индексация всегда начинается с нуля!).

Двумерный массив представляется как одномерный, элементами которого так же являются массивы. Например, определение byte а[10][20]; задает такой массив. По аналогии можно установить и большее число измерений. Элементы двумерного массива хранятся по строкам, т.е. если проходить по ним в порядке их расположения в памяти, то быстрее всего изменяется самый правый индекс. Например, обращение к шестому элементу пятой строки запишется так: а[5][6].

Язык Си позволяет инициализировать массив при его определении. Для этого используется следующая форма:

тип имя_массива[...]... [...] = {список значений через запятую};

Пример:

byte a[5] = {0, 1, 2, 3, 4};

// a[0] = 0, a[1] = 1, a[2] = 2, a[3] = 3, a[4] = 4

byte b[2][3] = {

{1, 2, 3},

{4, 5, 6}

};

// b[0][0] = 1, b[0][1] = 2, b[0][2] = 3, b[1][0] = 4, b[1][1] = 5, b[1][2] = 6.

 

Первый вариант программы (с использованием двумерного массива):

byte segPins[] = {7, 6, 4, 2, 11, 9, 10}; // массив, в котом хранятся номера

// пинов, отвечающих за сегменты: a, b, c, d, e, f, g соответственно, сегмент «точка»

// не используем

byte digits[10][7] = { // двумерный массив, в котором каждая строка

{ 1, 1, 1, 1, 1, 1, 0 }, // 0 // соответствует определенной цифре

{ 0, 1, 1, 0, 0, 0, 0 }, // 1 // если в столбце 1 – то соответствующий сегмент горит

{ 1, 1, 0, 1, 1, 0, 1 }, // 2 // если 0 – то не горит

{ 1, 1, 1, 1, 0, 0, 1 }, // 3 // например, строка digits[0] содержит { 1, 1, 1, 1, 1, 1, 0 }

{ 0, 1, 1, 0, 0, 1, 1 }, // 4 // это значит, что горят сегменты: a, b, c, d, e, f,

{ 1, 0, 1, 1, 0, 1, 1 }, // 5 // а сегмент g – не горит, что соответствует цифре «0»

{ 1, 0, 1, 1, 1, 1, 1 }, // 6 // на индикаторе

{ 1, 1, 1, 0, 0, 0, 0 }, // 7

{ 1, 1, 1, 1, 1, 1, 1 }, // 8

{ 1, 1, 1, 1, 0, 1, 1 } // 9

};

/* функция, которая отображает заданную цифру на индикаторе (цифра передается в виде массива (одной строки двумерного массива digits)

например, следующая строка отображает на индикаторе цифру «0»

ledDisplayPrint(digits[0]);

цифру «5»:

ledDisplayPrint(digits[5]);

*/

void ledDisplayPrint(byte seg[])

{

for(i = 0; i < 7; i++) // устанавливаем на нужных пинах +5В или 0В

digitalWrite(segPins[i], seg[i]);

}

void setup()

{

for(int i = 0; i < 7; i++) // пины (см. объявление массива segPins[]) на вывод

pinMode(segPins[i], OUTPUT);

}

void loop()

{

// последовательно отображаем на индикаторе цифры от 0 до 9 с интервалом 1с

for (int i = 0; i < 10; i++)

{

ledDisplayPrint(digits[i]);

delay(1000);

}

}

 

Домашнее задание:

Счетчик нажатий: допустим, мы подключили кнопку к цифровому пину №12 (кнопка не нажата – на пине высокий уровень, кнопка нажата – на пине низкий уровень). Подумайте над программой, которая бы при нажатии на кнопку увеличивала цифру на индикаторе на 1 (на индикаторе «0», нажали кнопку –> на индикаторе «1», нажали кнопку -> на индикаторе «2» … нажали кнопку –> на индикаторе «9», нажали кнопку -> на индикаторе «0», нажали кнопку –> на индикаторе «1» …).


Дата добавления: 2015-07-20; просмотров: 135 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Лекция 3. Великие законы сохранения| Примеры запросов

mybiblioteka.su - 2015-2024 год. (0.013 сек.)