Ir ao conteúdo
  • Cadastre-se

Interface PS/2 com PIC


gerab

Posts recomendados

Olá amigos,

Gostaria de saber se alguem tem algum material sobre como construir uma interface de teclado ps/2 com um PIC. Preciso ligar esta interface a porta PS/2 da placa-mãe para que o pic simule o pressionamento de teclas. Prefiro que, se possível, o material seja em C, não entendo nada de ASM.

Abraços e fico no aguardo,

Ricardo Gerab

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Opa! Muito obrigado galera.

Ja conhecia a Biblioteca ps2 do MicroC, mas ela não "escreve" só "lê".

Como meu conhecimento em Programação e PIC é, digamos, mediano, e o tempo que tempo para esse desenvolvimento é curto, preciso de uma Biblioteca como a PS2 do MicroC só que com a função para escrever. Alguem possui ideia se isto já existe??

Abraços,

Ricardo Gerab

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Muito obrigado, vou continuar minha busca!

Gerab,veja,eu só conseguí terminar o projeto depois de estudar a fundo o protocolo Ps/2,entender como funciona o Boot de um PC e testar em uma plataforma Linux.

Por isso te disse que não ia encontrar um projeto COMPLETO,apenas 'partes'.

Conclusão,acho que não conseguirá o que quer muito rápido,talvez tenha que estudar esses detalhes que mencionei.Sobre essa parte eu posso ajudar.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Segue este link, tem um excelente projeto, com esquemas, dicas de funcionamento, e soft . Pela maneira que foi implementado, fica fácil decodificar o teclado via interrupção, pode ser feito em ASM, C, Basic, mas é o que o amigo VTRX falou, vai ter de escrever o software mesmo ....

http://www.electronic-engineering.ch/microchip/projects/keyboard/v3xx/keyboard_v3xx.html

Paulo

  • Curtir 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

//****************************************************************************//
// Library to send PS2 data from a PIC microcontroller to a computer via the
// keyboard's PS2 port
//
// Anton Rieckert
// [EMAIL="[email protected]"][email protected][/EMAIL]
// [URL]http://www.riecktron.co.za[/URL]
//****************************************************************************//
Unit PS2_Send;
Implementation
const lookup_table : array[65] of byte = (
0x29 , // sp
0x16 , // !
0x52 , // "
0x26 , // #
0x25 , // $
0x2E , // %
0x3D , // &
0x52 , // '
0x46 , // (
0x45 , // )
0x3E , // *
0x55 , // +
0x41 , // ,
0x4E , // -
0x49 , // .
0x4A , // /
0x45 , // 0
0x16 , // 1
0x1E , // 2
0x26 , // 3
0x25 , // 4
0x2E , // 5
0x36 , // 6
0x3D , // 7
0x3E , // 8
0x46 , // 9
0x4C , // :
0x4C , // ;
0x41 , // <
0x55 , // =
0x49 , // >
0x4A , // ?
0x1E , // @
0x1C , // A
0x32 , // B
0x21 , // C
0x23 , // D
0x24 , // E
0x2B , // F
0x34 , // G
0x33 , // H
0x43 , // I
0x3B , // J
0x42 , // K
0x4B , // L
0x3A , // M
0x31 , // N
0x44 , // O
0x4D , // P
0x15 , // Q
0x2D , // R
0x1B , // S
0x2C , // T
0x3C , // U
0x2A , // V
0x1D , // W
0x22 , // X
0x35 , // Y
0x1A , // Z
0x54 , // [
0x5D , // 55
0x5B , // ]
0x36 , // ^
0x4E , // _
0x0E); // '
var portaddress : word;
___DATA : byte;
___CLOCK : byte;

