你好我用的是STC自带ad的单片机,ad转换结果怎么样呢,怎么和十进制数比较啊,ad口做模拟量输入是高电平?
发布网友
发布时间:2022-05-17 12:36
我来回答
共2个回答
热心网友
时间:2023-10-21 23:09
AD转换不就是一个数字啊,他和十进制直接就可以比较啊,这个有难度吗。至于说没有输入的时候测试时高电平,估计你加了上拉电阻的缘故吧。
热心网友
时间:2023-10-21 23:10
void AD_Init()
{
P1M0 = 0xf6; //1111,0110用于A/D转换的P1.x口,先设为开漏
P1M1 = 0xf6; //1111,0110P1.0--P1.1先设为开漏。断开内部上拉电阻
Delay1ms(100);
}
float Read_ADC(unsigned char adcvcc)
{
ADC_CONTR = ADC_CONTR|0x80; //1000,0000打开A/D转换电源
Delay1ms(20); //20ms
ADC_CONTR = ADC_CONTR&0xE0; //1110,0000 清ADC_FLAG,ADC_START位和低3位
ADC_CONTR = ADC_CONTR&0xf8|adcvcc; //设置当前通道号
Delay1ms(10); //延时使输入电压达到稳定
ADC_DATA = 0; //清A/D转换结果寄存器
ADC_CONTR = ADC_CONTR|0x08; //0000,1000ADCS = 1,启动转换
do { ; } while((ADC_CONTR & 0x10)==0); //0001,0000等待A/D转换结束
ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG和ADC_START位,停止A/D转换
return ADC_DATA;
}追问你好,我不知道ad转换是否完成怎么看转换完成的结果。存到ADC_DATA中的结果转换成十六进制数存到数组中输出到P0口这样可以吗思路对吗,程序怎么实现呢。
追答float Ad_Av(uchar chan)
{//求蓄电池电压平均值
float Val_Av;
Val_Av=Read_ADC(chan);
Val_Av=Val_Av*5/1024;
return (Val_Av);
}
voltage1=Ad_Av(1);