Hallo,
versuche mein HP12542R-DYO von pollin anzusteuern. Die beispielsoftware geht. Aber warum muss man das unbedingt in delphi schreiben, meiner meinung nach ENORM hässlich! . Auf jedenfall versuche ich die funktion des displays zu verstehen. Ich habe mir folgenden code gebaut. Er funktioniert irgendwie nur teilweise . Das init geht. Ich kann auch den pixeltest einschalten und zum beispiel invertieren. ABER wenn ich meine lcd clear funktion aufrufe passiert nicht wirklich viel. ein paar pixel werden verschoben aber mehr nicht. Sieht hier irgendjemand ob ich einen großen fehler mache? Vielleicht hat ja schonmal jemand hier das HP12542R-DYO angesteuert... Vielen Dank!

Code:
#include "s1d1565.h"
#include "font6x8s.cpp"

#define BIT(x) (1 << (x))
#define SETBITS(x,y) ((x) |= (y))
#define CLEARBITS(x,y) ((x) &= (~(y)))
#define SETBIT(x,y) SETBITS((x), (BIT((y))))
#define CLEARBIT(x,y) CLEARBITS((x), (BIT((y))))

#pragma comment(lib, "inpout32.lib")

short _stdcall Inp32(short PortAddress);
void _stdcall Out32(short PortAddress, short data);

#define outp(x,y) Out32(y,x)

#define En           0 // Strobe
#define RES          2 // Autofeed
#define CS           3 // Init 
#define A0           1 // Select In

#define LCDP	0x378 // Dataport
#define LCD     0x37A // Controlport

unsigned char Control = 0x0; // Controlregister

void cbi(int adress,int value) // Clear Bit
{
     CLEARBIT(Control,value);
     outp(Control,adress);
}

void sbi(int adress,int value) // Set Bit
{
     SETBIT(Control,value);
     outp(Control,adress);
}

void cycle(int times)
{
	for(int i=0;i<times;i++);
}

void lcd_writecom (unsigned char byte)
{                  
    cbi(LCD,A0);
    outp(byte,LCDP);
    cbi(LCD,CS);
    sbi(LCD,En);
    cbi(LCD,En);
    sbi(LCD,CS);
}



void lcd_init(void)         //Initialize LCD
{
	unsigned int i;
    cbi(LCD,RES);
    for (i=0; i<10000; i++)
    cycle(30);
    sbi(LCD,RES);
    for (i=0; i<100000; i++)
    cycle(30);
    lcd_writecom(0x40);		// Start Display Line = 0
    lcd_writecom(0xA0);		// ADC = normal (Anzeigerichtung nicht gespiegelt)
    lcd_writecom(0xA3);		// LCD-Bias = 1/7 für 4,5-5,5V    1/9 für 3,3-4,5V
    lcd_writecom(0xC0);		// Output Mode = nicht gespiegelt
    lcd_writecom(0x2F);		// LCD-Spannungserzeugung/Regelung einschalten
    lcd_writecom(0x20);		// V5 Regulator Resistor Ratio = 0
    lcd_writecom(0xAC);		// Static Indicator off
    lcd_writecom(0x81);		// Kontrasteinstellung auswählen
    lcd_writecom(32);		// Kontrast = mittel (für Bias 1/7: 20-50, für 1/9: 2-10)
    lcd_writecom(0xA4);		// Displaytest aus
    lcd_writecom(0xAF);		// Display ein
    lcd_writecom(0xA6);		// Display normal (nicht invertiert)
    lcd_clear();
}

void lcd_clear()
{
	unsigned char x, y;
	for (y=0;y<8; y++)
	{
		lcd_setadress(0,y);
		for (x=0;x<128; x++) {
			lcd_writecom(0);
		}
	}
    lcd_setadress(0,0);
}



void lcd_setadress(unsigned char Spalte, unsigned char Zeile)    //Set Adresspointer
{   
	lcd_writecom(0xB0|Zeile);
	lcd_writecom(0x10|(Spalte/16));
	lcd_writecom(Spalte&15);
}
[/code]