
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:
D4 = Amarillo → PC0
D5 = Naranja → PC1
D6 = Rojo → PC2
D7 = Café → PC3
RS = Azul → PC4 - E = Amarillo → PC5
D0 = Gris → PC0
D1 = Morado → PC1
D2 = Azul → PC2
D3 = Verde → PC3
D4 = Amarillo → PC4
D5 = Naranja → PC5
D6 = Rojo → PC6
D7 = Café → PC7
RS = Azul → PC8 - E = Amarillo → PC9


//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
}
//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;
}
