Postat: 13 oktober 2005, 15:21:13
vet inte, vart kollar jag de?
Svenskt forum för elektroniksnack.
https://elektronikforumet.com/forum/
Kod: Markera allt
#define setbit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define clearbit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define checkbit(ADDRESS,BIT) (ADDRESS & (1<<BIT))
#define lcd_data_port PORTD
#define lcd_styrbit PORTB
#define RS 0
#define RW 1
#define E 2
Kod: Markera allt
void lcd_initiering(void)
{
clearbit(lcd_styrbit, RS); // Aktiverar att vi skall skriva instruktioner till LCD.
clearbit(lcd_styrbit, RW); // Aktiverar att vi skall skicka till LCD.
setbit(lcd_styrbit, E); // Förbedered för att lägga data på porten.
// REGISTER, GRUNDFUNKTIONER
clearbit(lcd_data_port, 0); // Förflytta inte display i sidled.
setbit(lcd_data_port, 1); // Förflytta cursor i sidled.
setbit(lcd_data_port, 2); // Hög för att göra inställningar i detta register.
clearbit(lcd_data_port, 3);// Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 4); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 5); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 6); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 7); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_styrbit, E); // Sänder data. E går låg för att LCD:n skall ta emot.
delay_ms(5);
setbit(lcd_styrbit, E); // Data sänt. E går hög igen.
// REGISTER, DISPLAY
setbit(lcd_data_port, 0); // Vill ha blinkande "svartbox" cursor.
setbit(lcd_data_port, 1); // Aktivera cursor.
setbit(lcd_data_port, 2); // Display PÅ.
setbit(lcd_data_port, 3); // Hög för att göra inställningar i detta register.
clearbit(lcd_data_port, 4); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 5); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 6); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 7); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_styrbit, E); // Sänder data. E går låg för att LCD:n skall ta emot.
delay_ms(5);
setbit(lcd_styrbit, E); // Data sänt. E går hög igen.
// REGISTER, AVANCERADE FUNKTIONER
clearbit(lcd_data_port, 0); // Används ej.
clearbit(lcd_data_port, 1); // Används ej.
clearbit(lcd_data_port, 2); // Fonten sätts till 5x7 pixlar.
setbit(lcd_data_port, 3); // Anger att displayen är "mer än 1 rads display".
setbit(lcd_data_port, 4); // Sätter 8 bitars dataläge.
setbit(lcd_data_port, 5); // Hög för att göra inställningar i detta register.
clearbit(lcd_data_port, 6); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 7); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_styrbit, E); // Sänder data. E går låg för att LCD:n skall ta emot.
delay_ms(5);
setbit(lcd_styrbit, E); // Data sänt. E går hög igen.
}
Kod: Markera allt
void delay_ms(unsigned int x)
{
unsigned int y=x;
setbit(TCCR1B, CS10); // Starta Timer1, Prescaler 1024. CLK=3906kHz
clearbit(TCCR1B, CS11);// Starta Timer1, Prescaler 1024. CLK=3906kHz
setbit(TCCR1B, CS12); // Starta Timer1, Prescaler 1024. CLK=3906kHz
while(y>0)
{
setbit(TIFR, TOV1); // Cleara overflowflagga.
TCNT1=65531; // Laddar med värde för att få exakt en millisekund.
while(!checkbit(TIFR, TOV1)) {} // Vänta på overflowflagga.
y--;
}
clearbit(TCCR1B, CS10); // Timer1 avstängd.
clearbit(TCCR1B, CS11); // Timer1 avstängd.
clearbit(TCCR1B, CS12); // Timer1 avstängd.
}
Kod: Markera allt
void lcd_skriv_ett_tecken(unsigned char ett_tecken)
{
setbit(lcd_styrbit, RS); // Aktiverar att vi skall skriva till display på LCD.
clearbit(lcd_styrbit, RW); // Aktiverar att vi skall skicka till LCD.
setbit(lcd_styrbit, E); // Förbedered för att lägga data på porten.
lcd_data_port=ett_tecken; // Data lagt på porten.
clearbit(lcd_styrbit, E); // Sänder data. E går låg för att LCD:n skall ta emot.
delay_ms(1);
setbit(lcd_styrbit, E); // Data sänt. E går hög igen.
}