
#include<iom48v.h>
unsigned int ad;
//io初始化
void io_init(void)
{
DDRB = 0B11111111;
PORTB = 0B11111111;
}
//ADC初始化
void adc_init()
{
ADMUX = 0x46; //(0100 0110)基准源AVCC,AREF引脚外加滤波电容,右对齐,adc6
ADCSRA = 0xc3; //(1100 0011)使能,开始转换,ADC预分频器选8分频
ADCSRB = 0x00; //(0000 0000)连续转换模式
}
//ADC采样
unsigned int ad_get(void)
{
unsigned int j;
ADCSRA |= 0x40; //(0100 0000)开始转换
while (!(ADCSRA & 0x10)); //等待采样结束
j = ADC; //读取ADC结果
ADCSRA |= 0x10; //清标志
return j; //返回结果
}
//电压转换函数
int ad_convert(unsigned int i)
{
long x;
unsigned int y;
x = (5*1000*(long)i)/1024;
y = (unsigned int)x;
return y;
}
//延时函数
void delay(int count)
{
int i;
for(i=1;i<=count;i++)
;
}
//主程序,不同(电压)对应按下不同的按键,按键按下对应的灯闪亮,按键松开对应的灯灭
void main(void)
{
io_init();
adc_init();
while(1)
{
ad = ad_convert(ad_get());
if(ad > 4000)
{
PORTB = ~(1<<0);
}
if((ad > 3000) && (ad < 4000))
{
PORTB = ~(1<<1);
}
if((ad > 1000) && (ad < 2000))
{
PORTB = ~(1<<2);
}
delay(1000000);
PORTB =0b11111111;
}
}