最近设计了一个项目基于单片机的超市电子秤设计与实现,与大家分享一下:
一、基本介绍
项目名:超市电子秤
项目编号:mcuclub-dz-130
单片机类型:STC89C52
具体功能:
1、通过DS1302获取时间
2、通过4*4矩阵键盘输入商品编号(4位),‘0-9’数字键,’*‘为单个数据删除、’#‘为小数点,’D‘为确定键
3、通过AT24C02存储商品数据,包括名称、单价、编号,通过’A‘可进入查看,通过’B‘为’+‘,’C‘复用为‘-’,当按下’D确定键后,进入修改该商品单价,单价处闪烁,可进行修改,修改好后再次按下’D‘确定键后,修改成功
编号:1001 商品:水果 单价:5.00元/500g
编号:1002 商品:蔬菜 单价:3.00元/500g
编号:1003 商品:零食 单价:6.00元/500g
编号:1004 商品:水产品 单价:10.00元/500g
编号:1005 商品:乳蛋制品 单价:3.00元/500g
编号:1006 商品:肉制品 单价:15.00元/500g
4、通过HX711称重模块进行称重,并可通过4*4矩阵键盘输入编号,从而得出总价
5、通过’C‘按键切换计数模式,在此模式下,输入单个商品重量,再通过称重模块进行总体称重,从而获得商品个数
6、通过AT24C02保存出售记录,通过‘B’键查看,包括出售时间、商品名、总价
7、通过LCD12864显示各测量数据
二、51实物图
单片机型号:STC89C52
板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。
供电接口:TYPE-C
三、原理图
软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图
四、PCB图
由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
五、系统框图
本设计以单片机为核心控制器,加上其他模块一起组成此次设计超市电子秤的整个系统,其中包括中控部分、输入部分和输出部分。中控部分采用了单片机控制器,其主要作用是获取输入部分的数据,经过内部处理,逻辑判断,最终控制输出部分。输入由四部分组成,第一部分是供电模块,给整个系统进行供电;第二部分是称重模块,通过该模块检测当前物品的重量;第二部分是时钟模块,通过该模块获取时间;第四部分是矩阵键盘,通过该模块设计商品单价模式、查看记录;计数等。输出由通过显示模块显示时间、商品编号、重量等。除此之外,存储模块即作为输入又作为输出,将出售记录包括出售时间、商品名、总价信息进行存储。具体系统框图如图3.1所示。
六、软件设计流程
七、部分程序展示
软件版本:keil5
逻辑程序和驱动程序分开,分布于main.c和其他.c文件
*******处理函数
*****/
void Manage_function(void)
{
if(flag_display == 0) //测量界面
{
if(flag_steps == 1 || flag_mode == 1 || flag_qx == 1) //没有检测到重量时,复位所有数据
{
if(weight_value < 20)
{
flag_steps = 0;
memset(input_buf,'\0',sizeof(input_buf));
input_buf[0] = '0';
input_num = 0;
point_num = 0;
flag_point = 0;
flag_dange = 0;
flag_qx = 0;
}
}
}
}