Autor Tema: Crear teclado con pulsadores, y LCD  (Leído 2505 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado zorro31

  • PIC10
  • *
  • Mensajes: 5
Crear teclado con pulsadores, y LCD
« en: 23 de Febrero de 2006, 22:22:00 »
Holas amigos, bueno estoy tratando de crear un teclado, con pulsadores, para asi poder escribir en el LCD (con el 16f84 y PICBasicPRo), o algo asi, no si me pueden poner ejemplos de como hacerlo, o en todo caso ayundeme, desde el principio.
Gracias de antemano
JoseCArlos

Desconectado doppel

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1534
RE: Crear teclado con pulsadores, y LCD
« Respuesta #1 en: 23 de Febrero de 2006, 22:35:00 »
HOla
usa el buscador del foro hay muchos ejemplos desarrollados sobre eso!!

saludosGiño
" Para ser exitoso no tienes que hacer cosas extraordinarias. Haz cosas ordinarias, extraordinariamente bien "

Desconectado zorro31

  • PIC10
  • *
  • Mensajes: 5
RE: Crear teclado con pulsadores, y LCD
« Respuesta #2 en: 24 de Febrero de 2006, 18:32:00 »
Holas, de nuevo yo, bueno despues de miles de horas de lucha, y lectura, jeje me salio, pero aunque me parece que es un poco largo el codigo, pues ni modo funciona, haber si pueden hacer un codigo mas pequeño, nos vemos
Aqui la imagen

Aqui el codigo:
Define LCD_DREG PORTB    " direcciona el bus de dato para el puerto B
DEFINE LCD_DBIT 0           "le indica con que pin del puerto comienza
DEFINE LCD_RSREG PORTA      "le indica que la escritura y lectura se define por el puerto b
DEFINE LCD_RSBIT 0          "le indica por cual pin, se va selecionar escritura o lectura
DEFINE LCD_EREG PORTA       "indica por cual puerto se va selecciona el enabled
DEFINE LCD_EBIT 1           "indica que pin va selecionar ENABLED del puerto B
DEFINE LCD_BITS 4           "tamaño del bus de datos 4 o 8
DEFINE LCD_LINES 2    
     " numero de lineas del LCD
TRISB=%11110000   " configura pines del puerto b
c1 var byte       " daclara varible para ayudar la verificacion de la primera puslsacion
c1=1
COL1 VAR BYTE     " variables de la columnas
COL2 VAR BYTE
COL3 VAR BYTE
COL4 VAR BYTE
                  " valores de las columnas
COL1=254          "1111 1110
COL2=253          "1111 1101
COL3=251          "1111 1011
COL4=247          "1111 0111

inicio:
            " BUSCAMOS CAMBIOS EN LA PRIMERA COLUMNA
            portb=COL1
            if portb = 238 THEN       " prueba si el puerto b a cambiado, para detectar la tecla
                                       " 11101110
                                       
                IF c1<2 then            " COnndicional para verificar el primer
                    LCDOUT $fe,1, "1"   " boton del teclado, si es primera tecla
                    PAUSE 400           " limpia  la pantalla del LCD
                else                    " caso contrario, lo imprimimos el caracter normalmente
                    LCDOUT  "1"
                    PAUSE 400
                endif  
                c1=c1+1                " aumentamos la variable C1, asi nunca mas
                                       " se vuelve a limpiar la pantalla
            ENDIF
            if portb= 222 THEN
                IF c1<2 then
                    LCDOUT  $fe,1, "4"
                    PAUSE 400
                else
                    LCDOUT "4"
                    PAUSE 400
                endif  
                c1=c1+1
               
            ENDIF
            if portb= 190 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "7"
                    PAUSE 400
                else
                    LCDOUT "7"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
           
            if portb= 126 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "*"
                    PAUSE 400
                else
                    LCDOUT "*"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
                       
            " BUSCAMOS CAMBIOS EN LA SEGUNDA COLUMNA
            portb=COL2
            if portb = %11101101 THEN
                IF c1<2 then
                    LCDOUT $FE,1, "2"
                    PAUSE 400
                else
                    LCDOUT "2"
                    PAUSE 400
                endif  
                c1=c1+1
               " c2=c2+1
            ENDIF
            if portb = %11011101 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "5"
                    PAUSE 400
                else
                    LCDOUT  "5"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
            if portb = %10111101 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "8"
                    PAUSE 400
                else
                    LCDOUT "8"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
            if portb = %1111101 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "0"
                    PAUSE 400
                else
                    LCDOUT "0"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
           
            " BUSCAMOS CAMBIOS EN LA TERCERA COLUMNA
            portb=COL3
            if portb = %11101011 THEN
                IF c1<2 then
                    LCDOUT $FE,1, "3"
                    PAUSE 400
                else
                    LCDOUT "3"
                    PAUSE 400
                endif  
                c1=c1+1
               " c2=c2+1
            ENDIF
            if portb = %11011011 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "6"
                    PAUSE 400
                else
                    LCDOUT  "6"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
            if portb = %10111011 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "9"
                    PAUSE 400
                else
                    LCDOUT "9"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
            if portb = %1111011 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "#"
                    PAUSE 400
                else
                    LCDOUT "#"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
           
            " BUSCAMOS CAMBIOS EN LA CUARTA COLUMNA
            portb=COL4
            if portb = %11100111 THEN
                IF c1<2 then
                    LCDOUT $FE,1, "A"
                    PAUSE 400
                else
                    LCDOUT "A"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
            if portb = %11010111 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "B"
                    PAUSE 400
                else
                    LCDOUT  "B"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
            if portb = %10110111 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "C"
                    PAUSE 400
                else
                    LCDOUT "C"
                    PAUSE 400
                endif  
                c1=c1+1
            ENDIF
            if portb = %1110111 THEN
                IF c1<2 then
                    LCDOUT  $FE,1, "D"
                    PAUSE 400
                else
                    LCDOUT "D"
                    PAUSE 400
                endif  
                c1=c1+1
        GOTO INICIO

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Crear teclado con pulsadores, y LCD
« Respuesta #3 en: 24 de Febrero de 2006, 21:40:00 »
Hola:

Amigo zorro31 hubiera sido mas facil y rapido si hubieras posteado en el subforo adecuado, en el subforo de Pic Basic y proton hay ejemplos con teclado matricial de 4x4 y hay ritinas para que las puedas revisar.

mira este codigo:

Codigo:
BARRIDO:    
        LOW A                      
    IF UNO    = 0 THEN lcdout $FE,$C0," 7"  
    IF DOS    = 0 THEN lcdout $FE,$C0," 8"    
    IF TRES   = 0 THEN lcdout $FE,$C0," 9"
    IF CUATRO = 0 THEN lcdout $FE,$C0,"10"
        HIGH A                      
        LOW B                      
    IF UNO    = 0 THEN lcdout $FE,$C0," 4"    
    IF DOS    = 0 THEN lcdout $FE,$C0," 5"
    IF TRES   = 0 THEN lcdout $FE,$C0," 6"
    IF CUATRO = 0 THEN lcdout $FE,$C0,"11"
        HIGH B                      
        LOW C                      
    IF UNO    = 0 THEN lcdout $FE,$C0," 1"
    IF DOS    = 0 THEN lcdout $FE,$C0," 2"
    IF TRES   = 0 THEN lcdout $FE,$C0," 3"
    IF CUATRO = 0 THEN lcdout $FE,$C0,"12"
        HIGH C                      
        LOW D                      
    IF UNO    = 0 THEN lcdout $FE,$C0,"14"
    IF DOS    = 0 THEN lcdout $FE,$C0," 0"  
    IF TRES   = 0 THEN lcdout $FE,$C0,"15"
    IF CUATRO = 0 THEN lcdout $FE,$C0,"13"
        HIGH D                      
    pause 10                      
    GOTO BARRIDO                
END


Es mas corto que el otro y muy facil de entender, tambien puedes revisar aqui esquemas y mas cosas:

http://miarroba.com/foros/ver.php?foroid=8826&temaid=4180638&pag=4

Si quieres algo mas corto pero un poco mas complejo mira esto:

Codigo:
getkey:
        PAUSE 50                "Debounce key-input
getkeyu:" Wait for all keys up
        PORTB = 0            " All output-pins low
        TRISB = $f0          " Bottom 4-pins out, top 4-pins in
        IF ((PORTB >> 4) != $f) THEN getkeyu"If keys down, loop
        PAUSE 50             " Debounce key-input

getkeyp:" Wait for keypress
        FOR row = 0 TO 3        " 4 rows in keypad
            PORTB = 0           " All output-pins low
            TRISB = (DCD row) ^ $ff " Set one row pin to output
            col = PORTB >> 4    " Read columns
            IF col != $f THEN gotkey" If any keydown, exit
        NEXT row
        GOTO getkeyp            " No keys down, go look again

gotkey: " Change row and column to key number 1 - 16
        key = (row * 4) + (NCD (col ^ $f))
        "NOTE: for 12-key keypad, change to key = (row * 3)
        RETURN                  " Subroutine over
       
        END

Lo puedes revisar aqui:

http://www.rentron.com/serkey16.htm

SUERTE...!!! Sonrisa Gigante

Desconectado zorro31

  • PIC10
  • *
  • Mensajes: 5
RE: Crear teclado con pulsadores, y LCD
« Respuesta #4 en: 25 de Febrero de 2006, 14:14:00 »
Pues muchas gracias hermano, mmm, la proxima lo tendre presente, ahora a seguie en le proxima, desafio (recien empiezo), un sistemilla de acceso con pass y LCD, para un puerta, jejeje, haber como me sale, nos vemos

JoseCarlos

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Crear teclado con pulsadores, y LCD
« Respuesta #5 en: 25 de Febrero de 2006, 22:23:00 »
Hola:

Zorro31, cual es la idea, que quieres hacer...? lo pregunto porque en el subforo de PBP hay un programa hecho por batman123 para accionar "algo" con una clave de 5 digitos si mal no recuerdo, asi qeu eso te podría servir como inicio.