Red de conocimiento informático - Computadora portátil - Programa LED de control ADC del microcontrolador AVR (lenguaje c)

Programa LED de control ADC del microcontrolador AVR (lenguaje c)

Escribe uno para ti. De todos modos, es un programa simple, implementado usando mega8. Puedes cambiar el modelo del microcontrolador, simplemente cambia el número de vectores de interrupción:

# include ltiom8v.h gt

# include ltmacros.h gt

#define led 1 _ ON PORTB | = BIT(1)

#define LED1_OFF port amp= ~Bit(1)

//Puedes escribir siete luces más o más.

#Definir carácter uchar sin signo

#Definir uint entero sin signo

uint ADC _ count = 0 //Controla el recuento de velocidad de conversión de AD.

uint a _ time = 0; //Se utiliza para el recuento de filtros digitales AD.

uchar mode = 0; //Se utiliza para asignar el resultado del procesamiento AD.

void port_init(void)

{

DDRB = 0x ff;

PORTB = 0x00

DDRC = 0x 00;

PORTC = 0xff

DDRD = 0xf 0;

PORTD = 0x00

}

//División de frecuencia del temporizador: 64

//Establecer valor de temporización: 1 ms.

//Valor de tiempo real: 1 milisegundo (0.0)

temporizador de vacío 0_init(void)

{

TCCR0 = 0x00 / /Detener

TCNT0 = 0x83 //Establecer recuento

TIMSK | = 0x 01;

TCCR0 = 0x03 //Iniciar temporizador

}

#pragma Temporizador del controlador de interrupciones 0_ovf_isr: 10

temporizador de vacío 0_ovf_isr(void)

{

TCNT0 = 0x83 //Recargar valor del contador

ADC _ count;

If(adc_count==50) //Se utiliza para controlar la velocidad de conversión de AD.

{

ADC_count = 0

ADCSRA = 0xCF

}

Otro

{

ADCSRA = 0x00

}

}

void adc_init(void)

{

ADCSRA = 0x00//Deshabilitar conversión de AD

ADMUX = 0x07

SFIOR | = 0x 00;

ACSR = 0x 80 ;//Deshabilitar comparador analógico

ADCSRA = 0xCF

//ADCSRA = 0x ed;

}

Entero sin signo adc_calc (void )

{

//Calcular el voltaje real

Valor int largo sin signo = 0;

Voltaje int sin signo = 0; /La unidad de voltaje es (mV)

Value = ADCL; //Lee primero el bit bajo

value | =(int)ADCH lt8; posición alta.

Voltaje = (valor * 5000)/1023;

ad_flag = 1;

Voltaje de retorno

}

p>

//Toma el promedio de AD.

Manejador de interrupciones #pragma adc_isr: 15

Adc_isr vacío (vacío)

{

// Interrumpir el procesamiento una vez completada la conversión

Voltaje int sin signo 1;

a _ tiempo;

if(a _ tiempo lt; 8)

{ voltaje 1 = ADC _ calc(); Voltaje 2 = Voltaje 2 Voltaje 1;}//Filtrado digital

while(a_time==8)

{

a _ time = 0; voltaje = voltaje 2/8; voltaje 2 = 0;

Si ((voltaje) lt1130){ Dian Liang = 0;}

Si ((voltaje gt= 1130) ) amp; amp(voltaje lt1300)){ modo = 1;}

if ((voltaje gt= 1300); amp(voltaje lt1560)){ modo = 2;}

if ((voltaje gt = 1560) amp; amp (voltaje lt1750)) { modo = 3;

if ((voltaje gt = 1750) amp; amp (voltaje lt1950)) { modo = 4; }

if ((voltaje gt= 1950) amp; amp(voltaje lt2150)){ modo = 5;}

if ((voltaje gt= 2150); amp(voltaje lt2341 )){ modo = 6;}

Si ((voltaje gt= 2341) amp; amp(voltaje lt2560)){ modo = 7;}

Si ((voltaje gt = 2560) amp; amp(voltaje lt2710)){ modo = 8;}

if ((voltaje gt= 2710); amp(voltaje lt2870)){ modo = 9;}

}

else { mode = 0;}

}

void LED _ disp(void)//Se utiliza para controlar la pantalla LED.

{

Interruptor (modo)

{

Caso 0: /*Escribe aquí si la luz que deseas controlar está encendida o apagado Off*/; Break;

Caso 1: /*Escribe aquí si la luz que deseas controlar está encendida o apagada*/; Escribe aquí si la luz que deseas controlar está encendida o apagada*/; Break;

Caso 3: /*Escribe aquí si la luz que deseas controlar está encendida o apagada*/; /p>

Caso 3 4: /*Escribe aquí si la luz que deseas controlar está encendida o apagada*/; break;

Caso 5: /*Escribe aquí si la luz que deseas controlar el control está encendido o apagado*/; break;

Caso 6: /*Escribe aquí si la luz que deseas controlar está encendida o apagada*/; /*Escribe aquí si la luz que deseas controlar está encendida o apagada*/; Break;

Caso 8: /*Escribe aquí si la luz que deseas controlar está encendida o apagada*/;

Caso 9: /*En Escribe aquí si la luz que deseas controlar está encendida o apagada */

Por defecto: break

}

}dispositivo de inicialización nulo (void)

{

CLI(); //Deshabilitar todas las interrupciones

MCUCR = 0x00

MCUCSR = 0x80 //Deshabilitar JTAG

GICR = 0x 00;

Timer0_init();

port_init();

ADC_init();

//SEI(); //Activar interrupción global

}

Administrador no válido (no válido)

{

init _ dispositivos();

mientras(1)

{

LED _ DISP();

}

}