Acendedor de leds pela porta paralela

Publicado por Angelito Monteiro Goulart (última atualização em 11/03/2010)

[ Hits: 17.131 ]

Homepage: http://angelitomg.com

Download led.c

Download 1267842472.led.c (versão 2)




Programa com um simples menu onde o usuário pode escolher entre acender ou apagar os leds conectados à porta paralela. Nos comentários do programa segue a dica de como montar o circuito.

  



Versões atualizadas deste script

Versão 2 - Enviado por Marcelo Paiva em 05/03/2010

Changelog: Segue pequena alteração para carregar numero decimal e acender leds, vai pedir numero em decimal, apos segue sequencia do programa original com menus 1,2, e 3, se digitar 5 vai acender metade dos leds 15 é igual a 0F em hexa e é igual a 00001111 em binario acendendo leds conforme sequencia binaria, vou tentar mandar fotos, tenho pouco tempo e não sei usar ainda ferramentas do site, enfim o mais importante é que a base do programa é 10 e funciona, consegui sucesso no Mandriva 2009 com Gnome e pacotes essential, agora as fotos que vou tentar mandar são no ubuntu9.10 com buid-essential.

/*
* Acendedor de leds pela porta paralela
* Angelito M. Goulart
* Setembro/2009
*
* Esquema Eletrico
*
* Pino2 -> 470R -> LED1
* Pino3 -> 470R -> LED2
*
* Pode-se usar do pino 2 ate o pino 9 para ligar os LEDs
* GND -> Do pino 18 ao pino 25
*
*/

#include
#include
int main(void)
{
int opcao;
int altdec; //variavel adicionada para armazenar numero decimal a ser enviado para porta
ioperm(0x378,3,1); //inicializa a porta paralela
outb(0x00, 0x378);
do
{
printf ("\n=====Entre número em decimal=====\n");

scanf ("%d", &altdec); //carrega decimal


printf ("\n=====Acendedor de Leds=====\n");
printf (" 1.Acender Leds\n");
printf (" 2.Apagar Leds\n");
printf (" 3.Sair\n\n");
printf (" Selecione uma opcao: ");
scanf ("%d", &opcao);
if (opcao == 1)
{
//seta porta com decimal carregado em altdec
outb(altdec, 0x378); //caso a opcao seja 1, acende todos os leds,alterado para altdec
}
if (opcao == 2)
{
outb(0x00, 0x378); //caso a opcao seja 2, apaga todos os leds
}
}while (opcao != 3);
outb(0x00, 0x378);
return (0);
}

Marcelo Paiva

Download 1267842472.led.c


Esconder código-fonte

/*
* Acendedor de leds pela porta paralela
* Angelito M. Goulart
* Setembro/2009
*
* Esquema Eletrico
*
* Pino2 -> 470R -> LED1
* Pino3 -> 470R -> LED2
*
* Pode-se usar do pino 2 ate o pino 9 para ligar os LEDs
* GND -> Do pino 18 ao pino 25
*
*/
#include <stdio.h>
#include <sys/io.h>
int main(void)
{
   int opcao;
   ioperm(0x378,3,1); //inicializa a porta paralela
   outb(0x00, 0x378);
   do
    {
       printf ("\n=====Acendedor de Leds=====\n");
       printf (" 1.Acender Leds\n");
       printf (" 2.Apagar Leds\n");
        printf (" 3.Sair\n\n");
       printf (" Selecione uma opcao: ");
       scanf ("%d", &opcao);
       if (opcao == 1)
       {
      outb(0xFF, 0x378); //caso a opcao seja 1, acende todos os leds
       }
       if (opcao == 2)
        {
      outb(0x00, 0x378); //caso a opcao seja 2, apaga todos os leds
        }
   }while (opcao != 3);
   outb(0x00, 0x378);
   return (0);
}

Scripts recomendados

Jogo da velha melhorado

Cinema

Ordenar vetor - ordenação bolha

jhr boletim v1.0

Converter graus Celsius em Fahrenheit e vice-versa


  

Comentários
[1] Comentário enviado por mpv2505 em 26/02/2010 - 16:31h

Angelito,
sou iniciante em Linux, parabéns, excelente seu programa consegui executar ele com Mandriva 2009 e codeblocks, mas nao precisa codeblocks, compilei também na linha de comando, excelente, nota 10, liguei 8 leds a paralela com resistor para proteger leds, acende todas e desliga, alterei o programa e fiz entrada com scanf armazendo numero decimal em variavel que coloquei no lugar do numero 0xFF hexa no comando outb, e carreguei ele com numero em decimal acendou as luzes na sequencia conforme numero binario correspondente, esquema dos leds pode ser encontrado em www.rogercom.com.

excelente parabens

Marcelo Paiva
Quilombo Santa Catarina
mpaiva2505@gmail.com

[2] Comentário enviado por mazinsw em 09/03/2010 - 23:56h

valeu muito obrigado, eu só sabia fazer no Windows, mas agora vou fazer utilizando uma interface gráfica com um botão para cada led, usando GTK+, mas ainda tenho uma duvida como obtenho o valor que está ajustado na porta?

[3] Comentário enviado por angelito em 10/03/2010 - 00:13h

Otimo. Assim que fizer, se possivel, poste o codigo. :D Compartilhando e aprendendo :D abraço

[4] Comentário enviado por EnzoFerber em 14/03/2010 - 06:55h

@mazinsw

Cara, acho que com inb() você pega o valor atual da porta.... da uma olhada na função no 'man' ai, muito tempo que não uso, esqueci os argumentos, mais deve ser inb (porta, variavel), algo do tipo... :)

[5] Comentário enviado por removido em 11/11/2010 - 15:33h

Depois de horas pesquizando em russo, alemão, inglês, italiano... eu acho algo exatamente da forma que eu queria e em português!? Caramba meu! AHAHHAHahahAhaha


Contribuir com comentário