# include & ltiom8v.h & gt
# include & ltmacros.h & gt
#定義led 1 _ ON PORTB | = BIT(1)
#define LED1_OFF端口& amp= ~位(1)
//可以多寫七個燈或者更多。
#定義uchar無符號字符
#定義uint無符號整數
uint ADC _ count = 0;//控制AD轉換速度計數。
uint a _ time = 0;//用於AD數字濾波計數。
uchar模式= 0;//用於賦值AD處理的結果。
void port_init(void)
{
DDRB = 0x ff;
PORTB = 0x00
DDRC = 0x 00;
PORTC = 0xff
DDRD = 0xf 0;
PORTD = 0x00
}
//定時器分頻:64
//設置計時值:1 ms。
//真實計時值:1毫秒(0.0%)
void定時器0_init(void)
{
TCCR0 = 0x00//停止
TCNT0 = 0x83//設置計數
TIMSK | = 0x 01;
TCCR0 = 0x03//啟動計時器
}
#pragma中斷處理程序定時器0_ovf_isr:10
void定時器0_ovf_isr(void)
{
TCNT0 = 0x83//重新加載計數器值
ADC _ count++;
If(adc_count==50) //用於控制AD轉換速度。
{
ADC _ count = 0;
ADCSRA = 0xCF
}
其他
{
ADCSRA = 0x00
}
}
void adc_init(void)
{
ADCSRA = 0x00//禁止AD轉換
ADMUX = 0x07
SFIOR | = 0x 00;
ACSR = 0x 80;//禁用模擬比較器
ADCSRA = 0xCF
//ADCSRA = 0x ed;
}
無符號整數adc_calc(void)
{
//計算實際電壓
無符號長整型值= 0;
無符號int電壓= 0;//電壓單位是(mV)
價值= ADCL;//首先讀取低位
value | =(int)ADCH & lt;& lt8;//然後讀取高位。
電壓=(值* 5000)/1023;
ad _ flag = 1;
返回電壓;
}
//取AD的平均值。
#pragma中斷處理程序adc_isr:15
空adc_isr(空)
{
//轉換完成後中斷處理
無符號int voltage 1;
a _ time++;
if(a _ time & lt;8)
{ voltage 1 = ADC _ calc();電壓2 =電壓2+電壓1;}//數字濾波
while(a_time==8)
{
a _ time = 0;電壓= voltage 2/8;voltage 2 = 0;
如果((電壓)& lt1130){ Dian Liang = 0;}
如果((電壓& gt= 1130)& amp;& amp(電壓& lt1300)){ mode = 1;}
如果((電壓& gt= 1300);& amp(電壓& lt1560)){ mode = 2;}
如果((電壓& gt= 1560)& amp;& amp(電壓& lt1750)){ mode = 3;}
如果((電壓& gt= 1750)& amp;& amp(電壓& lt1950)){ mode = 4;}
如果((電壓& gt= 1950)& amp;& amp(電壓& lt2150)){ mode = 5;}
如果((電壓& gt= 2150);& amp(電壓& lt2341)){ mode = 6;}
如果((電壓& gt= 2341)& amp;& amp(電壓& lt2560)){ mode = 7;}
如果((電壓& gt= 2560)& amp;& amp(電壓& lt2710)){ mode = 8;}
如果((電壓& gt= 2710);& amp(電壓& lt2870)){ mode = 9;}
}
else { mode = 0;}
}
void LED _ disp(void)//用於控制LED顯示。
{
開關(模式)
{
案例0: /*在這裏寫妳要控制的燈是開還是關*/;打破;
Case 1: /*這裏寫妳要控制的燈是開還是關*/;打破;
情況二:/*在這裏寫妳要控制的燈是開還是關*/;打破;
情況三:/*在這裏寫妳要控制的燈是開還是關*/;打破;
情況4: /*在這裏寫妳要控制的燈是開還是關*/;打破;
情況5: /*在這裏寫妳要控制的燈是開還是關*/;打破;
情況6: /*在這裏寫妳要控制的燈是開還是關*/;打破;
情況7: /*在這裏寫妳要控制的燈是開還是關*/;打破;
情況8: /*在這裏寫妳要控制的燈是開還是關*/;打破;
情況9: /*在這裏寫妳要控制的燈是開還是關*/;打破;
默認:break
}
}void初始化設備(void)
{
CLI();//禁用所有中斷
MCUCR = 0x00
MCUCSR = 0x80//禁用JTAG
GICR = 0x 00;
定時器0 _ init();
port _ init();
ADC _ init();
//SEI();//打開全局中斷
}
無效總管(無效)
{
init _ devices();
while(1)
{
LED _ DISP();
}
}