Cordial Saludo a todo los que hacen parte de esta comunidad que ha sido de mucha utilidad para todos....
Mi consulta es la siguiente:
Estoy utilizando un pic 16f877 , tengo tres pulsadores(puertos A) y tres leds(puertos B). Cada pulsador debe pagar y encender un led respectivamente, a su vez cuando encieda un led debe aparecer el mensaje en un lcd de 16x4 de "led1 on", y cuando lo apague "led1 off"; y asi sucesivamente con los demás leds. Tomando parte del codigo de BigLuis, logré aplicar el problema de rebote....creo.
Sin embargo me encuentro con las siguientes dificultades:
1. No he podido resolver lo siguiente: cuando le dé click en el pulsaodr led0 se enciende , me salga su estado de on en el lcd. Si le doy nuevamente click en el mismo pulsador debe se apagarse el led0 y imprima su estado en el lcd de su estado en off y se mantenga el mensaje de led0 on u off, led1 on u offí.
Si por ejemplo, le doy click en otro led2, y cambie su estado a on, debe mantener en pantalla si el led0 esta en on u off, o el led1 está en off u on, y asi sucesivamente. Es decir, no debe cambiar el estado en el que se encuentran los demas leds, solo debe cambiar el led asociado a cada pulsador en sus dos estado "on" y "off".
gracias
este es mi codigo:
Device =16F877
Xtal = 4
Dim sec As Byte
Dim cont1 As Byte
Dim aux As Byte
Symbol uno=PORTA.0
Symbol dos=PORTA.1
Symbol tres=PORTA.2
Symbol led0=PORTB.0
Symbol led1=PORTB.1
Symbol led2=PORTB.2
Input PORTA
Output PORTB
LCD_DTPin = PORTD.4
LCD_RSPin = PORTD.2
LCD_ENPin = PORTD.3
LCD_Interface = 4
LCD_Lines = 2
LCD_Type = 0
All_Digital = On
TRISB=0
Low PORTB
pantalla:
Cls
Print At 2,1, "led0 : ON OFF "
Print At 3,-3, "led1 : ON OFF "
Print At 4,-3, "led2 : ON OFF "
rebote:
'PORTA=1
While PORTA=0 'mientras no presionen ningun pulsador el PIC se mantendra en este bucle, hasta que se presionen alguno de ellos
Wend
DelayMS 40 'Tiempo necesario para evitar rebotes
aux = PORTA ^ aux 'recordemos que 1 xor 1=0, 0 xor 1 = 1 y 0 xor 0 = 0, se encenderian los pines que estan apagados y apagaria los encendidos.
'es decir al presionar un pulsador se produce un cambio de estado en las salidas
If (aux.0+aux.1+aux.2)<=3 Then
'Contamos cuantas salidas deberian estar activas, si son menos de 2.
PORTB=aux 'En el puerto B se encenderan los pines necesarios
Else 'de lo contrario
aux=PORTB
'PORTB=0 'se guradara el estado anterior de PORTB en aux
End If
While PORTA<>0 'El PIC se mantendra en este bucle hasta que se suelten todos los pulsadores.
Wend
inicio:
'If PORTA.0=1 and porta.1=1 and porta.2=1 Then
If uno=0 And dos=0 And tres=0 Then
GoTo inicio
ElseIf uno=1 And dos=0 And tres=0 Then
GoTo op1
ElseIf uno=0 And dos=1 And tres=0 Then
GoTo op2
ElseIf uno=0 And dos=0 And tres=1 Then
GoTo op3
EndIf
'GoTo inicio
op1:
PORTB.0=1
PORTB.1=0
PORTB.2=0
'if portb.0=1 then
Print At 2,1, "led0 :-ON- OFF "
Print At 3,-3, "led1 : ON -OFF-"
Print At 4,-3, "led2 : ON -OFF-"
GoTo inicio
op2:
PORTB.0=0
PORTB.1=1
PORTB.2=0
Print At 2,1, "led0: ON OFF "
Print At 3,-3, "led1:-ON- OFF "
Print At 4,-3, "led2 : ON -OFF-"
DelayMS 200
GoTo inicio
op3:
PORTB.0=0
PORTB.1=0
PORTB.2=1
Print At 2,1, "led0 : ON -OFF- "
Print At 3,-3, "led1 : ON -OFF- "
Print At 4,-3, "led2 :-ON- OFF "
DelayMS 200
GoTo inicio