AQUI LES DEJO MI PROGRAMA PARA QUE LO USEN...
#include <16f877a.h> // Definiciones del PIC 16F876A
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // Los Fuses de siempre
#use delay(clock=4000000) // Oscilador a 4 Mhz
#use rs232(baud=9600, xmit=PIN_B0, rcv=PIN_A0)
#define clock PIN_B0
#define data PIN_B1
unsigned int8 valor;
unsigned char conver(unsigned char real)
{
if (real == 'a' || real == 'A') {real = 0x1c;}
else if (real == 'b' || real == 'B') {real = 0x32;}
else if (real == 'c' || real == 'C') {real = 0x21;}
else if (real == 'd' || real == 'D') {real = 0x23;}
else if (real == 'e' || real == 'E') {real = 0x24;}
else if (real == 'f' || real == 'F') {real = 0x2b;}
else if (real == 'g' || real == 'G') {real = 0x34;}
else if (real == 'h' || real == 'H') {real = 0x33;}
else if (real == 'i' || real == 'I') {real = 0x43;}
else if (real == 'j' || real == 'J') {real = 0x3b;}
else if (real == 'k' || real == 'K') {real = 0x42;}
else if (real == 'l' || real == 'L') {real = 0x4b;}
else if (real == 'm' || real == 'M') {real = 0x3a;}
else if (real == 'n' || real == 'N') {real = 0x31;}
else if (real == 'o' || real == 'O') {real = 0x44;}
else if (real == 'p' || real == 'P') {real = 0x4d;}
else if (real == 'q' || real == 'Q') {real = 0x15;}
else if (real == 'r' || real == 'R') {real = 0x2d;}
else if (real == 's' || real == 'S') {real = 0x1b;}
else if (real == 't' || real == 't') {real = 0x2c;}
else if (real == 'u' || real == 'U') {real = 0x3c;}
else if (real == 'v' || real == 'V') {real = 0x2a;}
else if (real == 'w' || real == 'W') {real = 0x1d;}
else if (real == 'x' || real == 'X') {real = 0x22;}
else if (real == 'y' || real == 'Y') {real = 0x35;}
else if (real == 'z' || real == 'Z') {real = 0x1a;}
//NUMEROS
else if (real == '0') {real = 0x45;}
else if (real == '1') {real = 0x16;}
else if (real == '2') {real = 0x1e;}
else if (real == '3') {real = 0x26;}
else if (real == '4') {real = 0x25;}
else if (real == '5') {real = 0x2e;}
else if (real == '6') {real = 0x36;}
else if (real == '7') {real = 0x3d;}
else if (real == '8') {real = 0x3e;}
else if (real == '9') {real = 0x46;}
//ENTER y TABULADOR
else if (real == '/') {real = 0x5a;} //ENTER
else if (real == ' ') {real = 0x29;} //ESPACIO
else if (real == '>') {real = 0x0d;} //TABULADOR
else if (real == '<') {real = 0x66;} //BORRADOR
else if (real == '$') {real = 0x58;} //TAG DE MAYUSCULA $j$ose
else if (real == '-') {real = 0x4a;} //-_
else {real = 0x29;} //Cualquier otra cosa espacio
return real;
}
void letras_ps2(unsigned char letra)
{
int contador;
int salida, unos=1;
boolean paridad=true;
output_high(clock);
output_high(data);
delay_us(40);
output_high(clock);
output_low(data);
delay_us(40);
output_low(clock);
output_low(data);
delay_us(40);
salida =1;
do
{
output_high(clock);
output_bit(data, letra&0x01);
delay_us(40);
output_low(clock);
output_bit(data, letra&0x01);
delay_us(40);
if ((letra & 0x01) == 0x01) {unos++;}
letra = letra>>1;
salida++;
}while (salida < 9);
output_high(clock); ////// P
output_bit(data, unos&0x01);
delay_us(40);
output_low(clock);
output_bit(data, unos&0x01);
delay_us(40);
output_high(clock); ////// STOP
output_high(data);
delay_us(40);
output_low(clock);
output_high(data);
delay_us(40);
output_high(clock); ////// FIN
output_high(data);
delay_ms(70);
}
void main()
{
delay_ms(800);
letras_ps2(conver('$'));
do{
valor=getch();
letras_ps2(conver(valor));
}while(true);
}