Gracias por la info samshiel_pic, voy a probar haber que tal, en si lo que ando haciendo es un sistema donde pueda diferenciar tipos de moneda (estilo teléfono monedero) para el cual necesito un LCD que consume 6 puertos en total, los optoacopladores que son 2 puertos, y los 8 que se consume el teclado de 4x4.
Lo de la resistencia de 4.7K si es una pull up (que la verdad no se que significa xD).
Ahora otro problema que se me presenta es que necesité modificar el programa para reducir algunas lineas porque la verdad el proyecto final me va a consumir casi toda la capacidad del 628, al hacer las variaciones en el código me presentó el problema que no trabaja, aca a continuación les dejo un copy/paste del código haber si me pueden dar una pequeña mano que la verdad no se de donde viene el error.
DEFINE LCD_DREG PORTA
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 6
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 7
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
COL VAR BYTE
FIL VAR BYTE
KEY VAR BYTE
TECLADO:
FOR COL = 0 TO 3 STEP 1
HIGH PORTB(COL)
FOR FIL = 3 TO 7 STEP 1
IF PORTB(FIL) = 1 THEN
IF FIL = 4 THEN KEY = (COL+1) + (FIL-3) + 47
IF FIL = 5 THEN KEY = (COL+1) + (FIL-3) + 49
IF FIL = 6 THEN KEY = (COL+1) + (FIL-3) + 51
IF FIL = 7 THEN
IF COL = 0 THEN KEY = 42
IF COL = 1 THEN KEY = 48
IF COL = 2 THEN KEY = 35
ENDIF
IF COL = 3 THEN
IF FIL = 4 THEN KEY = 65
IF FIL = 5 THEN KEY = 66
IF FIL = 6 THEN KEY = 67
IF FIL = 7 THEN KEY = 68
ENDIF
GOSUB DISPLAY
ENDIF
NEXT FIL
PAUSE 50
LOW PORTA(COL)
PAUSE 50
NEXT COL
GOTO TECLADO
DISPLAY:
LCDOUT $FE, 1, KEY
RETURN
END
Por si se preguntan porque asigno valores en vez de la letra es porque utilizo el código ASCII correspondiente a cada letra, asi acorto muchas lineas de código.
Gracias de nuevo.