当前位置:   article > 正文

361 基于单片机 HX711超市电子秤系统设计【毕设课设】

361 基于单片机 HX711超市电子秤系统设计【毕设课设】

功能描述
电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。

电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计量准确、快速方便,更重要的自动称重、数字显示,对人们生活的影响越来越大,广受欢迎。

本系统的设计主要从硬件电路设计,软件编程调试,实物焊接调试三部分进行详细阐述。硬件电路主要是基于单片机STC89C52为核心的控制单元实现数据的处理,采用压力传感器对数据进行采集,电子秤专用24位AD转换芯片HX711对传感器采集到的模拟量进行AD转换,转换后的数据送到单片机进行处理显示,数据显示由LCD1602液晶实现,液晶显示效果稳定无闪烁。

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/1q64QUwCps34isnbEG7Nz1A?pwd=8888

部分代码展示

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <string.h>
  4. bit bdata flag_key;
  5. #include "main.h"
  6. #include "LCD1602.h"
  7. #include "HX711.h"
  8. #include "keyboard.h"
  9. #include "eeprom52.h"
  10. #define uchar unsigned char
  11. #define uint unsigned int
  12. unsigned long HX711_Buffer = 0;
  13. unsigned long Weight_Maopi = 0;
  14. unsigned long Weight_Maopi_0 = 0;
  15. unsigned int qupi=0;
  16. long Weight_Shiwu = 0;
  17. //键盘处理变量
  18. unsigned char keycode;
  19. unsigned char DotPos; //小数点标志及位置
  20. uint GapValue,GapValue1;
  21. unsigned char idata price; //单价,长整型值,单位为分
  22. unsigned char idata money; //总价,长整型值,单位为分
  23. //定义标识
  24. volatile bit FlagTest = 0; //定时测试标志,每0.5秒置位,测完清0
  25. volatile bit FlagKeyPress = 0; //有键按下标志,处理完毕清0
  26. //校准参数
  27. //因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
  28. //当发现测试出来的重量偏大时,增加该数值。
  29. //如果测试出来的重量偏小时,减小改数值。
  30. //该值可以为小数
  31. //#define GapValue 349
  32. sbit LED=P1^2;
  33. volatile bit ClearWeighFlag = 0; //传感器调零标志位,清除0
  34. //把数据保存到单片机内部eeprom中----------------------------------------------
  35. void write_eeprom()
  36. {
  37. SectorErase(0x1000);
  38. GapValue1=GapValue&0x00ff;
  39. byte_write(0x2000, GapValue1);
  40. GapValue1=(GapValue&0xff00)>>8;
  41. byte_write(0x2001, GapValue1);
  42. byte_write(0x2060, a_a);
  43. }
  44. //把数据从单片机内部eeprom中读出来--------------------------------------------
  45. void read_eeprom()
  46. {
  47. GapValue = byte_read(0x2001);
  48. GapValue = (GapValue<<8)|byte_read(0x2000);
  49. a_a = byte_read(0x2060);
  50. }
  51. //开机自检eeprom初始化--------------------------------------------------------
  52. void init_eeprom()
  53. {
  54. read_eeprom(); //先读
  55. if(a_a != 1) //新的单片机初始单片机内问eeprom
  56. {
  57. GapValue = 3000;
  58. a_a = 1;
  59. write_eeprom(); //保存数据
  60. }
  61. }
  62. //显示单价,单位为元,四位整数,两位小数--------------------------------------
  63. void Display_Price()
  64. {
  65. LCD1602_write_com(0x8c);
  66. LCD1602_write_data(price/100 + 0x30);
  67. LCD1602_write_data(price%100/10 + 0x30);
  68. LCD1602_write_data('.');
  69. LCD1602_write_data(price%10 + 0x30);
  70. }
  71. //显示重量,单位kg,两位整数,三位小数----------------------------------------
  72. void Display_Weight()
  73. {
  74. LCD1602_write_com(0x83);
  75. LCD1602_write_data(Weight_Shiwu/1000 + 0x30);
  76. LCD1602_write_data('.');
  77. LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30);
  78. LCD1602_write_data(Weight_Shiwu%100/10 + 0x30);
  79. LCD1602_write_data(Weight_Shiwu%10 + 0x30);
  80. }
  81. //显示总价,单位为元,四位整数,两位小数--------------------------------------
  82. void Display_Money()
  83. {
  84. if (money>9999) //超出显示量程
  85. {
  86. LCD1602_write_com(0x80+0x40+6);
  87. LCD1602_write_word("---.-");
  88. return;
  89. }
  90. if (money>=1000)
  91. {
  92. LCD1602_write_com(0x80+0x40+6);
  93. LCD1602_write_data(money/1000 + 0x30);
  94. LCD1602_write_data(money%1000/100 + 0x30);
  95. LCD1602_write_data(money%100/10 + 0x30);
  96. LCD1602_write_data('.');
  97. LCD1602_write_data(money%10 + 0x30);
  98. }
  99. else if (money>=100)
  100. {
  101. LCD1602_write_com(0x80+0x40+6);
  102. LCD1602_write_data(0x20);
  103. LCD1602_write_data(money%1000/100 + 0x30);
  104. LCD1602_write_data(money%100/10 + 0x30);
  105. LCD1602_write_data('.');
  106. LCD1602_write_data(money%10 + 0x30);
  107. }
  108. else if(money>=10)
  109. {
  110. LCD1602_write_com(0x80+0x40+6);
  111. LCD1602_write_data(0x20);
  112. LCD1602_write_com(0x80+0x40+7);
  113. LCD1602_write_data(0x20);
  114. LCD1602_write_data(money%100/10 + 0x30);
  115. LCD1602_write_data('.');
  116. LCD1602_write_data(money%10+ 0x30);
  117. }
  118. else
  119. {
  120. LCD1602_write_com(0x80+0x40+6);
  121. LCD1602_write_data(0x20);
  122. LCD1602_write_com(0x80+0x40+7);
  123. LCD1602_write_data(0x20);
  124. LCD1602_write_com(0x80+0x40+8);
  125. LCD1602_write_data(0 + 0x30);
  126. LCD1602_write_data('.');
  127. LCD1602_write_data(money%10 + 0x30);
  128. }
  129. }
  130. //数据初始化-------------------------------------------------------------
  131. void Data_Init()
  132. {
  133. price = 0;
  134. DotPos = 0;
  135. }
  136. //定时器0初始化----------------------------------------------------------
  137. void Timer0_Init()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/512713
推荐阅读
相关标签
  

闽ICP备14008679号