В данной статье я расскажу о модуле управления LED&KEY на основе микросхемы TM1638 и библиотеки для его использования в среде Microchip Studio.
Данный модуль включает в себя микросхему TM1638 к которой подключены два четырехразрядных семисегментных индикатора, 8 светодиодов и 8 кнопок.
Принципиальная электрическая схема модуля представлена ниже. Для подключения к микроконтроллеру или Arduino используются 5 выводов: VCC, GND для подключения питания и STB0, CLK, DIO для управления микросхемой TM1638.
Теперь перейдем к программной части. Для управления модулем LED&KEY в среде Microchip Studio я рекомендую использовать библиотеку, разработанную Łukasz Marcin Podkalicki. Вот ссылка на его Github.
На всякий случай сохранил библиотеку себе на google диск.
Данная библиотека позволяет:
- отображать цифры и точки семисегментном индикаторе
- управлять определенными сегментами в пределах одного знака на индикаторе
- Управлять свечением светодиодов
- включать/выключать свечение семисегментных индикаторов
- регулировать яркость семисегментных индикаторов
- опрашивать клавиатуру на предмет нажатия с поддержкой одновременного нажатия нескольких кнопок
Библиотека отлично работает с микроконтроллерами семейства attiny (как заявляет автор библиотеки ATtiny13, ATtiny25, ATtiny45, ATtiny85) и atmega (проверено мной, работает при условии подключения TM1638 к порту B микроконтроллера)
Как подключить библиотеку я подробно описал в статье «Как подключить к Microchip/Atmel Studio библиотеку», но перед этим в файле tm1638.h в строках, которые после «// Main Settings» необходимо задать выводы микроконтроллера к которым подключены пины, или же подключить их так, как прописано в программе:
// Main Settings #define TM1638_DIO_PIN PB0 #define TM1638_CLK_PIN PB1 #define TM1638_STB_PIN PB2
Перед тем как начать использовать устройство на TM1638 его нужно инициализировать. Инициализация выполняется командой TM1638_init(state, brightness_value),
где state – состояние дисплея после инициализации (1 или 0) 1 – включено, 0 – выключено
brightness_value – яркость свечения дисплея (от 1 до 7) 1 – минимальная, 7 – максимальная
Пример использования:
TM1638_init(1, 6); //или TM1638_init(1/*enable*/, 6 /*brighness*/);
После инициализации TM1638 для управления модулем используются следующие команды:
TM1638_enable(state) – включение/отключение свечения дисплея, где state управляет свечением дисплея (1 или 0) 1 – включено, 0 – выключено, например:
TM1638_enable(0); //Выключить свечение семисегментных индикаторов TM1638_enable(1); //Включить свечение семисегментных индикаторов
TM1638_set_brightness(brightness_value) – задание яркости свечения светодиодного семисегментного дисплея, где brightness_value значение яркости от 0(минимум) до 7(максимум)
Например:
TM1638_set_brightness(4); // установить яркость дисплея на 4 из 7
TM1638_display_digit(position, digit, state) – вывод цифры в определенный разряд на семисегментный дисплей, где
position – разряд на дисплее (от 1 до 8), куда будет выведена цифра.
digit – цифра, которая будет выведена в разряд(от 0 до 9)
state – свечение точки на разряде (1 или 0) 1 – включено, 0 – выключено
например:
TM1638_display_digit(0 /*Разряд 0*/, 5 /*вывод числа 5*/, 0 /*точка после числа не светится*/); TM1638_display_digit(1, 1, 0); TM1638_display_digit(2, 2, 0); TM1638_display_digit(2, 2, 0);
TM1638_display_segments(position, segments) – включение определенных сегментов на определенном разряде семисегментного дисплея, где
position – разряд на дисплее (от 1 до 8), на котором будут включаться сегменты.
segments – число, каждый бит которого в двоичном виде соответствует определенному сегменту дисплея. Если бит установлен в 1 – сегмент светится, в 0 – не светится:
Т.е. если нужно засветить символ «H», то segments=0b01110110, если нужен символ «-», то segments=0b01000000.
Примеры использования данной команды:
TM1638_display_segments(1/*position 0..7*/, 0b01110111); //A TM1638_display_segments(2/*position 0..7*/, 0b01111100); //b TM1638_display_segments(3/*position 0..7*/, 0b00111001); //C
TM1638_set_led(position, state) – команда для управления светодиодами. Зажигает или гасит определенный светодиод
position – номер светодиода (от 1 до 8)
state – управление светодиодом (1 или 0) 1 – включен, 0 – выключен
Пример:
TM1638_set_led(4 /*position 1..8*/,1 /*enable*/); TM1638_set_led(5, 1);
TM1638_clear_leds() – погасить все светодиоды
TM1638_scan_keys() возвращает восьмибитное число, каждый бит которой соответствует нажатой кнопке.
Например, при нажатой кнопке «S1» будет возвращено число 0b00000001(1), при нажатой кнопке «S2» - число 0b00000010(2) и так далее: «S3» - 0b00000100 (4); «S4» - 0b00001000 (8); «S5» - 0b00010000 (16), «S6» - 0b00100000 (32), «S7» - 0b01000000 (64) и «S8» - 0b10000000 (128).
Также поддерживается нажатие нескольких кнопок одновременно, т.е. если нажать кнопки «S1», «S2» и «S8» - будет возвращено число 0b10000101 (133). И соответственно, если ничего не нажато, то будет возвращен «0».
Пример:
keys = TM1638_scan_keys() // Опросить клавиатуру и результат присвоить переменной keys
На этом пока все!
Комментариев нет:
Отправить комментарий