许久前整理的一项课程设计,具备以下资源:
1.论文:25页,近9000字
2.程序:Keil5源程序
3.实物:实测可用
软件程序上传在百度网盘,请自行下载:
链接:https://pan.baidu.com/s/1HFRLvQPg-r9QLtAxO0SUiQ?pwd=ibfb
提取码:ibfb如需要本文更多相关资料,请关注VX公众号:Rain21321
发送:获取基于STM32f103的电子秤系统设计更多资源
(1)论文部分内容:
基于STM32f103的电子秤系统设计
摘要
称重技术自古以来就备受人们重视,作为一种计量手段,它广泛应用于各个领域。随着技术水平的飞速发展,科研实力的快速提升,将称重技术与电子技术相结合的产物——电子衡器横空出世。作为一种无处不在的现代新型称重仪器,它能帮助我们精确测量物体重量并将其显现出来,与我们日常生活息息相关。
电子秤将检测与转换技术、计算机技术、信息处理、数字技术等技术综合为一体,主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,再配以按键、显示电路等。其不但计量准确,而且快速方便,日益增加的功能诸如自动称重、数字显示等也对人们生活的影响越来越大,广受欢迎。
本次课程设计的基于STM32f103的电子秤系统主要从系统整体设计、硬件电路设计,系统软件设计,三部分进行详细阐述。硬件电路设计主要是基于嵌入式STM32f103为核心的控制单元来实现数据的处理,采用压力传感器对数据进行采集,使用电子秤专用24位AD转换芯片HX711对传感器采集到的模拟量进行AD转换,转换后的数据送到STM32f103进行处理显示,数据显示由LCD1602液晶实现,通过按键实现功能的选择,并且加入了LED闪烁和蜂鸣器报警等。
本次课程设计的电子秤反应灵敏、准确度高、显示直观、性能稳定,、操作简单、价格低廉,满足基本需求,并且具有较好的标定校准方法。
关键词: STM32f103;压力传感器;电子秤;HX711
二、系统整体设计方案
2.1电子秤系统总体框架设计
本次设计中使用压力传感器采集物体重量的变化,通过专为高精度电子秤而设计的24位A/D转换器芯片HX711芯片实现A/D转换,再将数据送给STM32f103芯片处理;采用LCD1602液晶显示物体重量等信息;LED灯和蜂鸣器实现超量程报警功能;通过3个键盘输入装置控制电子秤功能的实现,使电子秤实现称重、去皮、校准的功能。
系统总体框架设计的结构简如图2-1所示:
图2-1:系统设计的结构简图
(2)部分软件程序:
1.#include <stm32f10x.h>
2.#include "delay.h"
3.#include "led.h"
4.#include "lcd1602.h"
5.#include "buzzer.h"
6.#include "rtc.h"
7.#include "usart.h"
8.#include "stmflash.h"
9.#include "IOin.h"
10.#include "IOout.h"
11.#include "hx711.h"
12.#include "esp8266.h"
13.#include "key_s.h"
14.
15.u8 setRTC=0;
16.
17.#define LEN 3
18.u16 eep[LEN];
19.#define weight_mg_L eep[1]
20.
21.u16 weight_mg=0;
22.int main(void)
23.{
24. u8 key;
25. u16 cnt = 0;
26. u8 refresh = 1;
27. u8 set=0;
28.
29. Stm32_Clock_Init(9);
30. delay_Init(72);
31. uart_init(72,9600);
32. LCD_Init();
33. LED_Init();
34. Buzzer_Init();
35. KEY_Init();
36.
37. LCD_Clear();
38. LCD_GotoXY(0,0);
39. LCD_Print("HX711 init... ");
40. HX711_Init();
41. Beep(200);
42.
43. Flash_Read(eep,LEN);
44. GapValue = eep[0];
45.//-----------------------------------------------------------
46. if(Calib_HX711())
47. {
48. eep[0] = GapValue;
49. Flash_Write(eep,LEN);
50. }
51.//-----------------------------------------------------------
52.
53. printf("usart send OK!\r\n\r\n");
54. LCD_GotoXY(0,0);
55. LCD_Print("PRESS :000`000g ");
56. LCD_GotoXY(0,1);
57. LCD_Print("LIMIT :000`000g ");
58.
59. while(1)
60. {
61. delay_ms(1);
62. cnt++;
63. if(cnt>200)
64. {
65. cnt = 0;
66. LED = !LED;
67. key = (KeyScan(0));
68. if(key)
69. {
70. Beep(100);
71. //Play_Voice(33);
72. refresh = 1;
73. if(key==3)
74. {
75. set++;
76. if(set>2)
77. {
78. set = 0;
79. Flash_Write(eep,LEN);
80. }
81.
82. }
83. else if(key==1)
84. {
85. if(set==1)
86. {
87. buzzer = 0;
88.
89. if(set==0)weight_mg = Get_Weight();
90. refresh = 1;
91. sendAPP();
92. if(set==0)
93. {
94. if(weight_mg >= weight_mg_L)buzzer = LED;//0ÓÐЧ
95. if(Weight_Err)buzzer = LED;
96. }
97.
98.
99. }
100.
101. weight_mg_L+=1000;
102. }
103. else if(set==2)
104. {
105. weight_mg_L++;
106. }
107. }
108. else if(key==2)
109. {
110. if(set==1)
111. {
112. if(weight_mg_L>=1000)weight_mg_L-=1000;
113. else weight_mg_L = 0;
114. }
115. if(set==2)
116. {
117. if(weight_mg_L>0)weight_mg_L--;
118. }
119. }
120.
121. }
122. if(refresh)
123. {
124. refresh = 0;
125. LCD_GotoXY(0x7,0);
126. if(Weight_Err)LCD_WrDat('-');else
127. LCD_WrNUM(weight_mg/100000%10);
128. LCD_WrNUM(weight_mg/10000%10);
129. LCD_WrNUM(weight_mg/1000%10);
130. LCD_GotoXY(0xb,0); LCD_WrNUM(weight_mg/100%10);
(3)实物图:
希望这篇文章能够对您有所帮助。
如有错误、疑问和侵权,欢迎评论留言联系作者。VX公众号:Rain21321