试试下面的代码
#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置低
}
}
|