Function PS2_Send_GetParaty(data : byte) : byte;
var i : byte;
Begin
result := 0;
for i := 0 to 7 do
Begin
If TestBit(data, i) = 1 then inc(result);
End;
result := result AND %00000001;
result := result XOR %00000001;
End;
Procedure PS2_Send_Data_Low;
Begin
FSR2Ptr := portaddress;
ClearBit(INDF2, ___DATA); // Low
FSR2Ptr := portaddress + 9;
ClearBit(INDF2, ___DATA); // Output
End;
Procedure PS2_Send_Clock_Low;
Begin
FSR2Ptr := portaddress;
ClearBit(INDF2, ___CLOCK); // Low
FSR2Ptr := portaddress + 9;
ClearBit(INDF2, ___CLOCK); // Output
End;
Procedure PS2_Send_Data_Idle;
Begin
FSR2Ptr := portaddress + 9;
SetBit(INDF2, ___DATA); // Input
FSR2Ptr := portaddress;
SetBit(INDF2, ___DATA); // Hi
End;
Procedure PS2_Send_Clock_Idle;
Begin
FSR2Ptr := portaddress + 9;
SetBit(INDF2, ___CLOCK); // Input
FSR2Ptr := portaddress;
SetBit(INDF2, ___CLOCK); // Hi
End;

Procedure PS2_Send_Ack;
label Error;
var i : byte;
Begin
i := 0;
Repeat
Begin
FSR2Ptr := portaddress;
inc(i);
if i = 200 then goto Error;
End;
Until TestBit(INDF2, ___CLOCK) = 0;
// Repeat until the computer is ready to send ack
Repeat
Begin
FSR2Ptr := portaddress;
inc(i);
if i = 200 then goto Error;
End;
Until TestBit(INDF2, ___DATA) = 0;
Repeat
Begin
FSR2Ptr := portaddress;
End;
Until TestBit(INDF2, ___CLOCK) = 1;

for i := 0 to 8 do
Begin
Delay_22us;
PS2_Send_Clock_Low;
Delay_22us;
PS2_Send_Clock_Idle;
End;

Delay_22us;
PS2_Send_Data_Idle;
Delay_22us;
PS2_Send_Clock_Low;
Delay_22us;
PS2_Send_Clock_Idle;
Delay_22us;
PS2_Send_Data_Low;
Delay_22us;
PS2_Send_Clock_Low;
Delay_22us;
PS2_Send_Clock_Idle;
PS2_Send_Data_Idle;
Error:
End;
Procedure PS2_Send_Send(data, par : byte);
var i : byte;
Begin
// Repeat until the computer is ready to read from the keyboard
Repeat
Begin
FSR2Ptr := portaddress;
End;
Until TestBit(INDF2, ___CLOCK) = 1;

// Start to send the start bit
Delay_22us;
PS2_Send_Data_Low;
Delay_22us;
PS2_Send_Clock_Low;
Delay_22us;
PS2_Send_Clock_Idle;

// Now send the 8 bit data with LSB first
for i := 0 to 7 do
Begin
// Delay_10us;
If TestBit(data, i) = 1 then PS2_Send_Data_Idle
else PS2_Send_Data_Low;
PS2_Send_Clock_Low;
Delay_22us;
PS2_Send_Clock_Idle;
End;

// Send the odd paraty bit
Delay_10us;
if par = 1 then PS2_Send_Data_Idle
else PS2_Send_Data_Low;
Delay_22us;
PS2_Send_Clock_Low;
Delay_22us;
PS2_Send_Clock_Idle;

// End off with the stop bit
Delay_22us;
PS2_Send_Data_Idle;
Delay_22us;
PS2_Send_Clock_Low;
Delay_22us;
PS2_Send_Clock_Idle;

