Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

24/02/2015 #1


Programa que me saca un entero en LCD con ATmega32
Buenas.
Me encuentro realizando un proyecto en el que quiero sacar un un numero entero por pantalla e incrementarle y decrementarle cuando pulso un botón u otro.

El problema es que no me saca el número que quiero, sino que si lo pulso una vez sale un 21, luego un 47.... y sólo le incremento en 1.
Necesito ayuda.

El programa ese el siguiente:
Código PHP:
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <string.h>


#define RS_On PORTB|=_BV(PB0)
#define    RS_Off       PORTB&&=~_BV(PB0)
#define Enable_ON    PORTB|=_BV(PB2)
#define Enable_Off     PORTB&&=~_BV(PB2)
#define    RW_On         PORTB|=_BV(PB1)
#define RW_Off PORTB&&=~_BV(PB1)

#define Data PORTD

int i=0;

void Port_init(void){
    
DDRB=0X07;
    
DDRD=0XFF;
    
DDRC=0x00;
    
PORTB=0X00;
    
PORTD=0X00;
    
PORTC=0x00;

}

void LCD_init(void){        //INICIALIZA LA PANTALLA LCD
    
    
Data=0x0F;
    
Enable_ON;
    
_delay_ms(1000);
    
Enable_Off;
    
Data=0x00;
    
RS_On;
    
_delay_ms(1000);

}

void writeLcd(char text[15],int tam){
    

RS_On;
                
// recorre el vector char hasta tamaño
    
for(i=0;i<tam;i++){  //asigna en la variable data el caracter que esta en el vector text en la posicion i
        
        
Data=text[i];
        
Enable_ON;
        
_delay_ms(100);
        
Enable_Off;
        
_delay_ms(100);
}
i=0;
Data=0x00;
RS_Off;
}

void ClearLCD(void){            // funcion para limpiar la pantalla
    
Data=0x01;
    
Enable_ON;
    
_delay_ms(100);
    
Enable_Off;
}


int mostrar(){

        
int x=0;
        
while(
PINC!=0x04){
    
        
        if (
PINC==0x01)
        {
            
_delay_ms(10);
            
x=x+1;
                
        }
        
        if(
PINC==0x02){
            
            
_delay_ms(10);
            
x=x-1;
        }
    
        }
    
    return 
x;
    
    
}
    
void escribirentero(int numero){
    
    
char str[50];
    
sprintf(str,"%d",numero);
    
writeLcd(str,2); // Escribe en el LCD
    
_delay_ms(100);
    
//ClearLCD();
    
    
}
int main(void)
{
    
Port_init();
    
LCD_init();
    
int contador=0;
    
int numero=0;
    

    while(
1)
    {
        while(
contador==0){  //inicializa con la palabra Tiempos
            
            
               
numero=mostrar();
               
               
_delay_ms(1000);
               
               
escribirentero(numero);
               
               
_delay_ms(1000);
            
               
ClearLCD();
            
            
//contador=contador+1;
        
    
}
}

26/04/2015 #2

Avatar de hamster

Puede que te sirva, algo como esto:
con un atmega32 y un LCD, simulación PROTEUS... switch NEXT, BACK.

incrementa, decrementa un INT.
27/04/2015 #3

Avatar de JoaquinFerrero

Necesitas esperar a que el botón deje de estar pulsado. Si no, estará contando varias veces mientras lo tienes pulsado.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.