ssd1306.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #ifndef __SSD1306_H__
  2. #define __SSD1306_H__
  3. #include <driver/spi_master.h>
  4. void i2c_master_init();
  5. esp_err_t oled_ssd1306_init();
  6. // I2C CONFIG
  7. #define I2C_MASTER_NUM I2C_NUM_1 /*!< I2C port number for master dev */
  8. #define I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master do not need buffer */
  9. #define I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master do not need buffer */
  10. #define SSD1306_OLED_ADDR 0x3C /*!< slave address for ssd1306 oled display */
  11. #define WRITE_BIT I2C_MASTER_WRITE /*!< I2C master write */
  12. #define READ_BIT I2C_MASTER_READ /*!< I2C master read */
  13. #define ACK_CHECK_EN 0x1 /*!< I2C master will check ack from slave*/
  14. #define ACK_CHECK_DIS 0x0 /*!< I2C master will not check ack from slave */
  15. #define ACK_VAL 0x0 /*!< I2C ack value */
  16. #define NACK_VAL 0x1 /*!< I2C nack value */
  17. // Control bytes (page 20)
  18. #define COMMAND_MODE 0x00
  19. #define SINGLE_COMMAND_MODE 0x80
  20. #define DATA_MODE 0x40
  21. // Fundamental Command (page 28)
  22. #define DISPLAY_LINE_START 0x40
  23. #define CONTRAST_CONTROL 0x81
  24. #define DISABLE_ENTIRE_DISPLAY 0xA4
  25. #define DISPLAY_ON_REG02 0xA5
  26. #define NORMAL_DISPLAY 0xA6
  27. #define DISPLAY_INVERSE 0xA7
  28. #define DISPLAY_RESET 0xAE
  29. #define DISPLAY_ON 0xAF
  30. // Addressing Setting (page 30)
  31. #define MEM_ADDR_MODE 0x20
  32. #define LOWER_COL_START_ADDR 0x00
  33. #define HIGHER_COL_START_ADDR 0x10
  34. #define PAGE_START_ADDR 0xB0
  35. // Hardware Config (page 31)
  36. #define DISPLAY_START_LINE 0x40
  37. #define SEGMENT_REMAP 0xA0
  38. #define MULTIPLEX_RATIO 0xA8
  39. #define COM_OUTPUT_SCAN_DIR 0xC0
  40. #define DISPLAY_OFFSET 0xD3
  41. #define COM_PINS_HARDWARE_CONFIG 0xDA
  42. // Timing & Driving Scheme (page 32)
  43. #define DISPLAY_CLK_RATIO 0xD5
  44. #define PRE_CHARGE_PER 0xD9
  45. #define VCOMH_DESELECT_LEVEL 0xDB
  46. #define NOOPERATION 0xE3
  47. // Charge Pump (page 60)
  48. #define CHARGE_PUMP_SET 0x8D
  49. // Scrolling
  50. #define DEACTIVATE_SCROLL 0x2E
  51. #define ACTIVATE_SCROLL 0x2F
  52. #define VERTICAL_AND_RIGHT_HOR_SCROLL 0x29
  53. #define DUMMY_BYTE 0x00
  54. #define SIX_FRAMES_PER_SEC 0x00
  55. #define VERTICAL_OFFSET_ONE 0x01
  56. typedef enum {
  57. SSD1306_COLOR_BLACK = 0x00, /*!< Black color, no pixel */
  58. SSD1306_COLOR_WHITE = 0x01 /*!< Pixel is set. Color depends on LCD */
  59. } SSD1306_COLOR_t;
  60. typedef struct {
  61. uint8_t FontWidth; /*!< Font width in pixels */
  62. uint8_t FontHeight; /*!< Font height in pixels */
  63. const uint16_t *data; /*!< Pointer to data font data array */
  64. } FontDef_t;
  65. typedef struct {
  66. uint16_t Length; /*!< String length in units of pixels */
  67. uint16_t Height; /*!< String height in units of pixels */
  68. } FONTS_SIZE_t;
  69. #define SSD1306_WIDTH 128
  70. #define SSD1306_HEIGHT 64
  71. extern FontDef_t Font_7x10;
  72. /**
  73. * @brief Calculates string length and height in units of pixels depending on string and font used
  74. * @param *str: String to be checked for length and height
  75. * @param *SizeStruct: Pointer to empty @ref FONTS_SIZE_t structure where informations will be saved
  76. * @param *Font: Pointer to @ref FontDef_t font used for calculations
  77. * @retval Pointer to string used for length and height
  78. */
  79. char* FONTS_GetStringSize(char* str, FONTS_SIZE_t* SizeStruct, FontDef_t* Font);
  80. #endif