【STM32项目开源】基于STM32的智能电子秤

目录

一、设计背景和意义

1.1设计背景

1.2设计意义

二、实物效果展示

2.1实物图片

2.2实物演示视频

三、硬件功能简介

3.1项目功能详解

3.2元器件清单

四、主框图与软件流程图

五、硬件PCB展示

六、软件程序设计

七、项目资料包内容

资料获取:查看主页介绍"充哥单片机设计"


一、设计背景和意义

1.1设计背景

近年来,随着物联网技术、嵌入式系统以及智能终端设备的快速发展,传统电子秤正经历着从单一称重工具向多功能智能设备的转型。在零售业、物流仓储、家庭厨房等应用场景中,用户对电子秤的需求已不仅限于基本的重量测量,更希望其具备数据记录、价格计算、远程监控等智能化功能。目前市场上的电子秤产品主要分为两大类:一类是功能简单、价格低廉的传统电子秤,仅能实现基本称重和显示功能;另一类是面向商业应用的高端智能电子秤,虽然功能丰富但价格昂贵,且系统复杂度高,不适合普通用户使用。

1.2设计意义

本课题研发的智能电子秤系统,在技术创新层面具有多重突破价值。以 STM32F103C8T6 为核心的主控方案,充分发挥其高性能处理能力与丰富外设资源,为系统的多功能集成奠定硬件基础。HX711 称重模块与主控芯片的协同设计,通过高精度 A/D 转换与数字化信号传输,将称重误差控制在更细微的范围内,推动电子秤从 "粗略计量" 向 "精准感知" 升级。蓝牙模块与手机 APP 的联动机制,打破了传统电子秤的信息孤岛状态,构建起 "设备 - 终端 - 用户" 的实时交互链路,为计量设备的物联网化改造提供了可复制的技术范式。这种 "硬件模块化 + 软件智能化" 的设计思路,也为嵌入式系统在计量领域的应用积累了实践经验,有助于推动相关技术的标准化与产业化。​

二、实物效果展示

2.1实物图片

2.2实物演示视频

【开源】基于STM32的智能电子秤

三、硬件功能简介

3.1项目功能详解

1)液晶显示屏幕显示当前的重量

2)按键可以设置当前物品的单价

3)具有去皮清零的功能

4)按键确认显示当前的重量、单价、总价

5)称重的重量发送蓝牙App显示

3.2元器件清单

  1. 主控STM32F103C8T6最小系统板
  2. 0.96OLED显示屏幕
  3. HX711称重模块
  4. JDY31-SPP蓝牙模块
  5. 矩阵按键

四、主框图与软件流程图

主框图

流程图

五、硬件PCB展示

六、软件程序设计

cpp 复制代码
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Timer.h"
#include "OLED.h"
#include "BEEP.h"
#include "KEY.h"
#include "Weight.h"


uint8_t TIM2_Flag = 0;//定时器2中断标志

uint8_t keynum; //按键
float Pi_weight;
float Weight;
float weight_err;
char price[7];
float single_price;
float total_price;
uint8_t  decimal;//小数位

void show_init();
void set_price();//设置单价

void main_Init(void);
void main_loop(void);


int main(void)
{
	main_Init();
	while(1)
	{
		main_loop();
	}
}

void main_Init()
{
	OLED_Init();
	Timer_Init();
	BEEP_Init();
	OLED_Clear();
	HX711_GPIO_Init();
	OLED_ShowChinese(2,2,"正在初始化...");
	Delay_ms(2000);			//对接成功界面停留一定时间
	weight_err = Get_Tare();
	Pi_weight = Get_Tare();	
}

