Cómo borrar lcd con un botón en atmega32

0

escribo este código para atmega32 en el que PORTD is out put to the LCD y PIN0 of PORTA is an input , que quiero activar con un botón. Este es mi código (principal):

void main(void)
{
    PORTA=0x00;
    DDRA=0xFE;
    PORTD=0x00;
    DDRD=0x00;
lcd_init();
lcd_clear();
lcd_goto(0,0);
lcd_puts("Emad Helmi") ;    
if(PORTA.0 == 0)
{
    lcd_clear() ;    
}
}

He definido las funciones anteriores a mi principal.pero con este código, en Proteus siempre que presiono el botón, no pasa nada y el LCD no se ha borrado. ¿Cómo puedo hacer esto?

    
pregunta Emad Helmi

1 respuesta

1

Hay muchos problemas con tu código.

Primero que nada, solo verificas la condición una vez, es decir, cuando comienzas a ejecutar el código. Así que para eso estoy agregando un bucle while (1).

Segundo, ya has puesto tu PORTA = 0x00, lo que significa que ya les has asignado un BAJO. Si ya los ha hecho BAJOS, parece que no tiene sentido verificar su estado.

No puedo ver el archivo de imagen proteus que adjuntaste en los comentarios anteriores. Entonces, estoy asumiendo que el interruptor conecta el pin a tierra. Si el interruptor se conecta a 5V, cambie la condición if a PINA.0 == 1;

void main(void)
{
    //PORTA=0x00; //If you already made them LOW, there won't be
    DDRA=0xFE;    //any point of checking their status.
    PORTD=0x00;
    DDRD=0x00;
    lcd_init();
    lcd_clear();
    lcd_goto(0,0);
    lcd_puts("Emad Helmi") ;    
    while (1)
    {
        if(PINA.0 == 0) //whenever you want to read the status
        {               //you access the PIN register and not PORT
            lcd_clear() ;    
        }
    }
}

Si aún no funciona, intente acceder a PINA como un todo. Cambie la condición if a

if  (PINA == 0x00)

pero si lo hace, recuerde cambiar los PUERTOS individuales a BAJO. es decir,

PORTA.1 = 0; 

y así sucesivamente a PORTA.7.

    
respondido por el Rohan Narlanka

Lea otras preguntas en las etiquetas