#define F_CPU 16000000
#include <avr/io.h>
#include <util/delay.h>
#define RS 1
#define E 0
void pulso_E() {
PORTB &= ~(1<<E);
PORTB |= (1<<E);
PORTB &= ~(1<<E);
return;
}
void envia_dados(unsigned char comando) {
PORTD = ((comando & 0xF0) | (PORTD & 0x0F));
pulso_E();
PORTD = (((comando << 4) & 0xF0) | (PORTD & 0x0F));
pulso_E();
return;
}
void Lcd_cmd(unsigned char comando) {
_delay_ms(1);
PORTB &= ~(1<<RS);
envia_dados(comando);
return;
}
void Lcd_out(char linha_lcd, char coluna_lcd, char *ponteiro) {
if((linha_lcd > 0) && (linha_lcd < 3))
if((linha_lcd > 0) && (linha_lcd < 3)) {
if((coluna_lcd > 0) && (coluna_lcd < 41)) {
Lcd_cmd(128 + (coluna_lcd - 1) + ((linha_lcd - 1) * 64));
while (*ponteiro) {
_delay_ms(1);
PORTB |= (1<<RS);
envia_dados(*ponteiro);
ponteiro++;
}
}
}
return;
}
void Lcd_init() {
DDRB = DDRB | ((1<<E) + (1<<RS));
DDRD = DDRD | ((1<<PD4)+(1<<PD5)+(1<<PD6)+(1<<PD7));
PORTB &= ~(1<<RS);
_delay_ms(15);
PORTD = ((0x30 & 0xF0) | (PORTD & 0x0F));
pulso_E();
_delay_ms(5);
pulso_E();
_delay_ms(1);
pulso_E();
_delay_ms(1);
PORTD = ((0x20 & 0xF0) | (PORTD & 0x0F));
pulso_E();
Lcd_cmd(0x28);
Lcd_cmd(0x08);
Lcd_cmd(0x01);
Lcd_cmd(0x06);
Lcd_cmd(0x0C);
}
int main(void) {
Lcd_init(); // Inicializa o LCD
Lcd_out(1, 1, "Ola mundo!"); // Exibe "Ola mundo!" na primeira linha, primeira coluna
while (1) {
// O seu código aqui
}
return 0;
}