STM32项目开源:电子秤计价系统(代码+原理图+仿真)

文章目录


一、前言

实物项目成品:

仿真项目成品:

哔哩哔哩开源视频链接(复制浏览器打开):

https://www.bilibili.com/video/BV1TKYg6dEgc/?vd_source=10da4d04d580bd6b34f7298120737c50

(资料分享见文末)

二、项目功能简介

【开源】STM32 单片机电子秤计价系统(代码+原理图+仿真)-编号:CY26030

功能介绍:

(1)液晶屏实时显示皮重、当前重量、物品单价与计算得出的总价。

(2)实体按键可完成参数设置,支持设置物品单价、重量报警阈值。

(3)具备去皮清零与单价清除功能,一键去除容器皮重,一键清空已设置单价。

(4)称重量程 0~10kg,可通过按键自定义设置超重阈值;当检测重量超过设定阈值时,蜂鸣器触发声光报警。 (5)按下确认按键,屏幕画面锁定,保持显示当前重量、单价以及总价。

(6)称重数据通过 WiFi 同步上传到手机 APP;手机端可远程设置单价、执行去皮清零等控制操作。

三、PCB设计

四、原理图设计

五、程序设计

代码如下():

c 复制代码
#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; //按键
/*
u32 Pi_weight;
u32 Weight;
u32 weight_err;
*/
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();
		}
	}
	/*
	OLED_ShowNum(1,7,(int)(Pi_weight - weight_err),4);
	OLED_ShowNum(1,12,(int)(weight_err),4);
	OLED_ShowNum(2,7,(int)(Pi_weight),4);
	*/
	
	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);
	
//	OLED_ShowNum(2,7,Weight,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();
}

六、包含内容

七、资料分享

资料获取:请查看主页介绍搜索或观看开源视频获取

相关推荐
ysu_03141 小时前
基于 STM32 与 TinyML 的端侧手势识别系统
stm32·单片机·嵌入式硬件·mcu
Brilliantwxx1 小时前
【STM32 】把 printf 搬到串口上 —— C 标准 IO 函数重定向与多文件工程搭建(实战串口电灯)
c语言·开发语言·stm32·单片机·嵌入式硬件·架构·ecmascript
LCG元2 小时前
STM32F103 FreeRTOS 任务CPU占用率实测:运行时统计接入、TIM2/DWT计时源对比与优先级饥饿调优
stm32·单片机·嵌入式硬件
blue_ice .2 小时前
DDS原理及简易实现
开发语言·经验分享·笔记·嵌入式硬件·fpga开发
国产化创客2 小时前
创客开发入门(七)Arduino ESP32-WS2812开发
驱动开发·单片机·物联网·智能硬件
计算机源码社2 小时前
【大数据项目实战】基于Python数据挖掘的新能源车充电行为关联风险分析研究-基于Hadoop+Spark的电动汽车故障多维数据可视化
大数据·hadoop·python·数据挖掘·spark·毕业设计·课程设计
BSD_HY3 小时前
薄膜开关矩阵扫描在低功耗MCU上的GPIO扩展实现
单片机·嵌入式硬件·矩阵·人机交互·薄膜开关·源头工厂
国产化创客3 小时前
创客开发入门(五)Arduino IDE 编程基础
单片机·嵌入式硬件·物联网·esp32