------------------------------------------------------------------------------------
#include <stdio.h>
#include <windows.h> //Necessário para: LoadLibrary(), GetProcAddress() e
HINSTANCE.
#define LPT1 0x378
//Declaração dos ponteiros para função.
typedef short _stdcall (*PtrInput)(short EndPorta);
typedef void _stdcall (*PtrOutput)(short EndPorta, short valor);
int main(void)
{
HINSTANCE hLib; //Instância para a DLL inpout32.dll.
PtrInput inportB; //Instância para a função Imp32().
PtrOutput outportB; //Instância para a função Out32().
//Carrega a DLL na memória.
hLib = LoadLibrary("inpout32.dll");
if(hLib == NULL) //Verifica se houve erro.
{
printf("Erro. O arquivo inpout32.dll
não foi encontrado.\n");
getch();
return -1;
}
//Obtém o endereço da função Inp32 contida na DLL.
inportB = (PtrInput) GetProcAddress(hLib, "Inp32");
if(inportB == NULL) //Verifica se houve erro.
{
printf("Erro. A função Inp32 não foi
encontrada.\n");
getch();
return -1;
}
//Obtém o endereço da função Out32 contida na DLL.
outportB = (PtrOutput) GetProcAddress(hLib, "Out32");
if(outportB == NULL) //Verifica se houve erro.
{
printf("Erro. A função Out32 não foi
encontrada.\n");
getch();
return -1;
}
//---------------------------------------------------------------------------
//Uso das funções outportB() e inportB():
int i, k;
unsigned char Valor=255; //Em binário: 11111111
while( Valor > 0 )
{
for(i=0;i<100;i++) { printf("sleep
;P\n"); }
outportB(LPT1, Valor); // Envia para
a Porta LPT1
Valor = Valor >> 1; //A cada
passagem, o bit 1 é movido para a direita
if (Valor == 0) { Valor = 255; }
}
}
---------------------------------------------------------------------------------
Fonte: rogercom. adaptação: david
requisitos: 8 leds, 8R de 470 ohms, um cabo de impressora.
Muito interessante. Para q funcione eh importante resaltar q precisa ter a dll input32 pq são usadas 2 funções(inp32, out32) para ter acesso a lpt, já no caso do linux não precisa, pode usar função ioperm
IOPERM
int ioperm(unsigned long from, unsigned long num, int turn_on)
obs: precisa de privilegios de root.
D0 -----led----resistor----- (grd)
D1 -----led----resistor----- (grd)
D2 -----led----resistor----- (grd)
D3 -----led----resistor----- (grd)
D4 -----led----resistor----- (grd)
D5 -----led----resistor----- (grd)
D6 -----led----resistor----- (grd)
D7 -----led----resistor----- (grd)
D0 .. D7 pinos 2 a 9 respectivamente.
Endereço para enviar byte para lpt:
Registro de Dados
lpt1: 378h
lpt2: 278h
,.,,
display de 7 segmentos, next step! ;P