當前位置:編程學習大全網 - 編程語言 - AVR微控制器ADC控制LED程序(c語言)

AVR微控制器ADC控制LED程序(c語言)

給妳寫壹個。反正就是個簡單的程序,用mega8實現的。妳可以改變單片機的型號,只需改變中斷向量數:

# 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();

}

}

  • 上一篇:勁舞團玩家開發出售外掛軟件獲刑,這是怎麽回事?
  • 下一篇:有趣的數學魔術,看到幾點走幾點,
  • copyright 2024編程學習大全網