PS2_Send_Ack;
PS2_Send_Ack;
End;
Procedure PS2_Send_Init(var port : byte; data_pin, clock_pin : byte);
Begin
portaddress := @port;
___DATA := data_pin;
___CLOCK := clock_pin;
PS2_Send_Clock_Idle;
PS2_Send_Data_Idle;
End;
Procedure PS2_Send_Out(var data : array[90] of char);
var i : byte;
temp, par : byte;
Begin
for i := 0 to length(data) - 1 do
Begin
// Enter key
if data[i] = 13 then
Begin
PS2_Send_Send($5A, 1);
PS2_Send_Send($F0,1);
PS2_Send_Send($5A, 1);
End
else
Begin
temp := data[i] - 32;
// Lower case characters
If ((temp > $40) AND (temp < $5E)) then
Begin
temp := temp - 32;
temp := lookup_table[temp];
par := PS2_Send_GetParaty(temp);
PS2_Send_Send(temp, par);
PS2_Send_Send($F0,1);
PS2_Send_Send(temp, par);
End
else
// Upper case characters
If (((temp > $1D) AND (temp < $41)) OR (temp < $0C)) OR (temp = $1A) OR (temp = $1C) then
//else
Begin
PS2_Send_Send($12, 1);
temp := lookup_table[temp];
par := PS2_Send_GetParaty(temp);
PS2_Send_Send(temp, par);
PS2_Send_Send($F0,1);
PS2_Send_Send(temp, par);
PS2_Send_Send($F0, 1);
PS2_Send_Send($12, 1);
End
else
// Numbers
If ((temp > $09) AND (temp < $1A)) OR (temp = $1D) OR (temp = $1B) then
Begin
temp := lookup_table[temp];
par := PS2_Send_GetParaty(temp);
PS2_Send_Send(temp, par);
PS2_Send_Send($F0,1);
PS2_Send_Send(temp, par);
End;
End;
End;
End;
End.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Não conhecia essa programação em Pascal para PIC,apenas para PC eu conheço,de qualquer forma,esse projeto apenas envia caracteres para o PC,ele não inicia a máquina no Boot e não responde ao caps Lock ou outros comandos que o pC envia ao teclado.

É isso que voce precisa?Desse modo vai precisar aletrar as opções no setup para dar boot sem teclado ou vai ter que ligar em paralelo com um teclado completo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Sim, eu preciso de uma interface que possa enviar caracteres para PS/2 mas que o pc possa inicializar com esta interface sem precisar usar um teclado em paralelo!

Abraços,

Ricardo Gerab

Alguem conhece algum programa para fazer esta tradução de pascal para c???

abraços,

Ricardo Gerab

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • mês depois...
Olá amigos,

Gostaria de saber se alguem tem algum material sobre como construir uma interface de teclado ps/2 com um PIC. Preciso ligar esta interface a porta PS/2 da placa-mãe para que o pic simule o pressionamento de teclas. Prefiro que, se possível, o material seja em C, não entendo nada de ASM.

Abraços e fico no aguardo,

Ricardo Gerab

Amigo, você obteve algum resultado? Estou muito interessado no assunto e estou tentando projetar algo parecido.Se você puder ajudar em algo ficarei grato.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 7 anos depois...

Amigo Gerab.

Notei que esse tópico, esta parado a muito tempo. gostaria de saber se você conseguiu encontrar o que queria.

tendo em vista que esse e o local ideal para a troca de conhecimento, porém existe muita gente com um pouco mais que os outros, que adquiriu com uma pessoa com um pouco mais, e ainda não percebeu que o conhecimento foi feito para ser passado a diante! um dia você não acorda mais, e tudo se perdeu por a mais pura ignorância. ( Sem querer citar nomes )

 Fiz um projeto parecido com o que você estava procurando, e encontrei bastante material para o mesmo. Se tratava de uma interface para uma maquina de músicas, onde era controlada através da porta ps2. ela contava com 16 teclas mapeadas, e utilizava uma PIC16f628A. vou postar o programa em ( c ), e se você tiver ainda interesse, posso mandar o esquema para confecção da PCB.

 

segue o código..

 

#include <16F628A.h>     // Define a  PIC 16F628a
#fuses INTRC,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // os Fuses de sempre
#use delay(internal=4000000) // Oscilador a 4 Mhz


#define T_CLOCK PIN_B2
#define T_DATA  PIN_B1
unsigned int8 valor;
char miletra;

