#include <avr/io.h>
#include <inttypes.h>
/* Definir los valores decimales para el displey 7 segmentos */
#define CERO 0xfc
#define UNO 0x60
#define DOS 0xda
#define TRES 0xf2
#define CUATRO 0x66
#define CINCO 0xb6
#define SEIS 0xbe
#define SIETE 0xe0
#define OCHO 0xfe
#define NUEVE 0xf6
#define INC_BUTTON 0x01
#define DEC_BUTTON 0x02
extern void delay_ms(uint8_t);
uint16_t read_ADC(uint8_t);
int main(void) {
/* Configurar como entrada los bits 0 y 1 del puerto C */
// DDRC &= ~((1<<DDC1)|(1<<DDC0)); /* DDRC = xxxx xx00 */
/* Configurar como salida el puerto A */
/* DDRA = 1111 1111 */
DDRA = (1<<DDA7)|(1<<DDA6)|(1<<DDA5)|(1<<DDA4)|(1<<DDA3)|(1<<DDA2)|(1<<DDA1)|(1<<DDA0);
/* Inicializamos el display en 0 */
PORTA = CERO; /* Display 7s muestra 0 */
//uint8_t estado_display = 0, estado_boton = 0, nuevo_estado_boton = 0,
uint8_t display_estados[10] = {CERO, UNO, DOS, TRES, CUATRO, CINCO, SEIS, SIETE, OCHO, NUEVE};
while (1) {
PORTA = display_estados[(uint8_t) read_ADC(0)];
delay_ms(250); // no es necesario
delay_ms(250); // no es necesario
delay_ms(250); // no es necesario
//nuevo_estado_boton = PINC & ((1<<PC1)|(1<<PC0));
//if (nuevo_estado_boton != 0 && estado_boton == 0) {
//if (nuevo_estado_boton == INC_BUTTON && estado_display < 9)
// PORTA = display_estados[++estado_display];
//else if (nuevo_estado_boton == DEC_BUTTON && estado_display > 0)
// PORTA = display_estados[--estado_display];
}
return 0;
//estado_boton = nuevo_estado_boton;
// }
}
uint16_t read_ADC(uint8_t channel) {
ADCSRA = (1 << ADEN) | (3 << ADPS0); // Habilitar el ADC, freq = clk/128
if (channel > 8) {
channel -= 8;
DDRK &= ~(1 << channel); // configurar el pin del canal como entrada
ADCSRB = 1 << MUX5;
}
else
DDRF &= ~(1 << channel); // configurar el pin del canal como entrada
ADMUX = (1 << REFS1) | (1 << REFS0) | (channel << MUX0); // 2.56 Vref, seleccionar el canal
ADCSRA |= 1 << ADSC; // iniciar la conversion
while((ADCSRA & (1 << ADIF)) == 0);
ADCSRA |= 1 << ADIF; // limpiar la bandera
uint16_t lectura = (uint16_t) ADCL;
lectura |= ((uint16_t) ADCH << 8) & 0xff00;
return lectura;
}