lunes, 7 de abril de 2008

mi primer ejemplo con LCD

ejemplo #1 : las rutinas son por tiempo, y simulado en Proteus 6.9

#define F_CPU 1000000UL

#include
#include
#include


void retardo(int tiempo)
{
while(--tiempo)
_delay_ms(1);
}

#define RS (1)
#define RW (2)
#define EN (4)

void lcd_chr(char dato)
{
PORTB = RS;
PORTA=dato;
PORTB = EN;
PORTB &= ~EN;
//listo?
_delay_us(80);
}

void lcd_cmd(char dato)
{
PORTB &= ~RS;
PORTA=dato;
PORTB = EN;
PORTB &= ~EN;
//listo?
_delay_us(80);
}

#define lcd_clear() {lcd_cmd(1);retardo(5);}

void lcd_init(void)
{
PORTA=0;
PORTB=0;

DDRB = 0b00000111;
DDRA = 0xFF;

retardo(5);
lcd_cmd(0x30);
retardo(5);
lcd_cmd(0x30);
retardo(5);
lcd_cmd(0x38);
lcd_cmd(0x0F);
lcd_clear();
}

void lcd_print(const prog_char *cadena)
{
while(pgm_read_byte(cadena))
lcd_chr(pgm_read_byte(cadena++));
}

int main (void)
{
lcd_init();
lcd_print(PSTR("Hola Mundo"));
lcd_cmd(0xc0);
lcd_print(PSTR("Como están"));
while(1);
}

No hay comentarios: