【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();
}

七、项目资料包内容

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

相关推荐
wanglong37132 小时前
STM32单片机PWM驱动无源蜂鸣器模块C语言程序
stm32·单片机·1024程序员节
清风6666664 小时前
基于单片机的故障检测自动保护智能防夹自动门设计及LCD状态显示系统
单片机·毕业设计·课程设计·1024程序员节·期末大作业
nuoyigui98899 小时前
modbus rtu通信协议总结
单片机
不脱发的程序猿10 小时前
如何检测和解决I2C通信死锁
stm32·单片机·嵌入式·1024程序员节
STC_USB_CAN_805110 小时前
STC32G144K246,高速PWM@240Mhz 运行测试
单片机·嵌入式硬件·51单片机
禾仔仔10 小时前
USB2.0枚举流程(以鼠标为例)——从零开始学习USB2.0协议(四)
嵌入式硬件·mcu·计算机外设·1024程序员节
hhh_li10 小时前
Keil5 MDK安装Compiler Version5(即ARM Compiler 5,简称AC5)编译器
stm32
Despacito0o10 小时前
Keil MDK-ARM 5.42a 完整安装指南(2025.4.19最新版)
arm开发·stm32·单片机·嵌入式硬件·物联网·51单片机·嵌入式实时数据库
来块小鱼饼干(≧^.^≦)10 小时前
教你如何使用VSCode的EIDE插件开发STM32(包括任何ARM内核芯片)最详细教程
ide·vscode·stm32·arm·keil
倔强吧!青铜10 小时前
嵌入式八股文总结(ARM篇)
单片机·嵌入式硬件