根据昨天的贴子,今天也跑了下ADC程序。感觉很好用,我太接可调电阻会损坏板子,就用镊子短3.3V和PC0
程序的原理是只要大于一半电压,LED就亮,以下是运行截图:
以下是完整程序清单:
- /*
- * GccApplication6.c
- *
- * Created: 2015-1-16 9:23:54
- * Author: Administrator
- */
- #define F_CPU 16000000UL
- #include <avr/io.h>
- #include <util/delay.h>
- #include <avr/interrupt.h>
- #include <stdint.h>
- void AD_Init(void)
- {
- //参考电压AVCC 要加电容稳压,左对齐,ADC5单端输入
- ADMUX |= (0<<REFS1)|(1<<REFS0)|(1 << ADLAR) ;//(1 << MUX0)
- //AD使能, 连续转换,中断使能,32分频, 6M / 32 = 187.5khz
- ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS0);
- //AD开始转换
- ADCSRA |= (1 << ADSC);
- }
- int main(void)
- {
- DDRC=(0<<PC0);
- PORTC=(0<<PC0);//注意adc输入口的设置 输入0
- //AD初始化
- AD_Init();
- //开总中断
- sei();
- while(1);
- return 0;
- }
- int result = 0;
- ISR(ADC_vect)//中断函数命名方式的变化
- {
- result = ADCH;
- //result = result * 500 / 255;
- if(result>=128)
- {
- DDRB=(1<<PB5);
- PORTB=(1<<PB5);//检测led的变化 因为pb5 接有led
- }
- else
- {DDRB=(0<<PB5);
- PORTB=(0<<PB5);//微亮
-
- }
- }
|