/* ****************************************************************************************** */
void vEnvia_Byte(char Data){
char k=0,Unos=1;
 
   while(input(T_CLOCK)==0);
   output_high(T_CLOCK); 
   output_high(T_DATA);
   output_drive(T_DATA);
   output_drive(T_CLOCK);
   /* ** Enviamos Bit Start ** */
   output_high(T_CLOCK); 
   output_high(T_DATA);
   delay_us(40);
   output_low(T_DATA);
   delay_us(40);
   output_low(T_CLOCK);  
   delay_us(40);
   /* ** Enviamos 8 bits de dados ** */
   for(k=0;k<8;k++){
      output_high(T_CLOCK);
      delay_us(5);
      output_bit(T_DATA,Data & 0x01);
      delay_us(35);
      output_low(T_CLOCK);
      delay_us(40);
      if(bit_test(Data,0)==1){Unos++;}
      Data>>=1;   
   }
   /* ** Enviamos bit de comparação ** */
   output_high(T_CLOCK);
   delay_us(5);
   output_bit(T_DATA,Unos&0x01);
   delay_us(35);
   output_low(T_CLOCK);
   delay_us(40);
   /* ** Enviamos bit de parada ** */
   output_high(T_CLOCK);
   delay_us(5);
   output_high(T_DATA);
   delay_us(35);
   output_low(T_CLOCK);
   delay_us(40);
 
   output_float(T_CLOCK);
   output_float(T_DATA);
 
   delay_us(100);
}
/* ****************************************************************************************** */
char cLee_Byte(void){
char k;
char Data=0xEC;
 
   /* ** Condicion RTS ** */
   delay_us(100);
   if(input(T_DATA)==0){
      /* ** Esperamos que o Host esteja vazio para enviar dados  ** */
      while(input(T_CLOCK)==0);
      output_high(T_CLOCK);
      output_drive(T_CLOCK);
      output_high(T_CLOCK);
      delay_us(200);
      output_low(T_CLOCK);
      if(input(T_DATA)==0){
         /* ** Se recebe os 8 bits de dados ** */
         for(k=0;k<8;k++){
            delay_us(40);
            output_high(T_CLOCK);
            delay_us(20);
            shift_right(&Data,1,input(T_DATA));
            delay_us(20);
            output_low(T_CLOCK);
         }
         /* ** Se ignora bit de comparação ** */
         delay_us(40);
         output_high(T_CLOCK);
         delay_us(40);
         output_low(T_CLOCK);
         /* ** Se testa bit de parada ** */
         delay_us(40);
         output_high(T_CLOCK);
         delay_us(20);
         if(input(T_DATA)==1){
         delay_us(15);
         /* ** Se envia Ack ** */
         output_drive(T_DATA);
         output_low(T_DATA);
         delay_us(5);
         output_low(T_CLOCK);
         delay_us(40);
         output_high(T_CLOCK);
         delay_us(10);
         }
      }
   }
   output_float(T_CLOCK);
   output_float(T_DATA);
   delay_us(100);
   return(Data);
}
/* ****************************************************************************************** */
#int_EXT
void Leer_Host(){
static char Dato_Host;
 
   Dato_Host=cLee_Byte();
   if(Dato_Host!=0xEC){
      if(Dato_Host==0xEE){
         vEnvia_Byte(0xEE);
      }else{
         vEnvia_Byte(0xFA);
         if(Dato_Host==0xF2){
            vEnvia_Byte(0xAB);
            vEnvia_Byte(0x83);
         }
         if(Dato_Host==0xFF){
            delay_ms(1);
            vEnvia_Byte(0xAA);
         }
      }
   }
}
/* ****************************************************************************************** */

void main()
{
   delay_ms(800);
   vEnvia_Byte(0xAA);  
   ext_int_edge(H_TO_L);
   clear_interrupt(INT_EXT);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);   
   do{
      
      vEnvia_Byte(0x44); //O
      delay_ms(100);
      vEnvia_Byte(0x4b); //L
      delay_ms(100);
      vEnvia_Byte(0x1c); //A
      delay_ms(100);
      vEnvia_Byte(0x29); //Espaco
      delay_ms(100);//
      vEnvia_Byte(0x42); //K
      delay_ms(100);//
      vEnvia_Byte(0x24); //E
      delay_ms(100);
      vEnvia_Byte(0x29); //Espaco
      delay_ms(100);//
      vEnvia_Byte(0x1c); //A
      delay_ms(100);//
      vEnvia_Byte(0x1b); //S
      delay_ms(100);//
      vEnvia_Byte(0x24); //E
      delay_ms(100);//
      vEnvia_Byte(0x29); //Espaco
      delay_ms(100);//
      vEnvia_Byte(0x29); //Espaco
      delay_ms(100);//
      vEnvia_Byte(0x29); //Espaco
      delay_ms(100);//  
      output_toggle(PIN_B3);
      delay_ms(500);
   }
   while(true);
}

 

 

