新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > ADC0809电压表 数据采集与处理方法

ADC0809电压表 数据采集与处理方法

作者:时间:2016-11-28来源:网络收藏
使用ADC0809制作5V电压表时,遇到新的知识——模数转换,赶紧记下自己的心得以供以后参考。
ADC0809数据8位输出OUT1~OUT8,与单片机硬件连接时最好为整个8位PX(P0、P1、P2、P3)口,下面为数据采集与处理参考程序分析:
假设使用void ADC(unsigned char ad_dat)函数来进行转换,那么在main中调用时可以直接写ADC(PX);将整个PX口的数据以unsigned char(uchar)类型读取进来。在ADC函数里这样写(此处只写出对已收到的数据处理,省略了芯片的启动电平和是否完成转换判别等等):
float temp;//浮点保留小数点后面六位,最后一位四舍五入
uchar val_int;//用于存储整数位
uint val_decimal;//存小数位
temp = ad_dat * (5/255);//主要是这个地方的原理比较重要:首先输出数据的8个口,能够表示的无符号整数范围是0~255。而测量电压的范围是0~5V(以参考电压连接决定),所以接收到的整数与想要得到的电压值存在 5/255 的数量关系。为了保持精度,所以temp用的是float类型。
val_int = (uchar) temp;//强制转换,保留temp的整数部分,注意,这里并不会改变temp的数据
val_decimal = (uint) ((temp - val_int) * 100);//把整数部分减去为0之后。把想要保留的小数提上来,这样数码管显示的时候当做整数来处理。
虽然程序没仿真过,目前也还没出成品,不过这个新的知识,感觉挺理论的,不能忘了
更正错误:temp = ad_dat * (5/255);这条语句中,(5/255)必须用算出值0.0196078。原句改为:temp = ad_dat * 0.0196078; 否则转换值全是0。原因还未探明,相信与数据类型有关系。


评论


技术专区

关闭