|
代码如下:
uint mega16_ad()
{
uint addata;
DDRA=0X00;
PORTA=0X00;
cli();
ADMUX = 0x00;
ADCSRA=0x87;
ADCSRA|=BIT(ADSC);
ACSR= 0x80;
SFIOR |= 0x00;
while(!(ADCSRA&(BIT(ADIF))));
addata=ADCL;
addata=addata+ADCH*256;
ADCSRA|=BIT(ADIF);
ADCSRA=0X00;
sei();
return addata;
}
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
}
void init_devices(void)
{
port_init();
MCUCR = 0x00;
MCUCSR = 0x80;//禁止JTAG
sei();//开全局中断
}
int main(void)
{
uint i;
uchar ad0[4]={0,0,0,86,86};//初始值
init_devices();
LCD_init(); //LCD初始化
LCD_clear();//清屏
DDRD =0xff;
while(1)
{
int xx=mega16_ad();
itoa(xx,ad0,10);// int to uchar
for(i=0;i<=4;i++) //显示转换的数值
{
LCD_write_char(i,0,ad0[i]);
_delay_ms(10);
};
_delay_ms(10);
LCD_write_str(0,1,"yes?+2");//第二行显示
PORTD =0xcd;//点亮LED
}
初学单片机,看着手册设定的各个寄存器,现在AD转换的结果在400~500之间狂调,用的外部参考电压也不至于这样吧,
还有一点不理解的,ADCH+ADCL,应该显示在0-255之间,怎么会一直显示400~500呢?
硬件环境是在X宝买的M16最小系统,看原理图AVCC aref连在一起的。
求大神指点一下,上述不妥之处无喷,毕竟谁都有第一次吧。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|