HX711稱重傳感器+51單片機的電子秤設計,含仿真、源碼、原理圖、論文等全套設計資料

獲取電子秤設計全套資源,請見后文說明…

設計要求
1.系統可實現電子秤基本的稱重功能(稱重范圍為0~10Kg,重量誤差不大于±0.005Kg);
2.系統應具備鍵盤輸入單價,顯示重量,計算總價的功能;
3.單價和總價金額的單位為元,最大金額數值為999.99元,金額誤差不大于0.01元;
4.系統超出最大測量范圍10Kg時,具有報警指示功能(蜂鳴器、LED燈報警提示);
5.該電子秤設計同時具備去皮功能和重量校準功能;

設計概述
電子秤系統主要由單片機最小系統、數據采集系統、人機交互界面系統、報警系統五大部分組成。

單片機最小系統主要包括AT89C51和經典復位電路;數據采集部分由稱重傳感器、信號放大和A/D轉換部分組成,信號放大和A/D轉換部分主要由專用型高精度24位AD轉換芯片HX711實現。

人機交互界面為鍵盤輸入和點陣式液晶顯示,主要使用4*4矩陣鍵盤和1602液晶顯示器,可以方便的輸入數據和直觀的顯示數據;報警系統由蜂鳴器和LED燈組成。

系統框圖.jpg

仿真電路圖
仿真電路圖.jpg

操作說明.jpg

電子秤原理圖

原理圖.jpg

仿真結果分析
打開Proteus仿真文件,其后綴名為DSN。雙擊單片機,加載main.hex文件(位置在:單片機加載文件);然后,雙擊HX711芯片,加載HX711.hex文件(位置在:HX711模塊加載文件)。
hex文件和仿真文件.jpg

點擊Proteus軟件左下角運行按鈕,運行仿真。LCD1602液晶顯示:Welcom to Use Electronic Scale.
LCD初始化.jpg

緊接著,一聲提示音過后,紅色LED燈點亮,LCD顯示重量、單價和總價,數值均為0。此時,系統處于等待貨物稱重的狀態。

LCD顯示的3個參數分別是:WE(Weight,重量的縮寫)、PR(Price, 單價的縮寫)和MONEY(表示總價)。


系統等待稱重.png

按下‘重量+’或‘重量-’鍵,模擬貨物稱重,稱重范圍為:0~10Kg。重量若大于10Kg,超重報警,蜂鳴器鳴叫,紅色LED閃爍,LCD中WE顯示:-.–。


貨物重量4.179Kg

貨物超重報警.jpg

通過矩陣鍵盤輸入單價(PR),最大輸入單價為99.9,可以輸入小數點,單價設置精確到角。比如輸入5.4元,輸入數字鍵5、圓點鍵和數字鍵4即可。

單價輸入完成,自動顯示總價(MONEY),總價精確到小數點后1位;總價最大為999元,大于該值,LCD顯示‘-.–’表示超出顯示量程。


貨物稱重計價.jpg

矩陣鍵盤.jpg

系統具有校準功能,通過‘校準+’和‘校準-’兩個鍵,可以小范圍(按下1次,重量顯示改變0.001Kg)校準電子秤顯示的貨物重量。例如,將重量由3.576Kg校準為3.574Kg。


重量校準.jpg

貨物稱重完成后,點擊‘清除’鍵,清除單價和總價,點擊‘去皮’鍵清除重量顯示,注意去皮鍵兼具清除重量顯示的功能;然后就可進行下次稱重了。
單價總價清零.jpg

模擬去皮功能
首先通過按下‘重量+’/‘重量-’鍵,模擬籃子或者箱子的重量,該重量設置好后,按下‘去皮’鍵,此時重量顯示清零。

例如,按下‘重量+’鍵,設置籃子重量1.083Kg,然后點擊‘去皮’鍵,WE顯示清零。

籃子重量1.083Kg.jpg

去皮操作.png

去皮后,再次按下‘重量+’模擬貨物的凈重4.880Kg,然后,輸入單價3.0元,總價14.06元。
貨物去皮稱重.png

