找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 930|回复: 1
收起左侧

单片机电子秤的设计与制作 具有去皮,校准,报警等你功能

[复制链接]
ID:1068380 发表于 2023-4-7 23:20 | 显示全部楼层 |阅读模式
该电子秤具有去皮,校准,报警等功能

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png 2023-04-07_231909.png 51hei.gif

单片机源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #include<LCD1602.h>
  4. #include<HX711.h>

  5. sbit key1 = P3^0;//去皮键
  6. sbit key2 = P3^1;//校准加
  7. sbit key3 = P3^2;//校准减
  8. sbit LED=P1^1;  //报警灯
  9. sbit Buzzer=P1^0;//蜂鸣器
  10. unsigned long Weight_Shiwu = 0;//记录实物的质量
  11. unsigned long Weight_Maopi = 0;//记录毛皮的质量

  12. void Delay(unsigned int n);//延时子程序
  13. void Get_Maopi();//获取毛皮的质量
  14. void Get_Weight();//获取实物的质量
  15. void Keyscan();
  16. void baojing();
  17. void stopbaojing();

  18. /*实际物体的重量(以克为单位)=HX711输出的24位数字量/2147.5,在实际测量中,可以调整jiaozhunxishu的值,进行校正*/
  19. double jiaozhunxishu=2147.5;

  20. int main()
  21. {
  22.         Init_LCD1602();                //LCD1602初始化
  23.         LCD1602_write_com(0x80);                //光标定位在第一行首位
  24.         LCD1602_write_word("Weight=");               
  25.         LCD1602_write_com(0x80+0x40);  //光标定位在第二行首位
  26.         LCD1602_write_word("MAX=999g");
  27.         Delay(1000);                //1s
  28.         while(1)
  29.         {
  30.                 Keyscan();//扫描按键,确定是否去皮,是否校正
  31.                 Get_Weight();//获取实物质量
  32.             if(Weight_Shiwu>=1000)
  33.                 baojing();
  34.                 else
  35.                 {
  36.                 stopbaojing();
  37.                 LCD1602_write_com(0x80+0x07);
  38.                 LCD1602_write_data(Weight_Shiwu%1000/100 + 0X30);//这里加0x30表示将数字一模一样地显示在LCD1602       
  39.         LCD1602_write_data(Weight_Shiwu%100/10 + 0X30);
  40.         LCD1602_write_data(Weight_Shiwu%10 + 0X30);
  41.                 LCD1602_write_word("g");
  42.                 }
  43.         }       
  44. }

  45. /*获取实物质量*/
  46. void Get_Weight()
  47. {
  48.         Weight_Shiwu = HX711_Read();
  49.         Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/jiaozhunxishu);
  50.         Weight_Shiwu = Weight_Shiwu - Weight_Maopi;
  51. }
  52. /*报警电路*/
  53. void baojing()
  54. {
  55.         Buzzer = !Buzzer;        
  56.         LED=!LED;
  57.     LCD1602_write_com(0x80+0x07);
  58.     LCD1602_write_word("---");
  59.     Delay(50);
  60. }
  61. /****************************
  62. 函数名:stopbaojing()
  63. 功能:  停止报警
  64. 详细:  Proteus中使用的蜂鸣器有源,所以给低电平就不响,LED给低电平就不亮
  65. ***************************/
  66. void stopbaojing()
  67. {
  68.         Buzzer =1;        
  69.         LED=1;       
  70. }

  71. /*延时子程序*/
  72. void Delay(unsigned int n)
  73. {
  74.         int i, j;
  75.         for(i=0; i<n; i++)
  76.                 for(j=0; j<110; j++);
  77. }



  78. /*获取毛皮质量*/               
  79. void Get_Maopi()
  80. {
  81.         Weight_Maopi = HX711_Read();
  82.         Weight_Maopi = (unsigned int)((float)Weight_Maopi/jiaozhunxishu);
  83. }



  84. /*************************************
  85. 函数名: Keyscan1()
  86. 功能:   按键扫描  
  87. 详细:   判断是否要去皮,是否要进行校正,此处的校正是长按按键,就会一直进行校正,不是按一下校正一次
  88. **************************************/
  89. void Keyscan()
  90. {
  91.         if(key1 == 0)   //是否去皮
  92.                 Delay(10);
  93.         if(key1 == 0)
  94.                 Get_Maopi();
  95.        
  96.         if(key2 == 0)   //校准加
  97.                 Delay(10);
  98.         if(key2 == 0)
  99.                 jiaozhunxishu=jiaozhunxishu-0.1;
  100.        
  101.         if(key3 == 0)  //校准减
  102.                 Delay(10);
  103.         if(key3 == 0)
  104.                 jiaozhunxishu=jiaozhunxishu+0.1;
  105. }
复制代码

Keil代码与Proteus8.13仿真下载:
电子秤.7z (170.58 KB, 下载次数: 41)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:689425 发表于 2023-4-13 16:54 | 显示全部楼层
很实用啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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