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) { }
}