Данный модуль включает в себя микросхему TM1637 к которой подключен четырехразрядный семисегментный индикатор с двоеточием без точек после каждого из разрядов:
Принципиальная электрическая схема модуля представлена ниже. Для подключения к микроконтроллеру или Arduino используются 4 вывода: VCC, GND для подключения питания и CLK, DIO для управления микросхемой TM1637:
На всякий случай сохранил библиотеку себе на google диск.
ДАННАЯ БИБЛИОТЕКА ПОЗВОЛЯЕТ:
- отображать цифры и управлять двоеточием на семисегментном индикаторе
- управлять определенными сегментами в пределах одного знака на индикаторе
- включать/выключать свечение семисегментного индикатора
- регулировать яркость семисегментного индикатора
Библиотека отлично работает с микроконтроллерами семейства attiny (как заявляет автор библиотеки ATtiny13, ATtiny25, ATtiny45, ATtiny85) и как и предыдущая библиотека этого автора с atmega (при условии подключения TM1638 к порту B микроконтроллера)
Как подключить библиотеку я подробно описал в статье «Как подключить к Microchip/Atmel Studio библиотеку», но перед этим в файле tm1637.h в строках, которые после «// Main Settings» необходимо задать выводы микроконтроллера к которым подключены пины, или же подключить их так, как прописано в программе:
// Main Settings #define TM1637_DIO_PIN PB0 #define TM1637_CLK_PIN PB1
Перед тем как начать использовать устройство на TM1638 его нужно инициализировать. Инициализация выполняется командой TM1637_init(state, brightness_value),
где state – состояние дисплея после инициализации (1 или 0) 1 – включено, 0 – выключено
brightness_value – яркость свечения дисплея (от 0 до 7) 0 – минимальная, 7 – максимальная
Пример использования:
TM1638_init(1/*enable*/, 6 /*brighness*/); //или TM1638_init(1, 6);
После инициализации TM1638 для управления модулем используются следующие команды:
TM1637_clear() - Очистка (выключение) всех сегментов дисплея, включая двоеточие.
Пример:
TM1637_clear(); //Очистить дисплей
TM1637_enable(state) – включение/отключение свечения дисплея, где state управляет свечением дисплея (1 или 0) 1 – включено, 0 – выключено, например:
TM1638_enable(0); //Выключить свечение семисегментных индикаторов TM1638_enable(1); //Включить свечение семисегментных индикаторов
TM1637_set_brightness(brightness_value) – задание яркости свечения светодиодного семисегментного дисплея, где brightness_value значение яркости от 0(минимум) до 7(максимум)
Например:
TM1638_set_brightness(4); // установить яркость дисплея на 4 из 7
TM1637_display_digit(position, digit) – вывод цифры в определенный разряд на семисегментный дисплей, где
position – разряд на дисплее (от 0 до 3), куда будет выведена цифра.
digit – цифра, которая будет выведена в разряд(от 0 до 9)
например:
TM1637_display_digit(0,2); // Высести цифру "2" в разряд 0 TM1637_display_digit(1,0); // Высести цифру "0" в разряд 1 TM1637_display_digit(2,2); // Высести цифру "2" в разряд 2 TM1637_display_digit(3,3); // Высести цифру "3" в разряд 3
TM1637_display_colon() – управление свечением двоеточия на дисплее (1 или 0) 1 – включено, 0 – выключено
Заметил, что данная команда более-менее корректно работает только совместно с TM1637_display_digit. При использовании ее без этой во втором разряде зажигается «8»:
Хотя в идеале должно быть так:
Пример использования команды:
TM1637_display_colon(1); //включить двоеточие
TM1637_display_segments(position, segments) – включение определенных сегментов на определенном разряде семисегментного дисплея, где
position – разряд на дисплее (от 1 до 8), на котором будут включаться сегменты.
segments – число, каждый бит которого в двоичном виде соответствует определенному сегменту дисплея. Если бит установлен в 1 – сегмент светится, в 0 – не светится:
Т.е. если нужно засветить символ «H», то segments=0b01110110, если нужен символ «-», то segments=0b01000000.
Двоеточием управляет восьмой бит в разряде, после которого оно идет (т.е. во втором разряде из четырех или первом, если считать с нуля) – 0b10000000. Если он установлен в 1 – сегмент светится, в 0 – не светится. По причине описанной в предыдущем пункте не рекомендую совместно с TM1638_display_segments использовать команду включения двоеточия - TM1637_display_colon
Примеры использования данной команды:
TM1637_display_segments(0, 0b01110011); //Буква "Р" TM1637_display_segments(1, 0b00111111); //Буква "О" TM1637_display_segments(2, 0b00111001); //Буква "С" TM1637_display_segments(3, 0b01110111); //Буква "А"
На этом пока все. До новых встреч!
Этот комментарий был удален автором.
ОтветитьУдалитьЗдравствуйте! никак не могу подключить индикатор к atinny13/ Вроде бы, все делаю правильно, подключаю в соответствии с
ОтветитьУдалить// Main Settings
#define TM1637_DIO_PIN PB0
#define TM1637_CLK_PIN PB1
не забыв про + и GND. Но дисплей не работает. Библиотеку установил.
Вот текст программы из папки
"refactoring"
/**
* Copyright (c) 2018, Łukasz Marcin Podkalicki
*
* This is ATtiny13 "Running Digits, Dots and LEDs" example using attiny-tm1637-library,
* https://github.com/lpodkalicki/attiny-tm1637-library .
*/
#include
#include
#include
#include "tm1638.h"
static uint8_t scan_keys_demo(void);
static void digits_and_dots_demo(uint8_t n);
static void leds_demo(uint8_t n);
int
main(void)
{
uint8_t n = 0, k = 0, keys;
/* setup */
TM1638_init(1/*enable*/, 3/*brighness*/);
/* loop */
while (1) {
keys = scan_keys_demo();
if ((k % 10) == 0) {
digits_and_dots_demo(n);
if (!keys) {
leds_demo(n);
}
n++;
}
k++;
_delay_ms(30);
}
}
uint8_t
scan_keys_demo(void)
{
uint8_t i, keys;
keys = TM1638_scan_keys();
for (i = 0; i < 8; ++i) {
TM1638_set_led((i + 1) % 8, !!(keys & (1 << i)));
}
return keys;
}
void
digits_and_dots_demo(uint8_t n)
{
uint8_t i;
for (i = 0; i < 8; ++i) {
TM1638_display_digit(i, (n + i) % 0x10, !!(n % 0x02));
}
}
void
leds_demo(uint8_t n)
{
uint8_t i;
for (i = 0; i < 8; ++i) {
TM1638_set_led(i, !!((i + n) % 0x02));
}
}
с этой программой не работает.
если не трудно, приведите, пожалуйста, полный текст программы. Заранее спасибо.