找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2968|回复: 1
收起左侧

HX711电子秤单片机源程序 已经投入实际应用

[复制链接]
ID:199142 发表于 2017-5-10 16:13 | 显示全部楼层 |阅读模式
/这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,
//本店不做任何注释说明,大家能用就用 不能用就删
//有客户反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用

HX711单片机源程序:

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <stdio.h>

  4. sbit ADDO=P2^0;
  5. sbit ADSK=P2^1;
  6. sbit led1=P2^4;
  7. sbit led2=P2^5;
  8. sbit led3=P2^6;
  9. sbit led4=P2^7;

  10. //unsigned char key;

  11. unsigned char code disp_code[] =
  12. {
  13.   //显示码数组
  14.   0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88,
  15.   0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf
  16. };

  17. unsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮

  18. /**********************************************************

  19. 延时子函数

  20. **********************************************************/
  21. void delayms(unsigned int ms)
  22. {
  23.   unsigned char t;
  24.   while (ms--)
  25.   {
  26.     for (t = 0; t < 114; t++)
  27.       ;
  28.   }
  29. }

  30. /**********************************************************

  31. x*0.14MS 延时子函数

  32. **********************************************************/
  33. void delayus(unsigned char x)
  34. {
  35.   unsigned char i;
  36.   while (x--)
  37.   {
  38.     for (i = 0; i < 14; i++)
  39.     {
  40.       ;
  41.     }
  42.   }
  43. }

  44. /**********************************************************

  45. 读711 AD数据子程序

  46. **********************************************************/
  47. unsigned long ReadCount(void)
  48. {
  49.         unsigned long Count;
  50.         unsigned int ADval;
  51.         unsigned char i;
  52.         ADDO=1;
  53.         ADSK=0;
  54.         Count=0;
  55.         while(ADDO);
  56.         for(i=0;i<24;i++)   //读24个bit
  57.         {
  58.                 ADSK=1;
  59.                 Count=Count<<1;
  60.                 ADSK=0;
  61.                   if(ADDO)Count++;
  62.         }
  63.         ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
  64. //        Count=Count^0x800000;
  65.         ;
  66.         ADSK=0;         
  67. /*        if((Count & 0x800000) == 0x800000)
  68.         {
  69.                 Count = ~(Count - 1);
  70.         }                  */
  71. //        ADval = (int)(Count >> 8);//取高十六位有效值
  72.         ADval = (int)(Count>>8);
  73. //        ADDO=1;
  74.         return(ADval);
  75. }

  76. /**********************************************************

  77. AD采样处理——算术平均数字滤波

  78. **********************************************************/
  79. unsigned long Sampling(void)
  80. {
  81.         unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;
  82.         unsigned char i;
  83.          
  84.         for(i=0;i<12;i++)
  85.         {
  86.                 Sam[i]=ReadCount();
  87.                 if(i==0)
  88.                 {
  89.                         tmpmax=Sam[0];
  90.                         tmpmin=Sam[0];
  91.                 }
  92.                 if(i>0)
  93.                 {
  94.                         if(Sam[i]>tmpmax)tmpmax=Sam[i];
  95.                         if(Sam[i]<tmpmin)tmpmin=Sam[i];
  96.                 }
  97.         }

  98.         for(i=0;i<12;i++)
  99.         {
  100.                 if(!(Sam[i]==tmpmax||Sam[i]==tmpmin))
  101.                 {
  102.                         sum=sum+Sam[i];        
  103.                 }
  104.         }
  105.         Average=sum/10;

  106.         return(Average);
  107. }

  108. /**********************************************************

  109. 重量值数码管显示子程序

  110. **********************************************************/
  111. void displayheight(void)
  112. {
  113.         unsigned int Lheight;
  114.         float Tempheight;
  115.         unsigned char i,j,height[2],discode[4];
  116.         

  117. //        while(1)
  118.         {
  119.                 Lheight = ReadCount()-1500;
  120.                 if(Lheight<0)Lheight=0;
  121.                 Tempheight=(float)(Lheight/1.4);
  122.                 Lheight=(int)(Tempheight);

  123.                
  124.         /*        discode[0]=Lheight%16;
  125.                 discode[1]=(Lheight%256)/16;
  126.                 discode[2]=(Lheight%4096)/256;
  127.                 discode[3]=(Lheight%65536)/4096;          */
  128.                
  129.         //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         

  130.                 discode[0]=Lheight%10;
  131.                 discode[1]=(Lheight%100)/10;
  132.                 discode[2]=(Lheight%1000)/100;
  133.                 discode[3]=(Lheight%10000)/1000;                  

  134.                 for(j=0;j<250;j++)
  135.                 {
  136.                         for(i=0;i<4;i++)
  137.                         {
  138.                                 if(i==0){led1=0;led2=1;led3=1;led4=1;}
  139.                                 if(i==1){led1=1;led2=0;led3=1;led4=1;}
  140.                                 if(i==2){led1=1;led2=1;led3=0;led4=1;}
  141.                                 if(i==3){led1=1;led2=1;led3=1;led4=0;}
  142.                                 P0 = disp_code[discode[i]];
  143.                                 delayms(2);
  144.                         }
  145.                 }
  146.                 led1=1;led2=1;led3=1;led4=1;
  147.                 Lheight=0;
  148.         }
  149. }

  150. /**********************************************************

  151. 主函数

  152. **********************************************************/
  153. void main(void)
  154. {
  155. //        unsigned long Lheight;
  156.         unsigned char i;

  157.           P2 = 0x0f; //数码管初始显示"-"
  158.           P1 = 0xff;
  159.           P0 = 0xbf;

  160.           while (1)
  161.           {
  162.                 displayheight();
  163.                 /*        for(i=0;i<4;i++)
  164.                         {
  165.                                 P2 = seg[i];


  166. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

下载:
程序.rar (1.41 KB, 下载次数: 42)
回复

使用道具 举报

ID:64017 发表于 2017-12-6 20:31 | 显示全部楼层
要收藏,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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