矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 1138|回复: 0

学习HX710

[复制链接]
     
发表于 2022-11-24 17:25:58 | 显示全部楼层 |阅读模式
昨天找了个电子称板子,上面有个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++;
        

    }
}
您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-27 15:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表