Untitled

Son módulos prefabricados con controladores incluídos, permiten graficar caracteres del código ASCII y 8 caracteres diseñados por el desarrollador. **Tiene dos tipos de conexiones:

Conexión Pines a 4 y 8 bits en STM

A 4 bits

A 8 bits

Distribución de líneas y Columnas

Untitled

Instrucciones para configuración

Untitled

Librería para LCD a 8 bits

//Nombre de la Librería "LCD_8bits.h"
#include "stm32f4xx.h"
#include "string.h"

// Constantes de configuración
#define RS_PIN 8                 // Pin para RS
#define ENABLE_PIN 9             // Pin para Enable
#define DATA_MASK 0xFF           // Máscara para pines de datos (PC0-PC7)

// Comandos LCD
#define CLEAR_DISPLAY       0x01
#define RETURN_HOME         0x02
#define CURSOR_RIGHT        0x06
#define CURSOR_LEFT         0x04
#define DISPLAY_RIGHT       0x05
#define DISPLAY_LEFT        0x07
#define CURSOR_BLINK        0x0F
#define CURSOR_NO_BLINK     0x0C
#define SET_8BITS_MODE      0x38
#define DDRAM_LINE_1        0x80
#define DDRAM_LINE_2        0xC0
#define CGRAM_ADDRESS       0x40
#define DISPLAY_OFF         0x08
#define SHIFT_DISPLAY_LEFT  0x18  // Desplaza todo el contenido de la pantalla a la izquierda
#define SHIFT_DISPLAY_RIGHT 0x1C  // Desplaza todo el contenido de la pantalla a la derecha

// Función de retraso optimizada
void Delay_LCD(int x) {
    for (volatile int i = 0; i < x*940; i++) {
        asm("nop");
    }
}

// Función para enviar comandos
void LCD_command(uint8_t command) {
    GPIOC->ODR &= ~DATA_MASK;             // Limpiar bits de datos (PC0-PC7)
    GPIOC->ODR |= command;                // Enviar comando a los pines de datos
    GPIOC->ODR &= ~(1UL << RS_PIN);       // RS = 0 (modo comando)
    GPIOC->ODR |= (1UL << ENABLE_PIN);    // Enable = 1
    Delay_LCD(2);                         // Pequeño retraso
    GPIOC->ODR &= ~(1UL << ENABLE_PIN);   // Enable = 0
}

// Función para enviar datos
void LCD_data(uint8_t data) {
    GPIOC->ODR &= ~DATA_MASK;             // Limpiar bits de datos (PC0-PC7)
    GPIOC->ODR |= data;                   // Enviar dato a los pines de datos
    GPIOC->ODR |= (1UL << RS_PIN);        // RS = 1 (modo dato)
    GPIOC->ODR |= (1UL << ENABLE_PIN);    // Enable = 1
    Delay_LCD(2);                         // Pequeño retraso
    GPIOC->ODR &= ~(1UL << ENABLE_PIN);   // Enable = 0
}

// Función para enviar una frase
void LCD_print(const char *text) {
    while (*text) {
        LCD_data(*text++);               // Enviar cada carácter
        Delay_LCD(50);                    // Breve pausa entre caracteres
    }
}
// Función para enviar una frase y saltar de Linea
void LCD_println(const char *text) {
    while (*text) {
        LCD_data(*text++);               // Enviar cada carácter
        Delay_LCD(50);                    // Breve pausa entre caracteres
    }
		LCD_command(DDRAM_LINE_2);
}

// Crear un carácter en CGRAM
void LCD_create(uint8_t DD, uint8_t CG, uint8_t *pattern) {
    LCD_command(CGRAM_ADDRESS + (CG * 8)); // Establecer posición en CGRAM
    for (int i = 0; i < 8; i++) {
        LCD_data(pattern[i]);            // Enviar patrón de bytes
    }
		LCD_command(DDRAM_LINE_1+DD); 
		LCD_data(CG);
}

// Inicializar LCD
void LCD_confi() {
    GPIOC->MODER = 0x555555;              // Configurar PC0-PC9 como salida
    Delay_LCD(40);                        // Esperar estabilización
    LCD_command(0x30);
    Delay_LCD(5);
    LCD_command(0x30);
    Delay_LCD(5);
    LCD_command(0x30);

    LCD_command(SET_8BITS_MODE);         // Configurar en modo 8 bits
    LCD_command(CURSOR_NO_BLINK);        // Mostrar sin parpadeo
    LCD_command(CLEAR_DISPLAY);          // Limpiar pantalla
    LCD_command(DDRAM_LINE_1);           // Cursor al inicio
}

Ejemplo LCD a 8 bits con caracteres creados

//Códigos y comandos para LCD// 
#include "stm32f4xx.h"
#include "string.h"
#include "LCD_8bits.h"

void Delay_ms(int x){
	for(volatile int i=0;i<x*940; i++){
		asm("nop"); 
	}
}	

int main(void){
	RCC->AHB1ENR = 0X7; 
  LCD_confi();

  LCD_println("Hola Juanpis");         // Mostrar texto inicial
  LCD_print("Que lindo eres");           // Mostrar otro texto
	Delay_LCD(1000);
  uint8_t dibujo1[] = {0x00, 0x0E, 0x1B, 0x15, 0x1B, 0x0E, 0x00, 0x00};
	uint8_t dibujo2[] = {0x0E, 0x0E, 0x04, 0x1F, 0x04, 0x04, 0x1B, 0x00};
  LCD_create(13,1, dibujo2);
	LCD_create(14,2, dibujo1);
	while(1){
	
	}
return 0;
}

Imagen de WhatsApp 2024-12-17 a las 16.54.06_c3dccf90.jpg