开始之前先给大家看下源程序读数据的子程序。
//AD 数据读取
void Liangdu_Data(void)
{
AD1 = AD_Read(0x00);
AD2 = AD_Read(0x01);
AD3 = AD_Read(0x02);
}
看起来好像没有错 但是读出后发现AD2读出的是0x00的值,AD3读出的是AD2的值 至此类推 , 后来通过查看资料发现问题。
PCF8591
每读出一次,它启动一次转换
转换的结果,在下次,才能读出
所以连续读取一个通道两次数据是不是就可以解决了。
所以修改代码 如下:
void Liangdu_Data(void)
{
uchar i=2;
while(i--){
Data_temp = AD_Read(0x00);
}
}
void Dianliu_Data(void)
{
uchar i=2;
while(i--){
Dianliu = AD_Read(0x01);
}
}
void FangXiang_Data(void)
{
uchar i=2;
while(i--){
FangXiang = AD_Read(0x02);
}
}
我把三个通道的读取函数分别读取两次。在主程序中调用。
void main()
{
while(1)
{
GetDistance();
Liangdu_Data();
Dianliu_Data();
FangXiang_Data();
}
}
至此,完美解决问题。文中可能有少许问题 ,大家可以在评论区交流学习。