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]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); }







Zitieren

Lesezeichen