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]
Lesezeichen