硬件设计
本设计是一款基于STM32单片机的电子秤系统,随着科学技术的不断发展,传统的机械秤逐渐被电子秤所取代,相比于计量不精确,费时费力的机械秤,电子秤采用在方便快捷的同时,又保证了结果的准确性。本次设计采用STM32单片机作为处理器,控制各个传感器和外设,采用LCD1602液晶屏作为显示器,显示检测到的重量,压力传感器用于称重,通过检测物体对传感器造成的压力,通过公式计算得出物体的重量,此外通过16个按键组成矩阵键盘,可以输入数字,并进行加减乘除操作,通过重量和单价计算出总价。
实物主要由STM32单片机+最小系统+LCD1602液晶显示模块+HX711模块+LED模块+蜂鸣器模块+矩阵按键模块+10kg压力传感器;如图:
设计功能
1.液晶显示当前重量大小。
2.按键可以设置当前物品单价。
3.具有去皮清零功能。
4.按键确认按键液晶显示当前重量,单价,总价。
设计原理图
原理图如图:
PCB图如下:
主程序源码
int main(void)
{
u8 test_interval = 0;
delay_init(); //延时函数初始化
KEY_GPIO_Init(); //按键初始化
HX711_GPIO_Init();
delay_ms(500); //上电瞬间加入一定延时在初始化
LCD_Init(); //屏幕初始化
delay_ms(300);
LCD1602_write_com(0x80); //指针设置
LCD1602_write_word("Welcome to use! ");
To_Zero();
LCD1602_write_com(0x80); //指针设置
LCD1602_write_word("WE: . PR: . ");
LCD1602_write_com(0x80+0x40); //指针设置
LCD1602_write_word("MON: . ");
Display_Price();
while(1)
{
//每0.5秒称重一次
if (test_interval ++ > 25)
{
test_interval = 0;
//称重,得到重量值weight,单位为g
get_weight();
//如果超量程,显示‘-.---’
if (weight >= 10000)
{
pre_weight = 10000;
LCD1602_write_com(0x83);
LCD1602_write_word("-.---");
}
//如果不超量程
else
{
//显示重量值
if (pre_weight != weight)
{
pre_weight = weight;
Display_Weight();
}
//如果单价设定好了,则计算价格
if (FlagSetPrice == 1)
{
money = weight*price/1000; //money单位为分
//显示总金额
if (pre_money != money)
{
pre_money = money;
Display_Money();
}
}
else
{
LCD1602_write_com(0x80+0x40+4);
LCD1602_write_word(" . ");
}
}
}
//获取按键
keycode = KEYSCAN();
//有效键值0-15
if ((keycode<16)&&(FlagKeyPress==0))
{
FlagKeyPress = 1;
KeyPress(keycode);
FlagKeyPress = 0;
delay(100);
}
delay(1);
}
}
资料链接:https://pan.baidu.com/s/1f0uTnWZuRoySwCBzyoUp9g?pwd=r4lo
提取码:r4lo