试试下面的代码
- #include <iom48v.h>
- #include <macros.h>
- #define uint unsigned int
- #define uchar unsigned char
- uint temp1 = 0, temp4 = 0;
- uint ADC_Convert(uchar channel)
- {
- ADMUX = (ADMUX & 0xF0) | channel; // 清除通道选择位并设置新通道
- ADCSRA |= (1 << ADSC); // 开始转换
- while (!(ADCSRA & (1 << ADIF))); // 等待转换结束
- ADCSRA |= (1 << ADIF); // 清除转换结束标记
- return ADC; // 读取完整的10位结果(先读ADCL,再读ADCH)
- }
- void main(void)
- {
- DDRD |= 0x80; // 设置PD7为输出
- PORTD &= 0x7F; // PD7初始化为低电平
- DDRC &= 0xEB; // 设置PC2和PC4为输入
- PORTC |= 0x14; // 启用PC2和PC4的上拉电阻
- ADCSRA = 0x00; // 关闭ADC
- ADMUX = 0x40; // 使用AVCC作为参考电压,右对齐
- ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // 使能ADC,设置预分频为128
- while (1)
- {
- temp1 = ADC_Convert(2); // 读取PC2的ADC值
- if (temp1 > 40)
- PORTD |= 0x80; // 如果结果大于40,PD7置高
- temp4 = ADC_Convert(4); // 读取PC4的ADC值
- if (temp4 < 40)
- PORTD &= 0x7F; // 如果结果小于40,PD7置低
- }
- }
|