#ifndef _TM1637_H #define _TM1637_H 1 #include "stdint.h" #include "pico/stdlib.h" #include "hardware/pio.h" #define MINUS_SEG 0b01000000 // Minus #define DOT_SEG 0b10000000 // DOT #define STOP_COND 0x100 // ストップコンディションにする #define TM1637_MAX_COL 6 // TM1637の最大カラム数は6 #define TM1637_MAX_CONTRAST 0b111 #define TM1637_AUTOINC 0b01000000 // Data set Auto Increment #define TM1637_DATASET 0b01000100 // Data set #define TM1637_ADDRSET 0b11000000 // ADDR SET #define TM1637_DISPOFF 0b10000000 // Display Off #define TM1637_DISPON 0b10001000 // Display On #define TM1637_ERR_INVALID_PARAM -1 #define TM1637_ERR_NACK -2 typedef struct TM1637st { PIO pio; // PIOインスタンス uint sm; // ステートマシン番号 uint offset; // オフセットアドレス uint8_t contrast; // コントラスト値 uint8_t colmns; // このユニットのカラム数 bool initialized; // 初期化完了フラグ struct TM1637st *next; // 次の構造体へのポインタ } TM1637_t; /* TM1637_t *TM1637_init(uint8_t sda_base_pin, int col, uint8_t cont); TM1637を初期化しハンドルを返す パラメータ: uint8_t sda_base_pin: TM1637のSDAが接続されているGPIO。SDAの次のGPIOにSCLKを接続すること uint8_t col: 接続しているTM1637モジュールのカラム数 uint8_t cont: コントラスト値(0~7) 戻り値: TM1637_tのポインタ。NULLは初期化失敗 */ TM1637_t *TM1637_init(uint8_t sda_base_pin, uint8_t col, uint8_t cont); /* int TM1637_set_contrast(TM1637_t *p, uint8_t cont); パラメータ: TM1637_t *p: TM1637_tのポインタ uint8_t cont: コントラスト値 戻り値: 0なら成功、負の値なら失敗 */ int TM1637_set_contrast(TM1637_t *p, uint8_t cont); /* int TM1637_putchar(TM1637_t *p, char c, bool dot, uint8_t col); 1文字出力 パラメータ: TM1637_t *p: TM1637_tのポインタ bool dot: ドットセグメントをオンにするならtrue uint8_t col: 表示するカラム 戻り値: 0なら成功、負の値なら失敗 */ int TM1637_putchar(TM1637_t *p, char c, bool dot, uint8_t col); /* int TM1637_putstr(TM1637_t *t, char *str); 文字列表示 パラメータ: TM1637_t *p: TM1637_tのポインタ char *str: 表示する文字列 戻り値: 0なら成功、負の値なら失敗 */ int TM1637_putstr(TM1637_t *t, char *str); #endif