* Daqui você Pode Seguir com seu Programa Especifico Amigo!!!

 

Espero que ajude..

 

Um Abraço!!

 

 A Avareza torna o Homem Um Inútil para o Mundo, a generosidade torna-o estimado!!

Pense Nisso!!! 

Marcelo CZ

       

  • Curtir 3
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 4 meses depois...
  • 8 meses depois...
Em 05/06/2017 às 22:17, Marcelo Cz disse:

Amigo Gerab.

Notei que esse tópico, esta parado a muito tempo. gostaria de saber se você conseguiu encontrar o que queria.

tendo em vista que esse e o local ideal para a troca de conhecimento, porém existe muita gente com um pouco mais que os outros, que adquiriu com uma pessoa com um pouco mais, e ainda não percebeu que o conhecimento foi feito para ser passado a diante! um dia você não acorda mais, e tudo se perdeu por a mais pura ignorância. ( Sem querer citar nomes )

 Fiz um projeto parecido com o que você estava procurando, e encontrei bastante material para o mesmo. Se tratava de uma interface para uma maquina de músicas, onde era controlada através da porta ps2. ela contava com 16 teclas mapeadas, e utilizava uma PIC16f628A. vou postar o programa em ( c ), e se você tiver ainda interesse, posso mandar o esquema para confecção da PCB.

 

segue o código..

 

#include <16F628A.h>     // Define a  PIC 16F628a
#fuses INTRC,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // os Fuses de sempre
#use delay(internal=4000000) // Oscilador a 4 Mhz


#define T_CLOCK PIN_B2
#define T_DATA  PIN_B1
unsigned int8 valor;
char miletra;

/* ****************************************************************************************** */
void vEnvia_Byte(char Data){
char k=0,Unos=1;
 
   while(input(T_CLOCK)==0);
   output_high(T_CLOCK); 
   output_high(T_DATA);
   output_drive(T_DATA);
   output_drive(T_CLOCK);
   /* ** Enviamos Bit Start ** */
   output_high(T_CLOCK); 
   output_high(T_DATA);
   delay_us(40);
   output_low(T_DATA);
   delay_us(40);
   output_low(T_CLOCK);  
   delay_us(40);
   /* ** Enviamos 8 bits de dados ** */
   for(k=0;k<8;k++){
      output_high(T_CLOCK);
      delay_us(5);
      output_bit(T_DATA,Data & 0x01);
      delay_us(35);
      output_low(T_CLOCK);
      delay_us(40);
      if(bit_test(Data,0)==1){Unos++;}
      Data>>=1;   
   }
   /* ** Enviamos bit de comparação ** */
   output_high(T_CLOCK);
   delay_us(5);
   output_bit(T_DATA,Unos&0x01);
   delay_us(35);
   output_low(T_CLOCK);
   delay_us(40);
   /* ** Enviamos bit de parada ** */
   output_high(T_CLOCK);
   delay_us(5);
   output_high(T_DATA);
   delay_us(35);
   output_low(T_CLOCK);
   delay_us(40);
 
   output_float(T_CLOCK);
   output_float(T_DATA);
 
   delay_us(100);
}
/* ****************************************************************************************** */
char cLee_Byte(void){
char k;
char Data=0xEC;
 
   /* ** Condicion RTS ** */
   delay_us(100);
   if(input(T_DATA)==0){
      /* ** Esperamos que o Host esteja vazio para enviar dados  ** */
      while(input(T_CLOCK)==0);
      output_high(T_CLOCK);
      output_drive(T_CLOCK);
      output_high(T_CLOCK);
      delay_us(200);
      output_low(T_CLOCK);
      if(input(T_DATA)==0){
         /* ** Se recebe os 8 bits de dados ** */
         for(k=0;k<8;k++){
            delay_us(40);
            output_high(T_CLOCK);
            delay_us(20);
            shift_right(&Data,1,input(T_DATA));
            delay_us(20);
            output_low(T_CLOCK);
         }
         /* ** Se ignora bit de comparação ** */
         delay_us(40);
         output_high(T_CLOCK);
         delay_us(40);
         output_low(T_CLOCK);
         /* ** Se testa bit de parada ** */
         delay_us(40);
         output_high(T_CLOCK);
         delay_us(20);
         if(input(T_DATA)==1){
         delay_us(15);
         /* ** Se envia Ack ** */
         output_drive(T_DATA);
         output_low(T_DATA);
         delay_us(5);
         output_low(T_CLOCK);
         delay_us(40);
         output_high(T_CLOCK);
         delay_us(10);
         }
      }
   }
   output_float(T_CLOCK);
   output_float(T_DATA);
   delay_us(100);
   return(Data);
}
/* ****************************************************************************************** */
#int_EXT
void Leer_Host(){
static char Dato_Host;
 
   Dato_Host=cLee_Byte();
   if(Dato_Host!=0xEC){
      if(Dato_Host==0xEE){
         vEnvia_Byte(0xEE);
      }else{
         vEnvia_Byte(0xFA);
         if(Dato_Host==0xF2){
            vEnvia_Byte(0xAB);
            vEnvia_Byte(0x83);
         }
         if(Dato_Host==0xFF){
            delay_ms(1);
            vEnvia_Byte(0xAA);
         }
      }
   }
}
/* ****************************************************************************************** */

