基于STM32f103的电子秤系统设计

许久前整理的一项课程设计,具备以下资源:

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 

砰砰恰!!!

猜你喜欢

转载自blog.csdn.net/qq_51399582/article/details/129846674
今日推荐