16x02 LCD via I2C (PCF8574) using STM32F103C8Tx microcontroller.

By: Nachiketh V Boin 

STM32F103C8Tx <-> PCF8574 <-> LCD 16×2 Documentation

-GitHub link for code files: nachikethboin/16x02-LCD-via-I2C-PCF8574-using-STM32F103C8Tx-microcontroller. (github.com)

-Hardware Components and PC Requirements

>STM32F103C8Tx Board. Amazon Buy Link

> LCD 16X02 MODULE WITH SERIAL I2C INTERFACE MODULE.  Amazon Buy Link

>PC with STM32CubeIde (CubeIDE Link) , Bread Board and connectors.

-Pinout and Configuration > A_>Z



·        RCC > Mode

> High Speed Clock (HSE) > Crystal/Ceramic Resonator (clock from external crystal).

>Low Speed Clock (LSE) > Disable. 

·        SYS > Mode

> Debug > Serial Wire (select serial wire debug or else the ST link will not work after the first flash and to make it work again you have to erase it).

> Timebase Source > SysTick.

·        I2C1 > Mode

> I2C > I2C (Note: Pin PB6 > I2C SCL, Pin PB7 > I2C SDA)

-Clock Configuration


-i2c-lcd.h file

/** Put this in the Inc folder **/

#include "stm32f1xx_hal.h"

void lcd_init (void);   // initialize lcd

void lcd_send_cmd (char cmd);  // send command to the lcd

void lcd_send_data (char data);  // send data to the lcd

void lcd_send_string (char *str);  // send string to the lcd

void lcd_put_cur(int row, int col);  // put cursor at the entered position row (0 or 1), col (0-15);

void lcd_clear (void);

 

-i2c-lcd.c file

 

/** Put this in the src folder **/

#include "i2c-lcd.h"

extern I2C_HandleTypeDef hi2c1;  // change your handler here accordingly

#define SLAVE_ADDRESS_LCD 0x4E // change this according to ur setup

void lcd_send_cmd (char cmd)

{

  char data_u, data_l;

      uint8_t data_t[4];

      data_u = (cmd&0xf0);

      data_l = ((cmd<<4)&0xf0);

      data_t[0] = data_u|0x0C;  //en=1, rs=0

      data_t[1] = data_u|0x08;  //en=0, rs=0

      data_t[2] = data_l|0x0C;  //en=1, rs=0

      data_t[3] = data_l|0x08;  //en=0, rs=0

      HAL_I2C_Master_Transmit (&hi2c1, SLAVE_ADDRESS_LCD,(uint8_t *) data_t, 4, 100);

}

void lcd_send_data (char data)

{

      char data_u, data_l;

      uint8_t data_t[4];

      data_u = (data&0xf0);

      data_l = ((data<<4)&0xf0);

      data_t[0] = data_u|0x0D;  //en=1, rs=0

      data_t[1] = data_u|0x09;  //en=0, rs=0

      data_t[2] = data_l|0x0D;  //en=1, rs=0

      data_t[3] = data_l|0x09;  //en=0, rs=0

      HAL_I2C_Master_Transmit (&hi2c1, SLAVE_ADDRESS_LCD,(uint8_t *) data_t, 4, 100);

}

void lcd_clear (void)

{

      lcd_send_cmd (0x80);

      for (int i=0; i<70; i++)

      {

            lcd_send_data (' ');

      }

} 

void lcd_put_cur(int row, int col)

{

    switch (row)

    {

        case 0:

            col |= 0x80;

            break;

        case 1:

            col |= 0xC0;

            break;

    }

    lcd_send_cmd (col);

}

void lcd_init (void)

{

      // 4 bit initialization

      HAL_Delay(50);  // wait for >40ms

      lcd_send_cmd (0x30);

      HAL_Delay(5);  // wait for >4.1ms

      lcd_send_cmd (0x30);

      HAL_Delay(1);  // wait for >100us

      lcd_send_cmd (0x30);

      HAL_Delay(10);

      lcd_send_cmd (0x20);  // 4bit mode

      HAL_Delay(10);

  // display initialization

      lcd_send_cmd (0x28); // Function set --> DL=0 (4 bit mode), N = 1 (2 line display) F = 0 (5x8 characters)

      HAL_Delay(1);

      lcd_send_cmd (0x08); //Display on/off control --> D=0,C=0, B=0  ---> display off

      HAL_Delay(1);

      lcd_send_cmd (0x01);  // clear display

      HAL_Delay(1);

      HAL_Delay(1);

      lcd_send_cmd (0x06); //Entry mode set --> I/D = 1 (increment cursor) & S = 0 (no shift)

      HAL_Delay(1);

      lcd_send_cmd (0x0C); //Display on/off control --> D = 1, C and B = 0. (Cursor and blink, last two bits)

}

void lcd_send_string (char *str)

{

      while (*str) lcd_send_data (*str++);

}


thank you for reading my blog.




 

 

 

 

Comments

Popular posts from this blog

Simple Latch Circuit in Siemens TIA Portal V16

SOC Estimation and modelling of Electric Vehicle EV in MATLAB

Pick and Place Robot in Siemens Tecnomatix Plant Simulation