// Copyright 2021 IOsetting // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef __FW_SSD1306_H__ #define __FW_SSD1306_H__ #include "fw_hal.h" #include "string.h" /* I2C address * address: 7 bit slave address, left aligned, bits 7:1 are used, LSB bit is not used */ #ifndef SSD1306_I2C_ADDR #define SSD1306_I2C_ADDR 0x78 //#define SSD1306_I2C_ADDR 0x7A #endif /* SSD1306 settings */ /* SSD1306 width in pixels */ #ifndef SSD1306_WIDTH #define SSD1306_WIDTH 128 #endif /* SSD1306 LCD height in pixels */ #ifndef SSD1306_HEIGHT #define SSD1306_HEIGHT 64 #endif #ifndef SSD1306_TIMEOUT #define SSD1306_TIMEOUT 20000 #endif /*!< Black color, no pixel */ #define SSD1306_COLOR_BLACK 0x00 /*!< Pixel is set. Color depends on LCD */ #define SSD1306_COLOR_WHITE 0x01 /** * @brief Writes single byte command to slave * @param command: command to be written */ void SSD1306_WriteCommand(uint8_t command); /** * @brief Writes single byte data to slave * @param dat: data to be written */ void SSD1306_WriteData(uint8_t dat); /** * Initializes SSD1306 LCD */ void SSD1306_Init(void); /** * @brief Updates buffer from internal RAM to LCD * @note This function must be called each time you do some changes to LCD, to update buffer from RAM to LCD */ void SSD1306_UpdateScreen(void); /** * @brief Toggles pixels invertion inside internal RAM * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen */ void SSD1306_ToggleInvert(void); /** * @brief Fills entire LCD with desired color * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen * @param Color: Color to be used for screen fill. This parameter can be a value of @ref SSD1306_COLOR_t enumeration */ void SSD1306_Fill(uint8_t Color); /** * @brief Draws pixel at desired location * @note @ref SSD1306_UpdateScreen() must called after that in order to see updated LCD screen * @param x: X location. This parameter can be a value between 0 and SSD1306_WIDTH - 1 * @param y: Y location. This parameter can be a value between 0 and SSD1306_HEIGHT - 1 * @param color: Color to be used for screen fill. This parameter can be a value of @ref SSD1306_COLOR_t enumeration * @retval None */ void SSD1306_DrawPixel(uint16_t x, uint16_t y, uint8_t color); /** * @brief Sets cursor pointer to desired location for strings * @param x: X location. This parameter can be a value between 0 and SSD1306_WIDTH - 1 * @param y: Y location. This parameter can be a value between 0 and SSD1306_HEIGHT - 1 * @retval None */ void SSD1306_GotoXY(uint16_t x, uint16_t y); /** * @brief Draws line on LCD * @note @ref SSD1306_UpdateScreen() must be called after that in order to see updated LCD screen * @param x0: Line X start point. Valid input is 0 to SSD1306_WIDTH - 1 * @param y0: Line Y start point. Valid input is 0 to SSD1306_HEIGHT - 1 * @param x1: Line X end point. Valid input is 0 to SSD1306_WIDTH - 1 * @param y1: Line Y end point. Valid input is 0 to SSD1306_HEIGHT - 1 * @param c: Color to be used. This parameter can be a value of @ref SSD1306_COLOR_t enumeration * @retval None */ void SSD1306_DrawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint8_t c); #endif