再次按下‘去皮’鍵,此時WE顯示貨物凈重加籃子的重量,總價也計算了籃子的部分,再次按下‘去皮’鍵,重量清零。
計價包含籃子重量.jpg

部分C代碼

void main()
{
    init_eeprom();  //開始初始化保存的數據
    Init_LCD1602();                                 //初始化LCD1602
   EA = 0;
   Data_Init();
   Timer0_Init();
   //初中始化完成,開斷
   EA = 1;
    
//  Get_Maopi();
    LCD1602_write_com(0x80);                        //指針設置
   LCD1602_write_word(" Welcome To Use ");  //  
   LCD1602_write_com(0x80+0x40);                        //指針設置
   LCD1602_write_word("Electronic Scale");
//   Delay_ms(2000);
   Get_Maopi();
   LCD1602_write_com(0x80);                     //指針設置
   LCD1602_write_word("WE:0.000 PR:00.0");
   LCD1602_write_com(0x80+0x40);                //指針設置
   LCD1602_write_word("MONEY:  0.00    ");
   Display_Price();
//  Get_Maopi();                //稱毛皮重量

    while(1)
    {
//每0.5秒稱重一次
      if (FlagTest==1)
        {
            Get_Weight();
            FlagTest = 0;
        }           
        
      keycode = Getkeyboard();
      //有效鍵值0-15
      if (keycode<16)
      {
         KeyPress(keycode);
         Buzzer=0;
         Delay_ms(100);
         Buzzer=1;
         while(keycode<16)
         {
            if(keycode==12||keycode==13)
            {
                Buzzer=0;
                 Delay_ms(10);
                 Buzzer=1;
                 KeyPress(keycode);
                 Get_Weight();
                 flag_key=1;
            }
            keycode = Getkeyboard();
         }
         write_eeprom();               //保存數據
      }
    }
}
//****************************************************
//稱重
//****************************************************
void Get_Weight()
{
    Weight_Shiwu = HX711_Read();
    Weight_Shiwu = Weight_Shiwu - Weight_Maopi;     //獲取凈重
    
    Weight_Shiwu = (unsigned int)((float)Weight_Shiwu*10/GapValue)-qupi;    //計算實物的實際重量                                                             
    if(Weight_Shiwu > 10000)        //超重報警
    {
        Buzzer = !Buzzer;   
        LED=!LED;
        LCD1602_write_com(0x83);
       LCD1602_write_word("-.---");
    }
    else
    {
        if(Weight_Shiwu==0)
        LED=1;
        else if(Weight_Shiwu>0)
        LED=0; 
        Buzzer = 1;
        Display_Weight();
        money = Weight_Shiwu*price/1000;  //money單位為分
           //顯示總金額
           Display_Money();
    }
}

//****************************************************
//獲取毛皮重量
//****************************************************
void Get_Maopi()
{
    unsigned char clear;
mm: Weight_Maopi_0 = HX711_Read();
    for(clear=0;clear<10;clear++)
    {
        Buzzer=1;
        LED=1;
        Delay_ms(100);
        LED=0;
        Delay_ms(100);  
    }
    Weight_Maopi = HX711_Read();
    if(Weight_Maopi/GapValue!=Weight_Maopi_0/GapValue)
    goto mm;
    Buzzer=0;
    Delay_ms(500);
    Buzzer=1;
} 

分享的資源有
(1)基于51單片機和HX711壓力傳感器的電子秤系統設計畢設論文完整版;
(2)Proteus仿真文件;
(3)Keil C程序文件;
(4)HX711模塊資料;
(5)Visio流程圖;
(6)電子秤原理圖;
(7)電子元器件清單;
(8)評優文獻翻譯;

全套資源如下

資源1.jpg

資源2.jpg

資源3.jpg

資源4.jpg

資源5.jpg

資源6.jpg

重要的事情說三遍!

重要的事情說三遍!

重要的事情說三遍!

獲取電子秤設計畢業論文、Proteus仿真、C程序、原理圖、Visio流程圖、元器件清單、HX711模塊等全套資料。請搜索關注我的公眾號:交院小智

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。