找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3459|回復(fù): 1
收起左側(cè)

HX711電子秤單片機(jī)源程序 已經(jīng)投入實(shí)際應(yīng)用

[復(fù)制鏈接]
ID:199142 發(fā)表于 2017-5-10 16:13 | 顯示全部樓層 |閱讀模式
/這個(gè)程序是網(wǎng)友提供,里面有個(gè) "讀HX711 AD數(shù)據(jù)子程序" 僅供參考,
//本店不做任何注釋說明,大家能用就用 不能用就刪
//有客戶反應(yīng)說:發(fā)現(xiàn)這個(gè)函數(shù)Sampling出現(xiàn)問題,各位看著辦,酌情使用

HX711單片機(jī)源程序:

  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.   //顯示碼數(shù)組
  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};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮

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

  19. 延時(shí)子函數(shù)

  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 延時(shí)子函數(shù)

  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數(shù)據(jù)子程序

  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個(gè)bit
  57.         {
  58.                 ADSK=1;
  59.                 Count=Count<<1;
  60.                 ADSK=0;
  61.                   if(ADDO)Count++;
  62.         }
  63.         ADSK=1; //發(fā)送第25個(gè)脈沖,表示下次轉(zhuǎn)換使用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采樣處理——算術(shù)平均數(shù)字濾波

  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. 重量值數(shù)碼管顯示子程序

  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. 主函數(shù)

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

  157.           P2 = 0x0f; //數(shù)碼管初始顯示"-"
  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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

下載:
程序.rar (1.41 KB, 下載次數(shù): 43)



回復(fù)

使用道具 舉報(bào)

ID:64017 發(fā)表于 2017-12-6 20:31 | 顯示全部樓層
要收藏,謝謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表