//模数转换函数。网上找的不能硬套用,现在修改了一下适应STC8A4K32S2A12型号
//Get_ADC(8):P0.0,模数转换函数传入引脚,获取ADC(引脚电压数据)
unsigned int Get_ADC(unsigned char Channel){
unsigned char DIWEI,GAOWEI;
unsigned int trans_result,ADC_Data;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=ADC_POWER;//打开ADC电源
ADC_CONTR|=ADC_START;//开始ADC转换,转换完成后硬件会将此位清零
ADC_CONTR|=Channel;//ADC模拟通道选择,可以用整数代替,如:ADC_CONTR=10;(二进制1010)则选择P0.2引脚 为8选P0.0
//Channel=10(二进制1 010)P0.2(第一个位1代表P0)
//Channel=0 (二进制0 010)P1.2(第一个位0代表P1)
_nop_();//加4个CPU时钟确保被写入ADC_CONTR寄存器
_nop_();
_nop_();
_nop_();
//ADC_FLAG转换结束标志,当ADC完成一次转换后,硬件自动将此位置1,并向CPU发出中断请求;
while(!(ADC_CONTR&ADC_FLAG));//等待转换完成,硬件自动将此位置1
ADC_CONTR&=~ADC_FLAG; //取反符~,软件把ADC_FLAG转换结束标志清零;等待下次硬件置1
GAOWEI=ADC_RES;//高8位
DIWEI=ADC_RESL;//低4位
//ADC_CONTR &= ~ (1<<7); //关闭ADC电源
//ADC_CONTR &= ~ (1<<6); //停止ADC采集
trans_result=GAOWEI;
trans_result=(trans_result<<8)|DIWEI;
trans_result=trans_result>>4;
//只读取8位采集结果并以5V为基准进行换算
ADC_Data=trans_result;//*500*10/4095; //Return ADC result(为显示整数,这里将电压值扩大10倍)
//5/256 因为是8位,把5V分成256份 ADC_RES为采集的份数
//ADC_RES*(5/256)为采集电压值,然后扩大10倍便于计算
return ADC_Data;
}
//Get_ADC(8):P0.0,模数转换函数传入引脚,获取ADC(引脚电压数据)
unsigned int Get_ADC(unsigned char Channel){
unsigned char DIWEI,GAOWEI;
unsigned int trans_result,ADC_Data;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=ADC_POWER;//打开ADC电源
ADC_CONTR|=ADC_START;//开始ADC转换,转换完成后硬件会将此位清零
ADC_CONTR|=Channel;//ADC模拟通道选择,可以用整数代替,如:ADC_CONTR=10;(二进制1010)则选择P0.2引脚 为8选P0.0
//Channel=10(二进制1 010)P0.2(第一个位1代表P0)
//Channel=0 (二进制0 010)P1.2(第一个位0代表P1)
_nop_();//加4个CPU时钟确保被写入ADC_CONTR寄存器
_nop_();
_nop_();
_nop_();
//ADC_FLAG转换结束标志,当ADC完成一次转换后,硬件自动将此位置1,并向CPU发出中断请求;
while(!(ADC_CONTR&ADC_FLAG));//等待转换完成,硬件自动将此位置1
ADC_CONTR&=~ADC_FLAG; //取反符~,软件把ADC_FLAG转换结束标志清零;等待下次硬件置1
GAOWEI=ADC_RES;//高8位
DIWEI=ADC_RESL;//低4位
//ADC_CONTR &= ~ (1<<7); //关闭ADC电源
//ADC_CONTR &= ~ (1<<6); //停止ADC采集
trans_result=GAOWEI;
trans_result=(trans_result<<8)|DIWEI;
trans_result=trans_result>>4;
//只读取8位采集结果并以5V为基准进行换算
ADC_Data=trans_result;//*500*10/4095; //Return ADC result(为显示整数,这里将电压值扩大10倍)
//5/256 因为是8位,把5V分成256份 ADC_RES为采集的份数
//ADC_RES*(5/256)为采集电压值,然后扩大10倍便于计算
return ADC_Data;
}