|
/這個程序是網(wǎng)友提供,里面有個 "讀HX711 AD數(shù)據(jù)子程序" 僅供參考,
//本店不做任何注釋說明,大家能用就用 不能用就刪
//有客戶反應(yīng)說:發(fā)現(xiàn)這個函數(shù)Sampling出現(xiàn)問題,各位看著辦,酌情使用
HX711單片機(jī)源程序:
- #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[] =
- {
- //顯示碼數(shù)組
- 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};//分別對應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮
- /**********************************************************
- 延時子函數(shù)
- **********************************************************/
- void delayms(unsigned int ms)
- {
- unsigned char t;
- while (ms--)
- {
- for (t = 0; t < 114; t++)
- ;
- }
- }
- /**********************************************************
- x*0.14MS 延時子函數(shù)
- **********************************************************/
- void delayus(unsigned char x)
- {
- unsigned char i;
- while (x--)
- {
- for (i = 0; i < 14; i++)
- {
- ;
- }
- }
- }
- /**********************************************************
- 讀711 AD數(shù)據(jù)子程序
- **********************************************************/
- 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; //發(fā)送第25個脈沖,表示下次轉(zhuǎn)換使用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采樣處理——算術(shù)平均數(shù)字濾波
- **********************************************************/
- 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);
- }
- /**********************************************************
- 重量值數(shù)碼管顯示子程序
- **********************************************************/
- 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;
- }
- }
- /**********************************************************
- 主函數(shù)
- **********************************************************/
- void main(void)
- {
- // unsigned long Lheight;
- unsigned char i;
- P2 = 0x0f; //數(shù)碼管初始顯示"-"
- P1 = 0xff;
- P0 = 0xbf;
- while (1)
- {
- displayheight();
- /* for(i=0;i<4;i++)
- {
- P2 = seg[i];
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
下載:
程序.rar
(1.41 KB, 下載次數(shù): 43)
2017-5-10 16:22 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|