Vous êtes sur la page 1sur 3

#define F_CPU 16000000ul

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

void CARGAR_VALOR(void){
PORTB^=0X10;
_delay_us(5);
PORTB^=0X10;
_delay_us(15);
}
void MOSTRAR(uint8_t val){
uint8_t vall;
uint8_t valh;
//borra variables
//para el nibble superior
valh=0x00;
//para el nibble inferior
vall=0x00;
//descompone el byte recibido (val) en los 2 nibbles
//guarda el nibble superior (corrido 4 posiciones a la derecha) en valh
valh=(0x0F & (val>>4));
//guarda el nibble inferior en vall
vall=val & 0x0F;
//RS=1 (PB5=1) y carga valh en PORTB (PB3->PB0)
PORTB=0X20|valh;
//activa enable
PORTB^=0X10;
_delay_us(5);
//desactiva enable
PORTB^=0X10;
_delay_us(15);
//RS=1 (PB5=1) y carga vall en PORTB (PB3->PB0)
PORTB=0X20|vall;
//activa enable
PORTB^=0X10;
_delay_us(5);
//desactiva enable
PORTB^=0X10;
_delay_us(15);
}

void CONFIG_PUERTOS(void){
//PARA SALIDA DEL LCD
DDRB=0xFF;
//VALORES INICIALES DE PUERTOS
PORTB= 0x00;
}

void CONFIG_LCD(void){
//esta es la secuencia inicial para operar con 4 bits de datos
//las 3 primeras instrucciones: enviar 3 veces 00110000 (si usas 8 bits) o
0011(si usas 4 bits)
//primeras instrucciones requieren mayor tiempo
PORTB=0x03;
CARGAR_VALOR();
_delay_ms(8);
CARGAR_VALOR();
_delay_ms(2);
CARGAR_VALOR();
_delay_ms(2);

PORTB=0x02;
CARGAR_VALOR();
PORTB=0x02;
CARGAR_VALOR();
PORTB=0x08;
CARGAR_VALOR();
PORTB=0x00;
CARGAR_VALOR();
PORTB=0x0C;
CARGAR_VALOR();

//config para escribir en la 1era linea del LCD (direccion 0x80)


PORTB=0x08;
CARGAR_VALOR();
PORTB=0x00;
CARGAR_VALOR();

MOSTRAR(0x41);
MOSTRAR(0x42);
MOSTRAR(0x43);
MOSTRAR(0x44);
MOSTRAR(0x45);
MOSTRAR(0x46);
MOSTRAR(0x47);
MOSTRAR(0x48);
MOSTRAR(0x49);
MOSTRAR(0x4A);
MOSTRAR(0x4B);
MOSTRAR(0x4C);
MOSTRAR(0x4D);
MOSTRAR(0x4E);
MOSTRAR(0x4F);
MOSTRAR(0x50);

//config para escribir en la 2da linea del LCD (direccion 0xC0)


PORTB=0x0C;
CARGAR_VALOR();
PORTB=0x00;
CARGAR_VALOR();

MOSTRAR(0x30);
MOSTRAR(0x31);
MOSTRAR(0x32);
MOSTRAR(0x33);
MOSTRAR(0x34);
MOSTRAR(0x35);
MOSTRAR(0x36);
MOSTRAR(0x37);
MOSTRAR(0x38);
MOSTRAR(0x39);
MOSTRAR(0x3A);
MOSTRAR(0x3B);
MOSTRAR(0x3C);
MOSTRAR(0x3D);
MOSTRAR(0x3E);
MOSTRAR(0x3F);
}

int main(void)
{
CONFIG_PUERTOS();
CONFIG_LCD();
while (1)
{

}
}