Poderse modificar s epodria, peor vamos que ya hay librerias que trabajan con 8 bits, ejemplo esta:
Codigo:
/*-------------------------------------------*
| KBD2.C |
| Autor: Pedro Mª Jiménez |
| (c) Microsystems Engineering (Bilbao) |
*-------------------------------------------*/
// Funciones para la gestión del teclado de la Trainer PLUS.
// char kbd_getc( ) Devuelve el código ASCII de la tecla pulsada.
// Si no se pulsó ninguna, devuelve 0.
// Conexiones del teclado.
/*
RB0 RB1 RB2 RB3
^ ^ ^ ^
| | | |
|---|---|---|---|
RB4 ---> | 1 | 2 | 3 | F |
|---|---|---|---|
RB5 ---> | 4 | 5 | 6 | E |
|---|---|---|---|
RB6 ---> | 7 | 8 | 9 | D |
|---|---|---|---|
RB7 ---> | A | 0 | B | C |
|---|---|---|---|
*/
// Caracteres ASCII asociados a cada tecla:
char const KEYS[4][4] = {{"1","2","3","F"} ,
{"4","5","6","E"} ,
{"7","8","9","D"} ,
{"A","0","B","C"} };
#byte kbd_port_b = 6
char kbd_getc( )
{
char tecla=0;
int f,c,t,i,j;
port_b_pullups(true);
set_tris_b(0b00001111); // RB7-RB4 salidas, RB3-RB0 entradas
for(f=0x10, i=0; i<4; f<<=1, i++)
{
for(c=0x01, j=0; j<4; c<<=1, j++)
{
kbd_port_b = ~f;
delay_cycles(1);
t = kbd_port_b & 0x0F;
t = ~(t | 0xF0 );
if(t == c)
{
delay_ms(20);
tecla=KEYS[i ][j ];
while(t==c)
{
restart_wdt( );
t = kbd_port_b & 0x0F;
t = ~(t | 0xF0) ;
}
break;
}
}
if(tecla)
break;
}
port_b_pullups(false);
return tecla;
}
Te la puedes descargar de este enlace:
http://www.msebilbao.com/tienda/software.php
Donde pone curso practico 1.
Suerte!!!
Ups perdona!jeje sera la resaca de ayer que he copiado mal el archivo y te he posteado el del teclado!jeje aqui el lcd:
Codigo:
/*-------------------------------------------*
| LCD2.C |
| Autor: Pedro M. Jimenez |
| (c) Microsystems Engineering (Bilbao) |
*-------------------------------------------*/
// Funciones para la gestion del display LCD de la MicroPIC Trainer.
// lcd_init( ) Debe ser llamada antes que las otras funciones.
//
// lcd_putc(c) Visualiza c en la siguiente posición del display.
// Caracteres especiales de control:
// f Borrar display
//
Saltar a la segunda linea
// Retroceder una posición.
//
// lcd_gotoxy(x,y) Selecciona la nueva posicion de escritura en el display.
// (la esquina superior izquierda es 1,1)
//
// lcd_getc(x,y) Devuelve el caracter de la posicion x,y del display.
#bit lcd_enable = 5.2
#bit lcd_rw = 5.1
#bit lcd_rs = 5.0
#byte lcd_a = 5
#byte lcd_b = 6
#define LCD_LINEA2 0x40 // Direccion de memoria para la segunda linea
#define LCD_DATO 1
#define LCD_COMANDO 0
#define LCD_CLEAR 0x01
#define LCD_HOME 0x02
#define LCD_DISPLAY_OFF 0x08
#define LCD_DISPLAY_ON 0x0C
#define LCD_CURSOR_ON 0x0E
#define LCD_CURSOR_BLINK 0x0F
#define LCD_CURSOR_SHIFT_RIGHT 0x10
#define LCD_CURSOR_SHIFT_LEFT 0x14
#define LCD_DISPLAY_SHIFT_RIGHT 0x18
#define LCD_DISPLAY_SHIFT_LEFT 0x1C
int lcd_leer( )
{
int valor;
set_tris_a(0x18);
set_tris_b(0xFF);
lcd_rw = 1;
delay_cycles(1);
lcd_enable = 1;
delay_cycles(1);
valor = lcd_b;
lcd_enable = 0;
delay_us(40);
set_tris_b(0x00);
return valor;
}
void lcd_enviar(int dir, int valor)
{
set_tris_a(0x00);
set_tris_b(0x00);
lcd_rs = 0;
while( bit_test(lcd_leer( ),7) );
lcd_rs = dir;
delay_cycles(1);
lcd_rw = 0;
delay_cycles(1);
lcd_enable = 0;
lcd_b = valor;
delay_cycles(1);
lcd_enable = 1;
delay_us(2);
lcd_enable = 0;
delay_us(40);
}
void lcd_init( )
{
int i;
set_tris_a(0x18);
set_tris_b(0x00);
lcd_enable = 0;
lcd_rw = 0;
lcd_rs = 0;
delay_ms(15);
for(i=0; i<3; i++)
{
lcd_enviar(LCD_COMANDO,0x38);
delay_ms(5 );
}
lcd_enviar(LCD_COMANDO,LCD_DISPLAY_ON);
lcd_enviar(LCD_COMANDO,0x06);
lcd_enviar(LCD_COMANDO,LCD_CLEAR);
lcd_enviar(LCD_COMANDO,LCD_HOME);
}
void lcd_gotoxy( byte x, byte y) {
byte dir;
if(y!=1)
dir=LCD_LINEA2;
else
dir=0;
dir+=x-1;
lcd_enviar(LCD_COMANDO,0x80|dir);
}
void lcd_putc( char c) {
switch (c ) {
case "f " : lcd_enviar(LCD_COMANDO,0x01);
delay_ms(2);
break;
case "
" : lcd_gotoxy(1,2); break;
case " " : lcd_enviar(LCD_COMANDO,0x10); break;
default : lcd_enviar(LCD_DATO,c); break;
}
}
char lcd_getc( int x, int y) {
char valor;
lcd_gotoxy(x,y) ;
lcd_rs = 1;
valor = lcd_leer( );
lcd_rs = 0;
return valor;
}
El sitio para descargarlo es el mismo del anterior post...
Suerte!!!