|
使用51單片機(jī)制作一個(gè)電子秤,所需器件:全橋傳感器,hx711芯片,數(shù)碼管,at89c52.
其中一定要注意傳感器和hx711芯片的接法,我是用A通道,DT接P3.0,SCK接P3.1。
部分代碼如下,有點(diǎn)亂,懶得整理了。
我的傳感器有點(diǎn)問題,加上上面的光碟計(jì)算為初始重量0000.
制作出來的實(shí)物圖:
IMG_20171126_100043.jpg (3.14 MB, 下載次數(shù): 105)
下載附件
2017-11-26 10:08 上傳
IMG_20171126_100030.jpg (3.05 MB, 下載次數(shù): 80)
下載附件
2017-11-26 10:08 上傳
IMG_20171126_095847.jpg (2.51 MB, 下載次數(shù): 97)
下載附件
2017-11-26 10:08 上傳
IMG_20171126_095822.jpg (1.73 MB, 下載次數(shù): 74)
下載附件
2017-11-26 10:08 上傳
單片機(jī)源程序如下:
- #include "main.h"
- #include "HX711.h"
- /////共陰數(shù)碼管段選//////////////////////////////////////////////
- unsigned char table[22]={0x3F,0x06,0x5B,0x4F,0x66,
- 0x6D,0x7D,0x07,0x7F,0x6F,
- 0x77,0x7C,0x39,0x5E,0x79,0x71,
- 0x40,0x38,0x76,0x00,0xff,0x37};//'-',L,H,滅,全亮,n 16-21
- float m__1=16.752;
- unsigned long HX711_Buffer = 0;
- unsigned int Weight_Maopi = 0,Weight_Shiwu = 0;
- char Price_Count = 0;
- unsigned char KEY_NUM = 0,j=0;
- unsigned char Price_Buffer[3] = {0x00,0x00,0x00};
- unsigned long Money = 0;
- bit Flag_OK = 0;
- unsigned int a=0;
- unsigned int b=0;
- unsigned int c=0;
- unsigned int d=0;
- void delay(unsigned int ms)
- {
- unsigned char x;
- for(ms;ms>0;ms--)
- for(x=112;x>0;x--);
- }
- void display(unsigned int zl)//顯示重量 單位g
- {
-
- w1=1;w2=0;w3=0;w4=0;
- P0=table[zl/1000];
- delay(20);
- w1=0; //第1位
-
- w1=0;w2=1;w3=0;w4=0;
- P0=table[zl%1000/100];
- delay(20);//第2位
- w2=0;
- w1=0;w2=0;w3=1;w4=0;
- P0=table[zl%100/10];
- delay(20);//第3位
- w3=0;
-
- w1=0;w2=0;w3=0;w4=1;
- P0=table[zl%10];
- delay(20);
- w4=0;//第4位
- }
- void Get_Maopi()
- {
- HX711_Buffer = HX711_Read();
- Weight_Maopi = HX711_Buffer/100;
- }
- //****************************************************
- //主函數(shù)
- //****************************************************
- void main()
- {
- Get_Maopi(); //稱毛皮重量
-
- while(1)
- {
- if( Flag_OK == 0)
- {
- Get_Weight();
- for(j=0;j<100;j++)display(Weight_Shiwu);//顯示重量 單位g
-
- }
- if(key1==0) //
- {
- while(!a)
- {a=Weight_Shiwu;}
- for(j=0;j<100;j++)display(a);
- }
- if(key2==0) //
- {
- while(!b)
- {b=Weight_Shiwu;}
- for(j=0;j<100;j++)display(b);
- }
- if(key3==0) //
- {
- while(!c)
- {c=Weight_Shiwu;}
- for(j=0;j<100;j++)display(c);
- }
- if(key4==0) //
- {
- while(!d)
- {d=Weight_Shiwu;}
- for(j=0;j<100;j++)display(d);
- }
- }
- }
- //****************************************************
- //稱重
- //****************************************************
- void Get_Weight()
- {
- HX711_Buffer = HX711_Read();
- HX711_Buffer = HX711_Buffer/100;
- if(HX711_Buffer > Weight_Maopi)
- {
- Weight_Shiwu = HX711_Buffer;
- Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //獲取實(shí)物的AD采樣數(shù)值。
-
- Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/m__1+0.05); //計(jì)算實(shí)物的實(shí)際重量
- //因?yàn)椴煌膫鞲衅魈匦郧€不一樣,因此,每一個(gè)傳感器需要矯正這里的4.30這個(gè)除數(shù)。
- //當(dāng)發(fā)現(xiàn)測(cè)試出來的重量偏大時(shí),增加該數(shù)值。
- //如果測(cè)試出來的重量偏小時(shí),減小改數(shù)值。
- //該數(shù)值一般在4.0-5.0之間。因傳感器不同而定。
- //+0.05是為了四舍五入百分位
- Buzzer = 1; //關(guān)閉警報(bào)
- }
- // if(Weight_Shiwu>1000)Buzzer=0;
- //
- // if(Weight_Shiwu < 2)Weight_Shiwu=0;
- //
- // else if(HX711_Buffer < Weight_Maopi - 30)
- // {
- // Buzzer = 0; //負(fù)重量報(bào)警
- // }
- // else if(HX711_Buffer > Weight_Maopi + 24970) //大于5Kg的最大量程,報(bào)警
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
藍(lán)色 電子稱程序 - 副本.zip
(37.62 KB, 下載次數(shù): 330)
2017-11-26 10:06 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|