Autor Tema: Duda con puladores, led, y lcd.  (Leído 1522 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado ubvredes

  • PIC10
  • *
  • Mensajes: 4
Duda con puladores, led, y lcd.
« en: 19 de Abril de 2012, 15:39:25 »

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