本设计是一款基于STM32单片机的电子秤系统,随着科学技术的不断发展,传统的机械秤逐渐被电子秤所取代,相比于计量不精确,费时费力的机械秤,电子秤采用在方便快捷的同时,又保证了结果的准确性。本次设计采用STM32单片机作为处理器,控制各个传感器和外设,采用LCD1602液晶屏作为显示器,显示检测到的重量,压力传感器用于称重,通过检测物体对传感器造成的压力,通过公式计算得出物体的重量,此外通过16个按键组成矩阵键盘,可以输入数字,并进行加减乘除操作,通过重量和单价计算出总价。
主要由STM32单片机+最小系统+LCD1602液晶显示模块+HX711模块+LED模块+蜂鸣器模块+矩阵按键模块+10kg压力传感器;如图:
(1)液晶显示当前重量大小。
(2)按键可以设置当前物品单价。
(3)具有去皮清零功能。
(4)按键确认按键液晶显示当前重量,单价,总价。
(1)原理图主要采用AD软件进行设计,如图:
(2)PCB图如下:
(1)程序流程图
(2)主程序源码
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); } }
如需资料请关注公众号“单片机实例设计”,首页回复“STM32电子秤”获取资料;