Info om HD4478 finn här och här om det behövs...
Kod: Markera allt
#include <avr/io.h>
#define LCD_DDRX DDRA
#define LCD PORTA		// Port som LCDn sitter på
void init_lcd(void) {
	LCD_DDRX=0xFF;	// LCD-porten som utgång
	LCD=0x00;		//Allt till 0
	delay(25);		// Vänta lite med initieringen
	// initiera skiten
	write_lcd(0x30);
	delay(6);
	write_lcd(0x30);
	delay(6);
	write_lcd(0x30);
	delay(6);
	write_lcd(0x38);
	delay(6);
	write_lcd(0x08);
	delay(6);
	write_lcd(0x01);
	delay(6);
	write_lcd(0x06);
}
//Skriver ut en byte till LCDn
void write_lcd(unsigned char byte) {
	LCD&=0xF0;		// Nollställ D7-D4
	LCD|=byte>>4;	// Lägg ut översta 4 bitarna
	LCD|=0x10;		// Sätt E till 1
	delay(1);		// Fördröj x tusendelar
	LCD&=~0x10;		// Sätt E till 0
	LCD&=0xF0;		// Nollställ D7-D4
	LCD|=byte&0x0F;	// Lägg ut nedersta 4 bitarna
	LCD|=0x10;		// Sätt E till 1
	delay(1);		// Fördröj x tusendelar
	LCD&=~0x10;		// Sätt E till 0
}
// Fördröjer med _del_ tusendelar av en sekund. För exakt en sekund använd del = 1024
void delay(unsigned long int del){
unsigned long int i=0;
unsigned char wait=0;
	for(i=0;i<del;i++) {
		wait=TCNT2+31;
		while(wait!=TCNT2) {}	//Vänta på klockan	
	}
}
// Sätter igång timer2 i asynkront läge
void init_clock(void) {
	ASSR|=0x08;	//async mode
	TCCR2|=0x01;	//clear timer no prescaler
	TIFR=0x40;	//start timer
}
int main(void)
{
	init_clock();
	init_lcd();
	LCD|=0x20;	// RS=1;
	write_lcd(0xF0);          // Skriv ett tecken
	while(1) {	} 
} 
 
				





