我这里有一个 STC12C5604AD 的例子,调试通过的,不知道对LZ有没有帮助
//********该函数把转换来的8位AD值转化成为0-100的十进制数********
void adc_channel(uchar adc_ch)
{
//A/D 转换控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0
uchar t1=0;
ADC_DATA=0;
ADC_CONTR=ADC_CONTR|0x80; //开AD转换电源
delay_us(1); //开AD转换电源后要加延时,1ms以内救足够了
switch (adc_ch)
{
case 0xe0: P1M0|=0x01; P1M1|=0x01; break; //设置AD通道I/O为开漏模式
case 0xe1: P1M0|=0x02; P1M1|=0x02; break;
}
ADC_CONTR=adc_ch; //设置ADC转换通道,延时使输入电压Vi稳定
delay_us(1);
ADC_CONTR|=0x08; //启动AD转换,延时等待转换结束
//delay_us(10);
while(!t1) //判断是否转换完成 ,0x10
{
t1=0x10;
t1&=ADC_CONTR;
}
ADC_CONTR&=0xe7; //清ADC-FLAG,ADC-START 位,停在转换
adc_date_1=ADC_DATA;
//if(adc_date_1>10)adc_date_1=99;
switch (adc_ch) //设置该ADC为普通I/O口;
{
case 0xe0: P1M0&=0xfe; P1M1&=0xfe; break;
case 0xe1: P1M0&=0xfd; P1M1&=0xfd; break;
}
}
|