-
Notifications
You must be signed in to change notification settings - Fork 204
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
1,102 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
#pragma once | ||
|
||
/* | ||
Битовые маски символов для библиотеки Disp595 | ||
*/ | ||
|
||
#define _A 0b10001000 | ||
#define _B 0b10000000 | ||
#define _C 0b11000110 | ||
#define _D 0b11000000 | ||
#define _E 0b10000110 | ||
#define _F 0b10001110 | ||
#define _G 0b11000010 | ||
#define _H 0b10001001 | ||
#define _J 0b11100001 | ||
#define _L 0b11000111 | ||
#define _N 0b11001000 | ||
#define _O 0b11000000 | ||
#define _P 0b10001100 | ||
#define _S 0b10010010 | ||
#define _U 0b11000001 | ||
#define _V 0b11000001 | ||
#define _Y 0b10010001 | ||
#define _a 0b10100000 | ||
#define _b 0b10000011 | ||
#define _c 0b10100111 | ||
#define _d 0b10100001 | ||
#define _e 0b10000100 | ||
#define _f 0b10001110 | ||
#define _h 0b10001011 | ||
#define _i 0b11101111 | ||
#define _j 0b11110001 | ||
#define _l 0b11111001 | ||
#define _n 0b10101011 | ||
#define _o 0b10100011 | ||
#define _q 0b10011000 | ||
#define _r 0b10101111 | ||
#define _t 0b10000111 | ||
#define _u 0b11100011 | ||
#define _v 0b11100011 | ||
#define _y 0b11100011 | ||
#define _dash 0b10111111 | ||
#define _under 0b11110111 | ||
#define _equal 0b10110111 | ||
#define _empty 0b11111111 | ||
|
||
#define _0 0b11000000 | ||
#define _1 0b11111001 | ||
#define _2 0b10100100 | ||
#define _3 0b10110000 | ||
#define _4 0b10011001 | ||
#define _5 0b10010010 | ||
#define _6 0b10000010 | ||
#define _7 0b11111000 | ||
#define _8 0b10000000 | ||
#define _9 0b10010000 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
/* | ||
Набор быстрых и удобных библиотек для работы с семисегментными дисплеями совместно с Arduino. | ||
Документацию к конкретным библиотекам контроллеров дисплеев см. в заголовочных файлах библиотек. | ||
V1.0 от 24/01/2021 - Добавлена библиотека 'Disp595.h' для модулей дисплеев на базе сдвиговых регистров TM74HC595 | ||
... | ||
*/ | ||
|
||
#pragma once | ||
#include <Arduino.h> | ||
#include "Disp595.h" // Либа дисплея TM74HC595 |
37 changes: 37 additions & 0 deletions
37
SevenSegmentsDisp/examples/TM74HC595 Display/brightness/brightness.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
Простой пример программного управления яркостью | ||
Обслуживание динамической индикации берет на себя аппаратный Timer 2 | ||
https://alexgyver.ru/lessons/timer-isr/ | ||
*/ | ||
|
||
#define DATA_PIN 11 | ||
#define SCLK_PIN 10 | ||
#define RCLK_PIN 12 | ||
#define DISP_PERIOD 500 // Период динамической индикации в мкс, делаем почаще! | ||
#define DISP595_BRIGHTNESS // Сообщаем библиотеке, что будем использовать регулировку яркости! | ||
// #define DISP595_BRIGHTNESS_DEPTH 10 // Глубину яркости можно настроить, больше - плавнее, но сильнее мерцание (по умолч. 8) | ||
|
||
#include <GyverTimers.h> | ||
#include <SevenSegmentsDisp.h> | ||
|
||
Disp595 disp(DATA_PIN, SCLK_PIN, RCLK_PIN); | ||
|
||
void setup() { | ||
Timer2.setPeriod(DISP_PERIOD); // Заводим Timer 2 на прерывания с нужным периодом | ||
Timer2.enableISR(); // Включаем прерывания Timer 2 | ||
|
||
disp.displayBytes(_t, _E, _S, _t); // Вывод символов | ||
} | ||
|
||
void loop() { | ||
disp.brightness(0); // Устанавливаем яркость в диапазоне (0 - 7) | ||
delay(1000); | ||
disp.brightness(3); | ||
delay(1000); | ||
disp.brightness(7); | ||
delay(1000); | ||
} | ||
|
||
ISR(TIMER2_A) { // Прерывание Timer 2 | ||
disp.tickManual(); // Обслуживание динамической индикации дисплея | ||
} |
139 changes: 139 additions & 0 deletions
139
SevenSegmentsDisp/examples/TM74HC595 Display/demo/demo.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
/* | ||
Демонстрация всего функционала, вывод разных данных на дисплей TM74HC595 | ||
Обслуживание динамической индикации берет на себя аппаратный Timer 2 | ||
https://alexgyver.ru/lessons/timer-isr/ | ||
*/ | ||
|
||
#define DATA_PIN 11 | ||
#define SCLK_PIN 10 | ||
#define RCLK_PIN 12 | ||
#define DISP_PERIOD 3000 // Период динамической индикации в мкс (500-6000) | ||
// #define DISP_PERIOD 500 // Если используется регулировка яркости, дергать tick() надо чаще! | ||
|
||
// #define DISP595_BRIGHTNESS // Использовать регулировку яркости | ||
// #define DISP595_BRIGHTNESS_DEPTH 10 // Глубину яркости можно изменить (по умолч. 8), больше - плавнее яркость, но сильнее мерцание дисплея | ||
|
||
#include <GyverTimers.h> | ||
#include <SevenSegmentsDisp.h> | ||
|
||
Disp595 disp(DATA_PIN, SCLK_PIN, RCLK_PIN); | ||
|
||
void setup() { | ||
Timer2.setPeriod(DISP_PERIOD); // Заводим Timer 2 на прерывания с нужным периодом | ||
Timer2.enableISR(); // Включаем прерывания Timer 2 | ||
} | ||
|
||
void loop() { | ||
|
||
/* Вывод встроенных и кастомных символов, сырых данных на элеменыт дисплея */ | ||
disp.displayBytes(_H, _E, _L, _P); // Прямой вывод данных (символов) на дисплей | ||
disp.point(0, true); // ПОСЛЕ вывода данных можно добавить / удалить точки | ||
disp.point(3, true); // Указываем позицию точки слева (0 - 3) и включаем / выключаем ее (true / false) | ||
delay(1000); | ||
|
||
/* | ||
Программное управление яркостью дисплея | ||
Чем больше глубина яркости - тем чаще нужно дергать tick()! | ||
(если DISP595_BRIGHTNESS обьявлен перед подключением) | ||
*/ | ||
/* | ||
disp.brightnessDepth(8); // Установка "глубины" яркости - количества градаций, по умолчанию 8 градаций | ||
for (uint8_t i = 7; i > 0; i--) { | ||
disp.brightness(i); // Яркость в диапазоне 0-7 | ||
delay(500); | ||
} | ||
delay(1000); | ||
for (uint8_t i = 0; i < 8; i++) { | ||
disp.brightness(i); // Яркость в диапазоне 0-7 | ||
delay(500); | ||
} | ||
*/ | ||
|
||
|
||
/* Вывод одиночных символов на нужную позицию СЛЕВА */ | ||
disp.displayByte(_L, 3); // Заменяем 3й символ с 'P' на 'L' | ||
delay(1000); | ||
|
||
|
||
/* Вывод массива символов на дисплей с выравниванием по левому / правому краю */ | ||
uint8_t data[] = {_D, _A}; | ||
disp.clear(); | ||
disp.displayBytes(data, sizeof(data)); // Вывод массива символов с выравниванием по левому краю | ||
delay(1000); | ||
|
||
disp.clear(); | ||
disp.displayBytes(data, sizeof(data), ALIGN_RIGHT); // Вывод массива символов с выравниванием по правому краю | ||
delay(1000); | ||
|
||
disp.clear(); | ||
disp.displayBytes(data, sizeof(data), ALIGN_LEFT); // Вывод массива символов с выравниванием по левому краю | ||
delay(1000); | ||
|
||
|
||
/* Вывод бегущих строк */ | ||
uint8_t str[] = {_1, _2, _3, _4, _5, _empty, _t, _E, _S, _t}; | ||
disp.runningString(str, sizeof(str), 300); // Вывод бегущей строки, указываем массив символов, размер, задержку в мс | ||
|
||
|
||
/* Вывод целых чисел без нулей слева */ | ||
for (int8_t i = -50; i < 50; i++) { | ||
disp.displayInt(i); | ||
delay(100); | ||
} | ||
|
||
|
||
/* Вывод целых чисел c нулями слева */ | ||
for (int8_t i = 50; i > -50; i--) { | ||
disp.displayIntNulls(i); | ||
delay(100); | ||
} | ||
|
||
/* Вывод чисел с плавающей точкой без нулей слева */ | ||
disp.displayFloat(-12.34); // Без указания точности, дробных знаков - 1 | ||
delay(1000); | ||
disp.displayFloat(-12.34, 1); // Или же кол-во знаков можно ввести вручную, от 1 до 3 | ||
delay(1000); | ||
disp.displayFloat(12.34, 2); // Выводить можно как положительные, так и отрицательные числа | ||
delay(1000); | ||
disp.displayFloat(1.234, 3); // Но при выводе 3х десятичных знаков, места под знак минуса не достаточно | ||
delay(1000); | ||
|
||
|
||
/* Вывод чисел с плавающей точкой с нулями слева */ | ||
disp.displayFloat(-3.14); // Тут все аналоично, но с нулями слева | ||
delay(1000); | ||
disp.displayFloat(-1.34, 1); | ||
delay(1000); | ||
disp.displayFloat(3.1415, 2); | ||
delay(1000); | ||
disp.displayFloat(3.1415, 3); | ||
delay(1000); | ||
|
||
|
||
/* Вывод числа + символов */ | ||
for (uint8_t i = 0; i < 30; i++) { | ||
int value = random(0, 99); | ||
disp.displayInt(value); // СНАЧАЛА выводим число int | ||
disp.displayByte(_t, 0); // Пустые символы можем вручную заполнить символами | ||
disp.displayByte(_equal, 1); | ||
delay(200); | ||
} | ||
|
||
|
||
/* Вывод числа + массива символов */ | ||
uint8_t strData[] = {_P, _H}; | ||
disp.displayFloat(1.2, 1); // СНАЧАЛА выводим число float (заняли всего 2 символа) | ||
disp.displayBytes(strData, sizeof(strData)); // Пустые символы можем заполнить массивом символов | ||
delay(1000); | ||
|
||
/* Очистка дисплея */ | ||
disp.clear(); // Буфер дисплея очищается | ||
delay(3000); | ||
} | ||
|
||
ISR(TIMER2_A) { // Прерывание Timer 2 | ||
disp.tickManual(); // Обслуживание динамической индикации дисплея | ||
} |
35 changes: 35 additions & 0 deletions
35
SevenSegmentsDisp/examples/TM74HC595 Display/floatAuto/floatAuto.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/* | ||
Простой пример вывода чисел с плавающей точкой (float),с автоматическим выбором точности | ||
Обслуживание динамической индикации берет на себя аппаратный Timer 2 | ||
https://alexgyver.ru/lessons/timer-isr/ | ||
*/ | ||
|
||
#define DATA_PIN 11 | ||
#define SCLK_PIN 10 | ||
#define RCLK_PIN 12 | ||
#define DISP_PERIOD 3000 // Период динамической индикации в мкс (500-6000) | ||
|
||
#include <GyverTimers.h> | ||
#include <SevenSegmentsDisp.h> | ||
|
||
Disp595 disp(DATA_PIN, SCLK_PIN, RCLK_PIN); | ||
|
||
void setup() { | ||
Timer2.setPeriod(DISP_PERIOD); // Заводим Timer 2 на прерывания с нужным периодом | ||
Timer2.enableISR(); // Включаем прерывания Timer 2 | ||
} | ||
|
||
void loop() { | ||
disp.displayFloatAuto(16.384); // Вывод числа с автоматическим выбором точности | ||
delay(1000); | ||
disp.displayFloatAuto(8.192); // Выведет с точностью 3 знака | ||
delay(1000); | ||
disp.displayFloatAuto(-4.096); // Выведет с точностью 2 знака | ||
delay(1000); | ||
disp.displayFloatAuto(-12.048); // Выведет с точносью 1 знак | ||
delay(1000); | ||
} | ||
|
||
ISR(TIMER2_A) { // Прерывание Timer 2 | ||
disp.tickManual(); // Обслуживание динамической индикации дисплея | ||
} |
35 changes: 35 additions & 0 deletions
35
SevenSegmentsDisp/examples/TM74HC595 Display/floatWithNulls/floatWithNulls.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/* | ||
Простой пример вывода чисел с плавающей точкой (float),С НУЛЯМИ СЛЕВА, на дисплей TM74HC595 | ||
Обслуживание динамической индикации берет на себя аппаратный Timer 2 | ||
https://alexgyver.ru/lessons/timer-isr/ | ||
*/ | ||
|
||
#define DATA_PIN 11 | ||
#define SCLK_PIN 10 | ||
#define RCLK_PIN 12 | ||
#define DISP_PERIOD 3000 // Период динамической индикации в мкс (500-6000) | ||
|
||
#include <GyverTimers.h> | ||
#include <SevenSegmentsDisp.h> | ||
|
||
Disp595 disp(DATA_PIN, SCLK_PIN, RCLK_PIN); | ||
|
||
void setup() { | ||
Timer2.setPeriod(DISP_PERIOD); // Заводим Timer 2 на прерывания с нужным периодом | ||
Timer2.enableISR(); // Включаем прерывания Timer 2 | ||
} | ||
|
||
void loop() { | ||
disp.displayFloatNulls(16.384); // Вывод числа С НУЛЯМИ СЛЕВА (минус всегда крайний слева) | ||
delay(500); | ||
disp.displayFloatNulls(8.192, 1); // Можно указать кол-во дробных знаков, (без указания - 1 знак) | ||
delay(500); | ||
disp.displayFloatNulls(-4.096, 2); // Можно выводить и отрицательные числа | ||
delay(500); | ||
disp.displayFloatNulls(2.048, 3); // Но в случае с 3мя знаками, доступны только положительные (не хватает символов) | ||
delay(500); | ||
} | ||
|
||
ISR(TIMER2_A) { // Прерывание Timer 2 | ||
disp.tickManual(); // Обслуживание динамической индикации дисплея | ||
} |
35 changes: 35 additions & 0 deletions
35
SevenSegmentsDisp/examples/TM74HC595 Display/floatWithoutNulls/floatWithoutNulls.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/* | ||
Простой пример вывода чисел с плавающей точкой (float),БЕЗ НУЛЕЙ СЛЕВА, на дисплей TM74HC595 | ||
Обслуживание динамической индикации берет на себя аппаратный Timer 2 | ||
https://alexgyver.ru/lessons/timer-isr/ | ||
*/ | ||
|
||
#define DATA_PIN 11 | ||
#define SCLK_PIN 10 | ||
#define RCLK_PIN 12 | ||
#define DISP_PERIOD 3000 // Период динамической индикации в мкс (500-6000) | ||
|
||
#include <GyverTimers.h> | ||
#include <SevenSegmentsDisp.h> | ||
|
||
Disp595 disp(DATA_PIN, SCLK_PIN, RCLK_PIN); | ||
|
||
void setup() { | ||
Timer2.setPeriod(DISP_PERIOD); // Заводим Timer 2 на прерывания с нужным периодом | ||
Timer2.enableISR(); // Включаем прерывания Timer 2 | ||
} | ||
|
||
void loop() { | ||
disp.displayFloat(16.384); // Вывод числа БЕЗ НУЛЕЙ СЛЕВА (минус следует за ближайшим числом) | ||
delay(500); | ||
disp.displayFloat(-8.192, 1); // Можно указать кол-во дробных знаков, (без указания - 1 знак) | ||
delay(500); | ||
disp.displayFloat(-4.096, 2); // Можно выводить и отрицательные числа | ||
delay(500); | ||
disp.displayFloat(2.048, 3); // Но в случае с 3мя знаками, доступны только положительные (не хватает символов) | ||
delay(500); | ||
} | ||
|
||
ISR(TIMER2_A) { // Прерывание Timer 2 | ||
disp.tickManual(); // Обслуживание динамической индикации дисплея | ||
} |
30 changes: 30 additions & 0 deletions
30
SevenSegmentsDisp/examples/TM74HC595 Display/intWithNulls/intWithNulls.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
/* | ||
Простой пример вывода целых чисел (unsigned int / int), С НУЛЯМИ СЛЕВА, на дисплей TM74HC595 | ||
Обслуживание динамической индикации берет на себя аппаратный Timer 2 | ||
https://alexgyver.ru/lessons/timer-isr/ | ||
*/ | ||
|
||
#define DATA_PIN 11 | ||
#define SCLK_PIN 10 | ||
#define RCLK_PIN 12 | ||
#define DISP_PERIOD 3000 // Период динамической индикации в мкс (500-6000) | ||
|
||
#include <GyverTimers.h> | ||
#include <SevenSegmentsDisp.h> | ||
|
||
Disp595 disp(DATA_PIN, SCLK_PIN, RCLK_PIN); | ||
|
||
void setup() { | ||
Timer2.setPeriod(DISP_PERIOD); // Заводим Timer 2 на прерывания с нужным периодом | ||
Timer2.enableISR(); // Включаем прерывания Timer 2 | ||
} | ||
|
||
void loop() { | ||
int value = random(-99, 99); // Получим случайное число со знаком в диапазоне (-99...99) | ||
disp.displayIntNulls(value); // Вывод числа С НУЛЯМИ СЛЕВА (минус всегда крайний слева) | ||
delay(500); // Задержка между сменой | ||
} | ||
|
||
ISR(TIMER2_A) { // Прерывание Timer 2 | ||
disp.tickManual(); // Обслуживание динамической индикации дисплея | ||
} |
Oops, something went wrong.