Autor Tema: ejm teclado matricial + lcd 2 x 16  (Leído 2730 veces)

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

Desconectado ferbarriga

  • PIC10
  • *
  • Mensajes: 6
ejm teclado matricial + lcd 2 x 16
« en: 11 de Julio de 2007, 11:53:36 »
hola gente, soy nuevo en esto, pero capas que a algun principiante como yo le sirvan estos ejemplos. El siguiente programa permite visualizar en el modulo de LCD 4 digitos de un teclado matricial de 3 x 4. Espero que le sirva a alguien. saludoss :-/



cont VAR BYTE
aux VAR BYTE
tecla  VAR  BYTE
d1 VAR BYTE
d2 VAR BYTE
d3 VAR BYTE
d4 VAR BYTE

cont = 0
d1=0
d2=0
d3=0
d4=0

TRISB.0=1
TRISB.1=1
TRISB.2=1
TRISB.4=0
TRISB.5=0
TRISB.6=0
TRISB.7=0
Pause 200
LCDOut $fe,1, " MATRICIAL MAS.."
LCDOut $fe,$C0, " MODULO DE LCD."
Pause 2000
LCDOut $FE,1, "De 4 digitos"
Pause 1500

principio:
tecla = 0

Low  PORTB.4
High PORTB.5
High PORTB.6
High PORTB.7

      IF PORTB.1=0 AND PORTB.2=1 AND PORTB.0=1 Then
         tecla = "1"
         GoTo enviar
      EndIF
      
      IF PORTB.1=1 AND PORTB.2=0 AND PORTB.0=1 Then
         tecla = "2"
         GoTo enviar
      EndIF
            
      IF PORTB.1=1 AND PORTB.2=1 AND PORTB.0=0 Then
         tecla = "3"
         GoTo enviar
      EndIF
                  
High  PORTB.4
Low PORTB.5
High PORTB.6
High PORTB.7

      IF PORTB.1=0 AND PORTB.2=1 AND PORTB.0=1 Then
         tecla ="4"
         GoTo enviar
      EndIF
      
      IF PORTB.1=1 AND PORTB.2=0 AND PORTB.0=1 Then
         tecla = "5"
         GoTo enviar
      EndIF
            
      IF PORTB.1=1 AND PORTB.2=1 AND PORTB.0=0 Then
         tecla = "6"
         GoTo enviar
      EndIF
      
High PORTB.4
High PORTB.5
Low  PORTB.6
High PORTB.7

      IF PORTB.1=0 AND PORTB.2=1 AND PORTB.0=1 Then
         tecla ="7"
         GoTo enviar
      EndIF
      
      IF PORTB.1=1 AND PORTB.2=0 AND PORTB.0=1 Then
         tecla = "8"
         GoTo enviar
      EndIF
            
      IF PORTB.1=1 AND PORTB.2=1 AND PORTB.0=0 Then
         tecla = "9"
         GoTo enviar
      EndIF
      
High PORTB.4
High PORTB.5
High PORTB.6
Low  PORTB.7

      IF PORTB.1=0 AND PORTB.2=1 AND PORTB.0=1 Then
         tecla ="*"
         GoTo enviar
      EndIF
      
      IF PORTB.1=1 AND PORTB.2=0 AND PORTB.0=1 Then
         tecla = "0"
         GoTo enviar
      EndIF
            
      IF PORTB.1=1 AND PORTB.2=1 AND PORTB.0=0 Then
         tecla = "#"
         GoTo enviar
      EndIF

GoTo principio



enviar:

IF cont   = 0 Then
Pause 200
LCDOut $fe,1, tecla
cont = cont + 1
GoTo principio
EndIF

IF cont   = 1 Then
Pause 200
LCDOut tecla
cont = cont +1 
GoTo principio
EndIF

IF cont   = 2 Then
Pause 200
LCDOut tecla
cont = cont +1 
GoTo principio
EndIF

IF cont   = 3 Then
Pause 200
LCDOut tecla
cont = cont +1 
GoTo principio
EndIF

   
IF cont= 4 Then
   LCDOut $fe,1,"Fin de la prueba"
   LCDOut $fe,$c0,"y funciono OK!!"
 
EndIF
Pause 1000
   
GoTo principio


End

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: ejm teclado matricial + lcd 2 x 16
« Respuesta #1 en: 11 de Julio de 2007, 15:58:23 »
Gracias ferbarriga, seguro que a mas de uno le viene bien.
Saludos desde Granada, España.

