Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alixahedi/i2c-lcd-stm32
i2c lcd STM32 library
https://github.com/alixahedi/i2c-lcd-stm32
bluepill display i2c lcd lcd16x2 pcf8574 stm32 stm32f1 stm32f4
Last synced: about 1 month ago
JSON representation
i2c lcd STM32 library
- Host: GitHub
- URL: https://github.com/alixahedi/i2c-lcd-stm32
- Owner: alixahedi
- Created: 2022-12-22T09:56:34.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-10-01T08:04:20.000Z (3 months ago)
- Last Synced: 2024-11-28T08:12:40.657Z (about 1 month ago)
- Topics: bluepill, display, i2c, lcd, lcd16x2, pcf8574, stm32, stm32f1, stm32f4
- Language: C
- Homepage:
- Size: 5.86 KB
- Stars: 8
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# I2C LCD Library for STM32
This is a simple and efficient I2C LCD library for STM32 microcontrollers, designed to control one or multiple I2C LCD displays. The library is object-oriented, allowing you to manage multiple LCDs simultaneously by creating instances for each display.
## Features
- **Multiple LCD Support**: Control multiple LCDs by creating separate instances.
- **4-bit Mode Communication**: Uses 4-bit mode to communicate with the LCD.
- **Customizable I2C Addresses**: Specify different I2C addresses for each LCD.
- **Basic LCD Functions**: Initialize, clear display, set cursor position, display strings and characters.
- **Easy Integration**: Simple API for quick integration into your STM32 projects.## Table of Contents
- [Getting Started](#getting-started)
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [Usage](#usage)
- [Initialization](#initialization)
- [Displaying Text](#displaying-text)
- [Example](#example)
- [API Reference](#api-reference)
- [Contributing](#contributing)
- [License](#license)## Getting Started
### Prerequisites
- **Hardware**: STM32 microcontroller, I2C LCD display(s).
- **Software**: STM32CubeIDE or any compatible development environment.
- **Knowledge**: Basic understanding of C programming and STM32 HAL libraries.### Installation
1. **Clone the Repository**: Download or clone this repository to your local machine.
```bash
git clone https://github.com/alixahedi/i2c-lcd-stm32.git
```2. **Add Files to Project**: Copy `i2clcd.c` and `i2clcd.h` into your project's source and header directories, respectively.
3. **Include Header File**: Include the `i2clcd.h` in your main program or wherever you plan to use the LCD functions.
```c
#include "i2clcd.h"
```4. **Configure I2C Peripheral**: Ensure that the I2C peripheral is initialized using STM32CubeMX or manually in your code.
## Usage
### Initialization
Create an instance of `I2C_LCD_HandleTypeDef` for each LCD you plan to use. Initialize each LCD by specifying its I2C handler and address.
```c
I2C_LCD_HandleTypeDef lcd1;
I2C_LCD_HandleTypeDef lcd2;void init_lcds(void) {
lcd1.hi2c = &hi2c1; // hi2c1 is your I2C handler
lcd1.address = 0x4E; // I2C address for the first LCD
lcd_init(&lcd1); // Initialize the first LCDlcd2.hi2c = &hi2c1; // Use the same or different I2C handler
lcd2.address = 0x7E; // I2C address for the second LCD
lcd_init(&lcd2); // Initialize the second LCD
}
```### Displaying Text
Use the provided functions to display text, move the cursor, and clear the display.
```c
lcd_puts(&lcd1, "Hello, LCD 1!");
lcd_gotoxy(&lcd2, 0, 1);
lcd_puts(&lcd2, "LCD 2 here!");
```### Example
```c
#include "main.h"
#include "i2c_lcd.h"I2C_HandleTypeDef hi2c1;
I2C_LCD_HandleTypeDef lcd1;int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();lcd1.hi2c = &hi2c1;
lcd1.address = 0x4E;
lcd_init(&lcd1);lcd_clear(&lcd1);
lcd_puts(&lcd1, "STM32 I2C LCD");
lcd_gotoxy(&lcd1, 0, 1);
lcd_puts(&lcd1, "Library Demo");while (1) {
// Main loop
}
}
```## API Reference
### Structures
- **`I2C_LCD_HandleTypeDef`**
| Member | Description |
|-----------|----------------------------------|
| `hi2c` | Pointer to the I2C handler |
| `address` | I2C address of the LCD (8-bit) |### Functions
- **`void lcd_init(I2C_LCD_HandleTypeDef *lcd);`**
Initializes the LCD display.
- **`void lcd_send_cmd(I2C_LCD_HandleTypeDef *lcd, char cmd);`**
Sends a command byte to the LCD.
- **`void lcd_send_data(I2C_LCD_HandleTypeDef *lcd, char data);`**
Sends a data byte to the LCD.
- **`void lcd_clear(I2C_LCD_HandleTypeDef *lcd);`**
Clears the display.
- **`void lcd_gotoxy(I2C_LCD_HandleTypeDef *lcd, int col, int row);`**
Sets the cursor position.
- **`void lcd_puts(I2C_LCD_HandleTypeDef *lcd, char *str);`**
Displays a string.
- **`void lcd_putchar(I2C_LCD_HandleTypeDef *lcd, char ch);`**
Displays a single character.
## Contributing
Contributions are welcome! Please fork this repository and submit a pull request for any improvements.
1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/NewFeature`)
3. Commit your Changes (`git commit -m 'Add NewFeature'`)
4. Push to the Branch (`git push origin feature/NewFeature`)
5. Open a Pull Request## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
---
**Disclaimer**: This library is provided "as is", without warranty of any kind. Use it at your own risk.