¿No deberías poner case '1' (con apóstrofes)?
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúPrivate Function Existe(nombre As String) As Boolean
On Error Resume Next
Open nombre For Input As #1
If Err.Number Then Exit Function
Close #1
Existe = True
End Function
Private Function RaTok338InStr(ByVal Start As Long, ByVal s1 As String, ByVal s2 As String) As Long
Dim pos1 As Long, long1 As Long, long2 As Long, lim As Long, c As String
If Start And &H80000000 Then Start = -Start
long1 = Len(s1)
long2 = Len(s2)
If long1 = 0 Or long2 = 0 Or Start > long1 Or Start = 0 Or long2 > long1 Then
RaTok338InStr = -1
Exit Function
End If
lim = long1 - long2 + 1
c = Mid(s2, 1, 1)
For pos1 = Start To lim
If Mid(s1, pos1, 1) = c Then
If Mid(s1, pos1, long2) = s2 Then
RaTok338InStr = pos1
Exit Function
End If
End If
Next
End Function
Private Function strinstr(ByVal start As Long, ByVal s1 As String, ByVal s2 As String) As Long
Dim pos1 As Long, pos2 As Long, long1 As Long, long2 As Long
long1 = Len(s1)
long2 = Len(s2)
pos2 = 1
For pos1 = start To long1
If Mid(s1, pos1, 1) = Mid(s2, pos2, 1) Then
pos2 = pos2 + 1
If pos2 > long2 Then
strinstr = pos1 - long2 + 1
Exit Function
End If
Else
pos2 = 1
End If
Next
End Function
/***************** teclado.h ******************/
#byte PORTA = getenv("sfr:PORTA")
#byte TRISA = getenv("sfr:TRISA")
#byte PORTB = getenv("sfr:PORTB")
#byte TRISB = getenv("sfr:TRISB")
#byte PORTC = getenv("sfr:PORTC")
#byte TRISC = getenv("sfr:TRISC")
#byte PORTD = getenv("sfr:PORTD")
#byte TRISD = getenv("sfr:TRISD")
#byte PORTE = getenv("sfr:PORTE")
#byte TRISE = getenv("sfr:TRISE")
/***************************************/
#define PORT_fila0 PORTC
#define TRIS_fila0 TRISC
#define fila0 0
#define PORT_fila1 PORTC
#define TRIS_fila1 TRISC
#define fila1 1
#define PORT_fila2 PORTC
#define TRIS_fila2 TRISC
#define fila2 2
#define PORT_fila3 PORTC
#define TRIS_fila3 TRISC
#define fila3 3
#define PORT_columna0 PORTC
#define TRIS_columna0 TRISC
#define columna0 4
#define PORT_columna1 PORTC
#define TRIS_columna1 TRISC
#define columna1 5
#define PORT_columna2 PORTC
#define TRIS_columna2 TRISC
#define columna2 6
#define PORT_columna3 PORTC
#define TRIS_columna3 TRISC
#define columna3 7
/*************************************************/
#ifdef teclado_activoalto
#define es_activo(r,b) bit_test(r,b)
#define activar(r,b) bit_set(r,b)
#define desactivar(r,b) bit_clear(r,b)
#else
#ifdef teclado_activobajo
#define es_activo(r,b) !bit_test(r,b)
#define activar(r,b) bit_clear(r,b)
#define desactivar(r,b) bit_set(r,b)
#else
#error "Debe declarar la lógica del teclado: activo alto o activo bajo"
#endif
#endif
/***************************************************/
void teclado_inicializa(void)
{
// Inicializa los latches de salida para las filas.
activar(PORT_fila0,fila0);
activar(PORT_fila1,fila1);
activar(PORT_fila2,fila2);
activar(PORT_fila3,fila3);
// Configura las filas como salidas.
bit_clear(TRIS_fila0,fila0);
bit_clear(TRIS_fila1,fila1);
bit_clear(TRIS_fila2,fila2);
bit_clear(TRIS_fila3,fila3);
// Configura las columnas como entradas
bit_set(TRIS_columna0,columna0);
bit_set(TRIS_columna1,columna1);
bit_set(TRIS_columna2,columna2);
bit_set(TRIS_columna3,columna3);
}
void teclado_activafilas(void)
{
activar(PORT_fila0,fila0);
activar(PORT_fila1,fila1);
activar(PORT_fila2,fila2);
activar(PORT_fila3,fila3);
}
int8 teclado_examinacolumnas(void)
{
if(es_activo(PORT_columna0,columna0)) return 0;
if(es_activo(PORT_columna1,columna1)) return 1;
if(es_activo(PORT_columna2,columna2)) return 2;
if(es_activo(PORT_columna3,columna3)) return 3;
return 4;
}
char teclado_lee(void)
{
const char teclas[16]={'0', '1', '2', '3',
'4', '5', '6', '7',
'8', '9', 'A', 'B',
'C', 'D', 'E', 'F'};
int8 i;
teclado_activafilas();
for(i=0; i<20; i++)
{
if(teclado_examinacolumnas()>3) return 0;
delay_ms(1);
}
desactivar(PORT_fila3,fila3);
desactivar(PORT_fila2,fila2);
desactivar(PORT_fila1,fila1);
if((i=teclado_examinacolumnas())<4) return(teclas[i]);
desactivar(PORT_fila0,fila0);
activar(PORT_fila1,fila1);
if((i=teclado_examinacolumnas())<4) return(teclas[i+4]);
desactivar(PORT_fila1,fila1);
activar(PORT_fila2,fila2);
if((i=teclado_examinacolumnas())<4) return(teclas[i+8]);
desactivar(PORT_fila2,fila2);
activar(PORT_fila3,fila3);
if((i=teclado_examinacolumnas())<4) return(teclas[i+12]);
desactivar(PORT_fila3,fila3);
return 0;
}
void teclado_esperalibere(void)
{
teclado_activafilas();
while(teclado_examinacolumnas()<4);
}
#use delay(clock=xxxx)
#define teclado_activoalto
#define teclado_activobajo
#define PORT_fila0 PORTA
#define TRIS_fila0 TRISA
#define fila0 5
#include "16f877a.h"
#use delay(clock=20M)
#define teclado_activobajo
#include "teclado.h"
#define use_portb_lcd
#include "lcd.c"
int main(void)
{
char tecla;
teclado_inicializa();
lcd_init();
while(1)
{
if(tecla=teclado_lee())
{
lcd_putc(tecla);
teclado_esperalibere();
}
}
}
struct lcd_pin_map { // This structure is overlayed
BOOLEAN enable; // on to an I/O port to gain
BOOLEAN rs; // access to the LCD pins.
BOOLEAN rw; // The bits are allocated from
BOOLEAN unused; // low order up. ENABLE will
int data : 4; // be pin B0.
} lcd;