Skip to content

Commit

Permalink
tm1637 display driver
Browse files Browse the repository at this point in the history
  • Loading branch information
KSKNico committed Dec 27, 2024
1 parent 91d587f commit 6cba3c7
Show file tree
Hide file tree
Showing 9 changed files with 590 additions and 0 deletions.
114 changes: 114 additions & 0 deletions drivers/include/tm1637.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/*
* Copyright (C) 2024 Nico Behrens <[email protected]>
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/

/**
* @defgroup drivers_tm1637 TM1637 display
* @ingroup drivers_display
* @brief Driver for the TM1637 4-digit 7-segment display
*
* @{
* @file
* @brief Interface definition for the TM1637 4-digit 7-segment display driver
*
* @author Nico Behrens <[email protected]>
*
*/

#ifndef TM1637_H
#define TM1637_H

#include "board.h"
#include "periph/gpio.h"

#ifdef __cplusplus
extern "C"
{
#endif

/**
* @brief Pin configuration parameters for the tm1637 display
*/
typedef struct {
/**
* @brief GPIO for clock
*/
gpio_t clk;

/**
* @brief GPIO for data input/output
*/
gpio_t dio;
} tm1637_params_t;

/**
* @brief tm1637 driver descriptor
*/
typedef struct {
/**
* @brief Configuration parameters
*
*/
tm1637_params_t params;
} tm1637_t;

/**
* @brief Brightness level enum for the display
*
* @note The brightness is defined as a fraction of
* the pulse width and must be on of the given values.
*/
typedef enum {
TM1637_PW_1_16 = 0x00,
TM1637_PW_2_16 = 0x01,
TM1637_PW_4_16 = 0x02,
TM1637_PW_10_16 = 0x03,
TM1637_PW_11_16 = 0x04,
TM1637_PW_12_16 = 0x05,
TM1637_PW_13_16 = 0x06,
TM1637_PW_14_16 = 0x07
} tm1637_brightness_t;

/**
* @brief Initializes the tm1637 device
*
* @param[out] dev device descriptor of the display
* @param[in] params configuration parameters
* @return 0 on success, error otherwise
*/
int tm1637_init(tm1637_t *dev, const tm1637_params_t *params);

/**
* @brief Writes an integer to the display
*
* @note The integer can't be bigger than 9999 or smaller than
* -999 as only 4 digits can be displayed at a time.
* With the leading zeros enabled, the display is padded with zeros.
* For negative integers the leading zeros are added between the minus sign
* and the number.
*
* @param[in] dev device descriptor of the display
* @param[in] number number to write, in the range of 9999 to -999
* @param[in] brightness brightness of the display according to @ref tm1637_brightness_t
* @param[in] colon If enabled, displays a colon in the middle
* @param[in] leading_zeros If enabled, displays leading zeros
*/
void tm1637_write_number(const tm1637_t *dev, int16_t number, tm1637_brightness_t brightness, bool colon, bool leading_zeros);

Check warning on line 100 in drivers/include/tm1637.h

View workflow job for this annotation

GitHub Actions / static-tests

line is longer than 100 characters

/**
* @brief Clear the display
*
* @param[in] dev device descriptor of the display
*/
void tm1637_clear(const tm1637_t *dev);

#ifdef __cplusplus
}
#endif

#endif /* TM1637_H */
/** @} */

Check warning on line 114 in drivers/include/tm1637.h

View workflow job for this annotation

GitHub Actions / static-tests

no newline at end of file
7 changes: 7 additions & 0 deletions drivers/tm1637/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
MODULE = tm1637

USEMODULE += ztimer
USEMODULE += ztimer_msec
USEMODULE += periph_gpio

include $(RIOTBASE)/Makefile.base
3 changes: 3 additions & 0 deletions drivers/tm1637/Makefile.dep
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FEATURES_REQUIRED += periph_gpio
USEMODULE += ztimer
USEMODULE += ztimer_msec
2 changes: 2 additions & 0 deletions drivers/tm1637/Makefile.include
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
USEMODULE_INCLUDES_tm1637 := $(LAST_MAKEFILEDIR)/include
USEMODULE_INCLUDES += $(USEMODULE_INCLUDES_tm1637)
62 changes: 62 additions & 0 deletions drivers/tm1637/include/tm1637_params.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* Copyright (C) 2024 Nico Behrens <[email protected]>
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/

/**
* @ingroup drivers_tm1637
*
* @{
* @file
* @brief Config for the TM1637 display
*
* @author Nico Behrens <[email protected]>
*/
#ifndef TM1637_PARAMS_H
#define TM1637_PARAMS_H

#include "board.h"
#include "periph/gpio.h"

#ifdef __cplusplus
extern "C" {
#endif

#ifndef TM1637_PARAM_CLK
/**
* @brief see @ref tm1637_params_t
*/
#define TM1637_PARAM_CLK GPIO_PIN(0, 0)
#endif

#ifndef TM1637_PARAM_DIO
/**
* @brief see @ref tm1637_params_t
*/
#define TM1637_PARAM_DIO GPIO_PIN(0, 1)
#endif

#ifndef TM1637_PARAMS
/**
* @brief see @ref tm1637_params_t
*/
#define TM1637_PARAMS { .clk = TM1637_PARAM_CLK, \
.dio = TM1637_PARAM_DIO }
#endif

/**
* @brief see @ref tm1637_params_t
*/
static const tm1637_params_t tm1637_params[] = {
TM1637_PARAMS
};

#ifdef __cplusplus
}
#endif

#endif /* TM1637_PARAMS_H */
/** @} */

Check warning on line 62 in drivers/tm1637/include/tm1637_params.h

View workflow job for this annotation

GitHub Actions / static-tests

no newline at end of file
Loading

0 comments on commit 6cba3c7

Please sign in to comment.