找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1458|回复: 0
打印 上一主题 下一主题
收起左侧

基于51单片机设计的电子秤

[复制链接]
跳转到指定楼层
楼主
#include "main.h"
#include "HX711.h"
/////共阴数码管段选//////////////////////////////////////////////
unsigned chartable[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=2.80;
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;
void delay(unsigned int ms)
{
         unsignedchar x;
         for(ms;ms>0;ms--)
                  for(x=10;x>0;x--);
}
void display()//显示重量 单位g
{
         w1=0;P0=~table[Weight_Shiwu/1000];delay(10);//1
         P0=0xff;w1=1;delay(1);
         
         w2=0;P0=~table[Weight_Shiwu%1000/100];delay(10);//2
         P0=0xff;w2=1;delay(1);
         w3=0;P0=~table[Weight_Shiwu%100/10];delay(10);//3
         P0=0xff;w3=1;delay(1);
         w4=0;P0=~table[Weight_Shiwu%10];delay(10);//4
         P0=0xff;w4=1;delay(1);
}
//****************************************************
//主函数
//****************************************************
void main()
{                                          
         
         Get_Maopi();                             //称毛皮重量
         
         while(1)
         {
                  if(Flag_OK == 0)
                  {
                          Get_Weight();                   //称重
                          for(j=0;j<100;j++)display();//显示重量 单位g
                          //显示当前重量
                  }
                  if(key1==0)                        //
                  {
                          delay(10);
                          if(key1==0)
                          {      
                                   while(!key1);   //
                                   Get_Maopi();                    //去皮     
                          }
                  }
                  if(key2==0)                        //
                  {
                  
                          delay(10);
                          if(key2==0)
                          {      
                                   while(!key2);   //     微调重量-
                                   m__1=m__1+0.10;
                                   if(m__1>=5.10)m__1=5.00;
                                   
                          }
                  
                  }
                  if(key3==0)                        //
                  {
                  
                          delay(10);
                          if(key3==0)
                          {      
                                   while(!key3);   // 微调重量+
                                   m__1=m__1-0.10;
                                   if(m__1<=1.10)m__1=2.50;
                                   
                          }
         
                  }
                  }
}
//****************************************************
//称重
//****************************************************
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;                            //获取实物的AD采样数值。
         
                  Weight_Shiwu= (unsigned int)((float)Weight_Shiwu/m__1+0.05);     //计算实物的实际重量
                                                                                                                                                              //因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。
                                                                                                                                                              //当发现测试出来的重量偏大时,增加该数值。
                                                                                                                                                              //如果测试出来的重量偏小时,减小改数值。
                                                                                                                                                              //该数值一般在4.0-5.0之间。因传感器不同而定。
                                                                                                                                                              //+0.05是为了四舍五入百分位
                  Buzzer= 1;                                 //关闭警报
         }
//     elseif(HX711_Buffer < Weight_Maopi - 30)
//     {
//              Buzzer= 0;                                 //负重量报警
//     }
//     elseif(HX711_Buffer > Weight_Maopi + 24970)             //大于5Kg的最大量程,报警     
//     {
//              Buzzer= 0;
//     }
         if(Weight_Shiwu> 5000 || HX711_Buffer < Weight_Maopi - 30)
         {
                  Buzzer= 0;      
         }
         else
         {
                  Buzzer= 1;
         }
         if(Weight_Shiwu< 5)Weight_Shiwu=0;
         
}
//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi()
{
         HX711_Buffer= HX711_Read();
         Weight_Maopi= HX711_Buffer/100;              
}

[~D%XY`74KNPK9HEE`Z``RB.png (125.96 KB, 下载次数: 57)

[~D%XY`74KNPK9HEE`Z``RB.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表