-->

16x2 LCD Interfacing with STM32,STM32F103C6

By

 16x2 LCD  Interfacing with STM32,STM32F103C6










.








  

lcd_init();

   LCD_LINE1;
  lcd_String("  GeElectron");
  LCD_LINE2;
   lcd_String("   Welcome");

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13, GPIO_PIN_SET);// LCD Enable PIN to High
	 	  	  HAL_Delay(500);
	 	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13, RESET);
	  	      HAL_Delay(500);
	  	  //  lcd_String("Hello");

  }
  /* USER CODE END 3 */
}
LCD.c File

/*
 * lcd.c
 *
 *  Created on: Sep 30, 2023
 *      Author: Geelabs
 */
#include "stm32f1xx_hal.h"
#include "lcd.h"
#include "main.h"



extern void Delay_Us (uint16_t us);
void lcd_Strobe(void)
{

	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11, GPIO_PIN_SET);// LCD Enable PIN to High
    HAL_Delay(1);   
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11, RESET);// LCD Enable High to Low
    HAL_Delay(1);
 }

void lcd_init(void)
{

  HAL_Delay(40);
  lcd_cmd(0x03);
  HAL_Delay(5);
  lcd_cmd(0x03);
  HAL_Delay(1);
  lcd_cmd(0x03);
  HAL_Delay(10);
  lcd_cmd(0x02); // Function set --> DL=0 (4 bit mode), N = 1 (2 line display) F = 0 (5x8 characters)
  HAL_Delay(1);
  lcd_cmd(0x28);
  lcd_cmd(0x08);
  HAL_Delay(10);
  lcd_cmd(0x00);
  lcd_cmd(0x01);
  HAL_Delay(3);
  lcd_cmd(0x00);

   lcd_cmd(0x0c);            // Make cursorinvisible
   lcd_Clear();            // Clear screen
   lcd_cmd(0x6);            // Set entry Mode(auto increment of cursor)
}

void lcd_cmd(__uint16_t cmd)
{
	    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10, GPIO_PIN_RESET);
        cmd = (cmd << 8) ;
        GPIOB->ODR =  (cmd & 0xf000);
        lcd_Strobe();
        cmd = (cmd << 4) ;
        GPIOB->ODR =  (cmd & 0xf000);
        lcd_Strobe();
}


void lcd_data(__uint16_t lcd_data)
{
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10, GPIO_PIN_SET);
     lcd_data = (lcd_data << 8) ;
     GPIOB->ODR =  (lcd_data& 0xf000)|0x400;
     lcd_Strobe();
     lcd_data = (lcd_data << 4) ;
     GPIOB->ODR =  (lcd_data & 0xf000)|0x400;
     lcd_Strobe();
   }


void lcd_Clear(void)
{
    lcd_cmd(0x01);
    HAL_Delay(5);
}

void lcd_String(const char *ptr)  // ptr pointing the address of displaying string
{
    while (*ptr)             // check weather the endo of file then exit the loop
    {
        lcd_data(*ptr++);    // Sending data to LCD_data functions
    }
}




gElectron. Powered by Blogger.