|
昨天找了个电子称板子,上面有个HX710,ADC转换器。
写了个程序驱动下,结果发现在ulong ,long,float转换出现问题,
最后改成下面,可以正常了,请教各位老师,有简单的转换方法吗?
#include <STC89C5xRC.H>
//此程序测试大阳国内液晶电子称的Hx710,
//很奇怪,这个型号没有AB后缀的
//晶振12Mhz
//
sbit clk = P1^0;
sbit datp= P1^1;
sbit addr_a = P2^2;
sbit addr_b = P2^3;
sbit addr_c = P2^4;
sbit key = P3^2;
#define ledseg P0;
unsigned char code led_num[12] = {63,6,91,79,102,109,125,7,127,111,64,0};
unsigned char voltage[8];
unsigned long read_hx710()
{
unsigned long c;
char i;
c=0;
clk=0;
datp=1;
while(datp);
for(i=0;i<24;i++)
{
clk=1;
c=c<<1;
if(datp)c++;
clk=0;
}
clk=1;//第25个脉冲,10hz输出
c=c^0x800000;
clk=0;//保持0,防止休眠
c>>=4;
c&=0xfffff;
return c;
}
void main()
{
unsigned long dat,dat11;
unsigned char cn,t,n,keyc;
float f;
cn=0;
n=0;
f=0.0;
keyc=0;
while(1)
{
if(n==88){
dat =read_hx710();
n=0;
//实测vcc=4.73v;则,电压转换系数=4730mv/0xfffff=0.004511mv=4.511uV
//4.511/128=0.0352422
f=(long)(dat-524288)*3.52422;//微伏*100
if(f<0)
{
voltage[7]=10;//显示-号
f=-f;
}
else
voltage[7]=11;//消隐-号
dat11=(unsigned long)(f+0.5);
for(t=0;t<7;t++)
{
voltage[t]=dat11%10;
dat11/=10;
}
}
//加入归零按键处理
if(key==0){
keyc++;
if(keyc==5)
{
//write_eeprom,dat代替524288这个数字;
keyc=0;
}
}
//disp
P0=0;
addr_a = cn & 0x01;
addr_b = cn & 0x02;
addr_c = cn & 0x04;
P0=led_num[voltage[cn]];
if(cn==5 || cn==2)P0+=128;//ADD .
cn++;
if(cn==8)cn=0;
for(t=0;t<200;t++);
for(t=0;t<100;t++);
n++;
}
} |
|