找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2219|回復: 0
打印 上一主題 下一主題
收起左側

基于51單片機HX711傳感器電子秤設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:744211 發(fā)表于 2020-5-4 23:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/**********************************************************************

***********************************************************************/

#include "main.h"
#include "HX711.h"
#include "uart.h"
#include "LCD1602.h"

unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;
long Weight_Shiwu = 0;

unsigned char flag = 0;
bit Flag_ERROR = 0;
sbit speak= P1^7;

//校準參數(shù)
//因為不同的傳感器特性曲線不是很一致,因此,每一個傳感器需要矯正這里這個參數(shù)才能使測量值很準確。
//當發(fā)現(xiàn)測試出來的重量偏大時,增加該數(shù)值。
//如果測試出來的重量偏小時,減小改數(shù)值。
//該值可以為小數(shù)
#define GapValue 400


//****************************************************
//主函數(shù)
//****************************************************
void main()
{
    Uart_Init();
    Send_Word("Welcome to use!\n");
    Send_Word("Made by Beetle Electronic Technology!\n");
        
        Init_LCD1602();
        LCD1602_write_com(0x80);
        LCD1602_write_word("Welcome to use!");
        Delay_ms(1000);                 //延時,等待傳感器穩(wěn)定

        Get_Maopi();                                //稱毛皮重量
        
        while(1)
        {
                EA = 0;
                Get_Weight();                        //稱重
                EA = 1;

                Scan_Key();

                //顯示當前重量
                if( Flag_ERROR == 1)
                {
            Send_Word("ERROR\n");
                        
                        LCD1602_write_com(0x80+0x40);
                        LCD1602_write_word("ERROR ");
                        speak=0;
                }               
                else
                {         
                              speak=1;
            Send_ASCII(Weight_Shiwu/1000 + 0X30);
            Send_ASCII(Weight_Shiwu%1000/100 + 0X30);
            Send_ASCII(Weight_Shiwu%100/10 + 0X30);
            Send_ASCII(Weight_Shiwu%10 + 0X30);
            Send_Word(" g\n");
                        
                        LCD1602_write_com(0x80+0x40);
                        LCD1602_write_data(Weight_Shiwu/1000 + 0X30);
            LCD1602_write_data(Weight_Shiwu%1000/100 + 0X30);
            LCD1602_write_data(Weight_Shiwu%100/10 + 0X30);
            LCD1602_write_data(Weight_Shiwu%10 + 0X30);
                        LCD1602_write_word(" g");
                }
               
        }
}

//掃描按鍵
void Scan_Key()
{
        if(KEY1 == 0)
        {
                Delay_ms(5);
                if(KEY1 == 0)
                {
                        while(KEY1 == 0);
                        Get_Maopi();                        //去皮
                }        
        }
}

//****************************************************
//稱重
//****************************************************
void Get_Weight()
{
        Weight_Shiwu = HX711_Read();
        Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //獲取凈重
        if(Weight_Shiwu > 0)                        
        {        
                Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue);         //計算實物的實際重量
                                                                                                                                                
                                                                                                                                                
                if(Weight_Shiwu > 5000)                //超重報警
                {
                        Flag_ERROR = 1;        
                }
                else
                {
                        Flag_ERROR = 0;
                }
        }
        else
        {
                Weight_Shiwu = 0;
        //        Flag_ERROR = 1;                                //負重報警
        }
        
}

//****************************************************
//獲取毛皮重量
//****************************************************
void Get_Maopi()
{
        Weight_Maopi = HX711_Read();        
}

//****************************************************
//MS延時函數(shù)(12M晶振下測試)
//****************************************************
void Delay_ms(unsigned int n)
{
        unsigned int  i,j;
        for(i=0;i<n;i++)
                for(j=0;j<123;j++);
}

HX711.7z

1.25 MB, 下載次數(shù): 24, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表