Desconectado frape

  • PIC10
  • *
  • Mensajes: 21
Re: ejm teclado matricial + lcd 2 x 16
« Respuesta #2 en: 11 de Julio de 2007, 16:43:09 »
Hola, me alegro que hayas conseguido hacer andar ese codigo, yo aunque llevo 2 años o mas con esto de la programacion aun estoy muy muy verde, probablemente porque mis estudios y conocimientos no tienen nada que ver con este mundo, pero bien por falta de base academica, edad tardia en la que he empezado ya que a los 47 años no creo que haya mucha gente que sin tener relacion con este mundo se proponga programar, o simplemente porque no tengo capacidad de asimilacion(no todos valemos), el caso es que por necesidad laboral y de superacion aqui estoy peleandome con estos bichos que  lo poco que he aprendido me ha costado y me cuesta horrores, y sin ser quien para dar consejos me gustaria comentar lo siguiente:

Cuando empezé en esto, como muchos pretendia hacer mi codigo entendible(al menos para mi) y acostumbraba a escribir decenas y decenas de lineas de codigo ya que uno al ser novato piensa linealmente, quiero decir que segun uno lo va pensando en la cabeza va prolongando y repitiendo codigo y mas codigo inecesariamente con lo que el aprendizaje se hace largo y pesado, incluso por momentos nos perdemos en nuestro propio codigo, de la lectura de manuales, y creo que en todos lo recalcan me hizo ver que no es practico trabajar con el nombre de los pines es mucho mas facil declarar variable para ellos y como en este caso trabajar con A, B y C para las columnas y UNO,DOS,TRES,CUATRO para las filas, que recordar donde he conectado portb.1.

Aqui tienes un ejemplo de uso de una rutina con codigo que seguro en cuanto veas entenderas perfectamente y mas resumido ya que con el codigo que presentas al hacerse mas pèsado su seguimiento limitas posibles respuestas.



Teclado:   
    v = 0
        lcdout $fe,1," Teclee  Codigo :"
    GOSUB BARRIDO
DIG1 = TECLA 
    PAUSE 200
v = 1
    GOSUB BARRIDO
DIG2 = TECLA
    PAUSE 200
v = 2
    GOSUB BARRIDO
DIG3 = TECLA
    PAUSE 200
v = 3
dig1=dig1*100
dig2=dig2*10
codigo=dig1+dig2+dig3
       
       lcdout $fe,1,codigo
    pause 500
   
BARRIDO:
  pause 200
HIGH A : HIGH B : HIGH C   
       LOW A                                               
    IF UNO   = 0 THEN  LCDOUT $FE,$C9+v, "1":TECLA = 1 :RETURN
    IF DOS   = 0 THEN  LCDOUT $FE,$C9+v, "4":TECLA = 4 :RETURN
    IF TRES  = 0 THEN  LCDOUT $FE,$C9+v, "7":TECLA = 7 :RETURN
    IF cuatro = 0 THEN goto Teclado '*
     
       HIGH A                                             
       LOW B                                             
    IF UNO   = 0 THEN  LCDOUT $FE,$C9+v,"2" :TECLA = 2 :RETURN
    IF DOS   = 0 THEN  LCDOUT $FE,$C9+v,"5" :TECLA = 5 :RETURN
    IF TRES  = 0 THEN  LCDOUT $FE,$C9+v,"8" :TECLA = 8 :RETURN
    IF cuatro = 0 THEN  LCDOUT $FE,$C9+v,"0" :TECLA = 0:RETURN
       HIGH B                                               
       LOW C                                                 
    IF UNO   = 0 THEN  LCDOUT $FE,$C9+v,"3" :TECLA = 3 :RETURN
    IF DOS   = 0 THEN  LCDOUT $FE,$C9+v,"6" :TECLA = 6 :RETURN
    IF TRES  = 0 THEN  LCDOUT $FE,$C9+v,"9" :TECLA = 9 :RETURN
    IF cuatro = 0 THEN
    high c
    goto Inicio

Desconectado ferbarriga

  • PIC10
  • *
  • Mensajes: 6
Re: ejm teclado matricial + lcd 2 x 16
« Respuesta #3 en: 11 de Julio de 2007, 21:28:22 »
hola!.. me alegro que les sirva..mañana pongo un par de programas mas. saludoss!