void main_loop()
{
	show_init();
	keynum = KeyScan();
	if(keynum != 255)
	{
		if(keynum == remove_tare)
		{
			Pi_weight = Get_Tare();
		}else if(keynum == set)
		{
			set_price();
		}
	}
	
	Weight = 1.73*Get_Weight(Pi_weight);
	if(Weight < 0.5)Weight = 0;//去除干扰
	total_price = single_price*Weight/1000;
	OLED_ShowNum(1,7,(int)(Pi_weight - weight_err)/1000,1);
	OLED_ShowChar(1,8,'.');
	OLED_ShowNum(1,9,(((Pi_weight - weight_err)/1000)-(int)((Pi_weight - weight_err)/1000))*10000,4);
	OLED_ShowNum(2,7,(int)(Weight)/1000,1);
	OLED_ShowChar(2,8,'.');
	OLED_ShowNum(2,9,(((Weight)/1000)-(int)((Weight)/1000))*10000,4);
	
	if(price[0] == '\0')
	{
		OLED_ShowNum(3,7,0,6);
	}else 
		OLED_ShowString(3,7,price);
	OLED_ShowNum(4,7,(int)total_price,5);
	OLED_ShowChar(4,12,'.');
	OLED_ShowNum(4,13,(total_price-(int)total_price)*10,1);
	Delay_ms(100);
}

void show_init()
{
	OLED_ShowChinese(1,1,"皮重:");
	OLED_ShowChinese(1,7,"千克");
	OLED_ShowChinese(2,1,"重量:");
	OLED_ShowChinese(2,7,"千克");
	OLED_ShowChinese(3,1,"单价:");
	OLED_ShowChinese(3,8,"元");
	OLED_ShowChinese(4,1,"价格:");
	OLED_ShowChinese(4,8,"元");
}


void set_price()
{
	OLED_Clear();
	OLED_ShowChinese(1,3,"请输入单价");
		uint8_t index = 0;
			uint8_t dot_flag = 0;
			uint8_t end_flag = 0;
		single_price = 0;
	decimal = 0;
			price[0] = '\0';
			while(1)
			{
				if(index == 6)break;
				keynum = KeyScan();
				if(keynum == ok)
				{
					break;
				}else if(keynum >=0 && keynum <= 9 && end_flag == 0)
				{
					price[index] = '0' + keynum;
					if(index < 6)
						price[index+1] = '\0';
					OLED_ShowChar(3,7+index,price[index]);
					if(index > 0 && price[index-1] == '.')
					{
						single_price += keynum*0.1;
						decimal = keynum;
						end_flag = 1;
					}else 
					{
						single_price *= 10;
						single_price += keynum;
					}
					index++;
				}else if(keynum == dot)
				{
					if(index > 0)
					{
						if(dot_flag==0)
						{
							dot_flag = 1;
							price[index] = '.';
							if(index < 6)
							price[index+1] = '\0';
							OLED_ShowChar(3,7+index,price[index]);
							index++;
						}							
						
					}
				}
				
			}
			OLED_Clear();
}

七、项目资料包内容

资料获取:查看主页介绍"充哥单片机设计"

相关推荐
学不动CV了5 小时前
C语言(FreeRTOS)中堆内存管理分析Heap_1、Heap_2、Heap_4、Heap_5详细分析与解析(二)
linux·c语言·arm开发·stm32·单片机·51单片机
XINVRY-FPGA9 小时前
XCVU9P-2FLGA2104E Xilinx AMD Virtex UltraScale+ FPGA
人工智能·嵌入式硬件·fpga开发·硬件工程·dsp开发·射频工程·fpga
10001hours11 小时前
(基于江协科技)51单片机入门:7.LED点阵屏
科技·嵌入式硬件·51单片机
10001hours12 小时前
(基于江协科技)51单片机入门:9.蜂鸣器
科技·嵌入式硬件·51单片机
transuperb13 小时前
51单片机红外遥控
单片机·嵌入式硬件
Archie_IT17 小时前
嵌入式八股文篇——P1 关键字篇
c语言·开发语言·单片机·mcu·物联网·面试·职场和发展
智者知已应修善业20 小时前
【51单片机计时器1中断的60秒数码管倒计时】2023-1-23
c语言·经验分享·笔记·嵌入式硬件·算法·51单片机
heisd_121 小时前
使用STM32CubeMX创建新的工程,使用vscode进行编码和调试
vscode·stm32·嵌入式硬件
范纹杉想快点毕业21 小时前
ZYNQ7045芯片中UART实现RS422通信详解,50000字解析,C语言,嵌入式开发,软件开发
c语言·笔记·stm32·单片机·嵌入式硬件·mcu·fpga开发