void main()
{
   delay_ms(800);
   vEnvia_Byte(0xAA);  
   ext_int_edge(H_TO_L);
   clear_interrupt(INT_EXT);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);   
   do{
      
      vEnvia_Byte(0x44); //O
      delay_ms(100);
      vEnvia_Byte(0x4b); //L
      delay_ms(100);
      vEnvia_Byte(0x1c); //A
      delay_ms(100);
      vEnvia_Byte(0x29); //Espaco
      delay_ms(100);//
      vEnvia_Byte(0x42); //K
      delay_ms(100);//
      vEnvia_Byte(0x24); //E
      delay_ms(100);
      vEnvia_Byte(0x29); //Espaco
      delay_ms(100);//
      vEnvia_Byte(0x1c); //A
      delay_ms(100);//
      vEnvia_Byte(0x1b); //S
      delay_ms(100);//
      vEnvia_Byte(0x24); //E
      delay_ms(100);//
      vEnvia_Byte(0x29); //Espaco
      delay_ms(100);//
      vEnvia_Byte(0x29); //Espaco
      delay_ms(100);//
      vEnvia_Byte(0x29); //Espaco
      delay_ms(100);//  
      output_toggle(PIN_B3);
      delay_ms(500);
   }
   while(true);
}

 

 

* Daqui você Pode Seguir com seu Programa Especifico Amigo!!!

 

Espero que ajude..

 

Um Abraço!!

 

 A Avareza torna o Homem Um Inútil para o Mundo, a generosidade torna-o estimado!!

Pense Nisso!!! 

Marcelo CZ

       

 

boa noite Marcelo sei que esse post e velho mais se puder me ajudar ,  vi seu Código    e  gostaria se não fosse pedir de mais  se puder me passar o projeto do  circuito agradeço   pois  faz um bom tempo já que estou batendo em cima desse assunto mas não consigo concluir      favor se puder mandar, desde já agradeço att

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 7 meses depois...
Em 12/06/2018 às 22:43, lucas henenrique disse:

 

boa noite Marcelo sei que esse post e velho mais se puder me ajudar ,  vi seu Código    e  gostaria se não fosse pedir de mais  se puder me passar o projeto do  circuito agradeço   pois  faz um bom tempo já que estou batendo em cima desse assunto mas não consigo concluir      favor se puder mandar, desde já agradeço att

Bom Dia ....

 

Gostaria de saber se você conseguiu o projeto  anteriormente mencionado ?  tambem estou a procura de algum esquema que faca isso pra usar  comando em fliperama pelo computador .... sei q da pra  fazer em um teclado ... mas quero tentar fazer usando uma interface com pic.....    se conseguiu o projeto  gostaria de  vizualiza-lo tambem .. obrigado

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...