Die Ansteuerung passiert über den Parallelport.
Hier gibt es den Beitrag ausführlicher - mit Hardware und Theorie.
In MS Visual C# gestalten wir eine kleine Benutzeroberfläche mit "Windows Forms":
Für die Combobox müssen noch die Anzeigewerte eingetragen werden über "Eigenschaften - Auflistung":
Hier nun das C#-Programm:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices; // Für DLL-Import benötigt
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
// LPT1 bei meiner PCMCIA-Karte ist FEE8 HEX!
// Öffnne Systemsteuerung - System - Hardwaremanager und schaue nach!
public int LPT_PORT_ADRESS = 0;
public int[] BackwardStepArray = { 9, 10, 6, 5 }; // Bitmuster der Einzelschritte rückwärts
public int[] ForwardStepArray = { 5, 6, 10, 9 }; // Bitmuster der Einzelschritte vorwärts
public int StepCounter = 0; // Zum Abrufen der Werte aus dem StepArray
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
CParallelPort.Output(LPT_PORT_ADRESS, 0x00);
}
private void timer1_Tick(object sender, EventArgs e)
{
int Wert = ForwardStepArray[StepCounter]; // Auslesen eines Wertes
CParallelPort.Output(LPT_PORT_ADRESS, Wert); // Ausgabe an Parallelport
StepCounter++; // Schrittzähler erhöhen
// Insgesamt sind nur 4 Werte im Array
// Deshalb muss der StepCounter schließlich wieder auf Null gesetzt werden
if (StepCounter > 3)
{
StepCounter = 0;
}
}
// Timer1 Start
private void button4_Click(object sender, EventArgs e)
{
if (LPT_PORT_ADRESS == 0)
{
label3.Text = "Fehler: Bitte LPT-Port auswählen!";
}
else
{
label3.Text = "Alles okay!";
}
timer1.Enabled = true;
}
// Timer1 Stopp
private void button5_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
private void label2_Click(object sender, EventArgs e)
{
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// LPT_PORT_ADRESS =
switch (comboBox1.SelectedIndex)
{
case 0: LPT_PORT_ADRESS=0x378;
break;
case 1: LPT_PORT_ADRESS = 0x278;
break;
case 2: LPT_PORT_ADRESS = 0xFEE8;
break;
}
}
private void button1_Click(object sender, EventArgs e)
{
int Ausgabewert = 0x9;
CParallelPort.Output(LPT_PORT_ADRESS, Ausgabewert); // Ausgabe an Parallelport
int Testwert = CParallelPort.Input(LPT_PORT_ADRESS); // Einlesn vom Parallelport
if (Ausgabewert == Testwert)
{
label3.Text = "Der gewählte Port existiert.";
CParallelPort.Output(LPT_PORT_ADRESS, 0x00); // Ausgabe an Parallelport / Zurücksetzen
}
else
{
label3.Text = "Fehler: Der gewählte Port existiert nicht!";
}
}
}
}
class CParallelPort
{
// inpout32.dll muss im /bin/ebug-Ordner vorhanden sein!
// Dieser Code funktioniert nur mit Windows XP
// Für Windows 7 wird eine 64-Bit-DLL inpoutx64.dll benötigt!
[DllImport("inpout32.dll", EntryPoint = "Out32")]
public static extern void Output(int adress, int value);
[DllImport("inpout32.dll", EntryPoint = "Inp32")]
public static extern int Input(int adress);
}
Die Idee zu diesem Grundlagenversuch stammt von Wolfgang Back (www.wolfgang-back.com).