TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: ferbarriga 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
-
Gracias ferbarriga, seguro que a mas de uno le viene bien.
-
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
-
hola!.. me alegro que les sirva..mañana pongo un par de programas mas. saludoss!