标题:
HX711电子秤单片机源程序 已经投入实际应用
[打印本页]
作者:
cxyingljyu
时间:
2017-5-10 16:13
标题:
HX711电子秤单片机源程序 已经投入实际应用
/这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,
//本店不做任何注释说明,大家能用就用 不能用就删
//有客户反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用
HX711单片机源程序:
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
sbit ADDO=P2^0;
sbit ADSK=P2^1;
sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
sbit led4=P2^7;
//unsigned char key;
unsigned char code disp_code[] =
{
//显示码数组
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88,
0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf
};
unsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮
/**********************************************************
延时子函数
**********************************************************/
void delayms(unsigned int ms)
{
unsigned char t;
while (ms--)
{
for (t = 0; t < 114; t++)
;
}
}
/**********************************************************
x*0.14MS 延时子函数
**********************************************************/
void delayus(unsigned char x)
{
unsigned char i;
while (x--)
{
for (i = 0; i < 14; i++)
{
;
}
}
}
/**********************************************************
读711 AD数据子程序
**********************************************************/
unsigned long ReadCount(void)
{
unsigned long Count;
unsigned int ADval;
unsigned char i;
ADDO=1;
ADSK=0;
Count=0;
while(ADDO);
for(i=0;i<24;i++) //读24个bit
{
ADSK=1;
Count=Count<<1;
ADSK=0;
if(ADDO)Count++;
}
ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
// Count=Count^0x800000;
;
ADSK=0;
/* if((Count & 0x800000) == 0x800000)
{
Count = ~(Count - 1);
} */
// ADval = (int)(Count >> 8);//取高十六位有效值
ADval = (int)(Count>>8);
// ADDO=1;
return(ADval);
}
/**********************************************************
AD采样处理——算术平均数字滤波
**********************************************************/
unsigned long Sampling(void)
{
unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;
unsigned char i;
for(i=0;i<12;i++)
{
Sam[i]=ReadCount();
if(i==0)
{
tmpmax=Sam[0];
tmpmin=Sam[0];
}
if(i>0)
{
if(Sam[i]>tmpmax)tmpmax=Sam[i];
if(Sam[i]<tmpmin)tmpmin=Sam[i];
}
}
for(i=0;i<12;i++)
{
if(!(Sam[i]==tmpmax||Sam[i]==tmpmin))
{
sum=sum+Sam[i];
}
}
Average=sum/10;
return(Average);
}
/**********************************************************
重量值数码管显示子程序
**********************************************************/
void displayheight(void)
{
unsigned int Lheight;
float Tempheight;
unsigned char i,j,height[2],discode[4];
// while(1)
{
Lheight = ReadCount()-1500;
if(Lheight<0)Lheight=0;
Tempheight=(float)(Lheight/1.4);
Lheight=(int)(Tempheight);
/* discode[0]=Lheight%16;
discode[1]=(Lheight%256)/16;
discode[2]=(Lheight%4096)/256;
discode[3]=(Lheight%65536)/4096; */
// tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];
discode[0]=Lheight%10;
discode[1]=(Lheight%100)/10;
discode[2]=(Lheight%1000)/100;
discode[3]=(Lheight%10000)/1000;
for(j=0;j<250;j++)
{
for(i=0;i<4;i++)
{
if(i==0){led1=0;led2=1;led3=1;led4=1;}
if(i==1){led1=1;led2=0;led3=1;led4=1;}
if(i==2){led1=1;led2=1;led3=0;led4=1;}
if(i==3){led1=1;led2=1;led3=1;led4=0;}
P0 = disp_code[discode[i]];
delayms(2);
}
}
led1=1;led2=1;led3=1;led4=1;
Lheight=0;
}
}
/**********************************************************
主函数
**********************************************************/
void main(void)
{
// unsigned long Lheight;
unsigned char i;
P2 = 0x0f; //数码管初始显示"-"
P1 = 0xff;
P0 = 0xbf;
while (1)
{
displayheight();
/* for(i=0;i<4;i++)
{
P2 = seg[i];
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载:
程序.rar
(1.41 KB, 下载次数: 43)
2017-5-10 16:22 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
shuangxi
时间:
2017-12-6 20:31
要收藏,谢谢!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1