Programa LED de control ADC del microcontrolador AVR (lenguaje c)
# 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) p>
{
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(); p>
}
}