实践项目2-自动计价电子秤
自动计价电子秤
一、功能说明
基于AVR单片机设计一自动计价电子秤。根据输入的价格以及检测的重量自动计算总价并打印(串口模拟)。
二、具体要求
1、开机后实时检测重量并显示;
2、通过按键输入并显示价格,具有修改功能;
3、确认后自动计算并显示总价;
4、实时显示单价、重量和总价信息;
5、按下“打印”键后,通过串口发送单价、重量和总价信息;
6、,具有故障检测报警功能;
三、自动计价电子秤报告
摘要:自动计价电子秤使用AVR系列的ATmega16单片机作为主控芯片,通过采集压力传感器MPX4115产生的模拟信号,并将其通过其内部的ADC资源将模拟信号转换成对应的数字信号,并将其显示在八位共阳数码管上。同时设置了四个按键作为系统的单价加、减、计算总价、以及串口显示的功能。我们不仅可以通过数码管,也可以通过串口助手实时的显示出对应的单价、重量、总价的数据。
关键词:ATmega16 压力传感器 ADC 串口
1 设计要求
该自动报价系统要求能够实时的显示出设置的单价、称重的重量,并且在确认好之后计算总价并显示出来。首先该系统需要加入压力传感器得出重量数据,然后通过按键系统能够改变对应物品的单价,这时显示模块就会实时显示物品的重量和单价,待确认之后,按下确认按键计算出对应物品的总价。最后一个按键是串口打印的功能按键,可以通过串口向外发送单价、重量、总价信息。还有,当出现故障的时候,可以进行故障检测的报警提示。
2 总体设计
2.1 系统组成及工作原理
根据题目中的要求,系统共分为单片机处理模块、重量检测模块、按键控制模块、数码管显示模块、串口发送模块。系统的总体框图如图2.1所示。

图2.1 系统总体框图
(1)、单片机处理模块:单片机处理模块负责将重力传感器传递的模拟信号用其内部的ADC通道进行AD转换,同时检测按键数据进行相应的逻辑运算,最后将数据通过串口和数码管显示出来。
(2)、质量检测模块:给单片机的ADC通道传递所称物理重量的模拟信号,以便其进行AD转换。
(3)、按键控制模块:总共四个按键,牵连个按键对物品的单价进行加或减,第三个按键负责计算总价,第四个按键是串口打印按键,将处理好的重量、单价、总价通过串口发送出去。
(4)、串口发送模块:待串口配置好以及数据处理完之后,将对应的数据发送出去,并可以通过串口助手显示出来。
(5)、数码管显示模块:负责显示物品的重量和单价,待计算总价按钮按下之后,显示物品的总价。
2.2 称重传感器测量原理
称重传感器是用来将重量信号或压力信号转换成电量信号的转换装置。称重传感器采用金属电阻应变计组成测量桥路,利用金属电阻丝在张力作用下伸长变细,电阻增加的原理,即金属电阻随所受应变而变化的效应而制成的(应变,就是尺寸的变化)。称重传感器的构造原理金属电阻具有阻碍电流流动的性质,即具有电阻,其阻值依金属的种类而异。同一种金属丝,一般来讲,越是细长,其电阻值就越大。当金属电阻丝受外力作用而伸缩时,其电阻值就会在某一范围内增减。因此,将金属丝(或膜)紧贴在被测物体上,而且这种丝或膜又很细或很薄,粘贴又十分完善,那么,当被测物体受外力而伸缩时,金属电阻丝(膜)也会按比例伸缩,其阻值也会相应变化。称重传感器就是将金属电阻应变计粘贴在金属称重梁上进行测量重量信号的。
3 硬件设计
3.1 单片机处理电路
单片机选型用的是AVR系列的ATmega16型单片机,ATmega16单片机是一款高性能、低功耗的8位AVR微处理器,具有先进的RISC结构,内部有大容量的ROM、RAM、Flash和EEPROM,集成4通道PWM,SPI串行外设接口,同时具有8路10位A/D转换器,对于数据采集系统而言,外部无需单独的A/D转换器,从而可节省成本.另外,该单片机提供JTAG调试接口,可采用自制的简易JTAG仿真器进行程序调试。
单片机处理电路的仿真图如图3.1所示。
图3.1 单片机处理电路的仿真图
3.2 重量检测电路
重量检测电路的是MPX4115模块,这是一款称重传感器,其工作原理在2.2中提到过,这里就不再叙述了。它的一脚对应是数据输出端,连接的是单片机的PA1口,对应的是ADC1通道,可以通过其加减对其当前称重的数据进行调整,用此方法来仿真其称重的具体数据。重量检测电路的仿真图如图3.2所示。
图3.2 重量检测电路的仿真图
3.3 按键控制电路
按键控制电路共设置了四个按键,连接到单片机的PC1-PC4口,不按下按键的时候,端口检测到的是高电平信号,按下去之后,端口检测的是低电平信号。共有四个按键,第一个和第二个按键是对物品单价进行加或减,第三个按键是开始计算总价,第四个按键是通过串口发送数据。按键控制电路的仿真图如图3.3所示。
图3.3 按键控制电路仿真图
3.4 数码管显示电路
本系统的数据显示电路用了八位共阴数码管进行显示,一开始数码管显示的数据左面是重量数据,右面是单价数据,按下去之后,则显示的是总价数据。数码管的位选和段选端接到单片机相应的IO口端。
图3.4 数码管显示电路仿真图
3.5 报警模块
根据题目要求,该设计还设置了报警模块,当重量超过80的时候,对应的LED灯点亮,表示进行报警。报警模块的仿真图如图3.5所示。
图3.5 报警模块仿真图
3.6 串口发送模块
为了模拟串口发送,需要用到虚拟串口,则需要在仿真中加入RS232接口的串口元件,即图中的COMPIM,电脑中需要安装虚拟串口,配置完对应的串口和波特率、数据位、停止位等数据之后,就可以通过串口助手显示单片机发送的数据了。串口发送模块的仿真图如图3.6所示。
图3.6 串口发送模块仿真图
4. 程序设计
4.1 程序顶层设计
按照题目中的要求,本设计的程序算法共分为按键检测与控制程序、串口发送程序、主程序。
4.2主程序设计
主程序的工作流程图如图4.1所示。首先进行单片机初始化,然后进行其他功能模块的初始化,接下来称重传感器工作输出所称物体的重量数据,然后单片机通过AD转换将重物的模拟数据转换成相应的数字数据,即得到物体重量。然后判断是否重量是否超过80,是的话就进行相应的报警。
然后通过第一个和第二个按键得到物体的单价,待单价和重量数据都准备好之后,计算总价,并且通过数码管和串口发送到串口助手进行数据显示。整个程序的完整工作流程即结束。

图4.1 主程序的工作流程图
4.3 按键检测与控制程序
按键检测与控制程序的流程图如图4.2所示,首先进行按键初始化,然后判断单价按键是否按下,如果按下,则通过其按下的次数和组合得到单价数据,如果没有按下,则继续等待;然后判断计算总价按键是否按下,如果按下则计算得到总价数据,如果没有按下,则继续等待;接着判断串口打印按键。如果按下,则通过串口发送数据,如果没有按下,则继续等待。
4.4 串口发送程序流程图
串口发送程序的流程图如图4.4所示。首先进行初始化,然后设置波特率,然后设置串口的数据位、校验位、停止位等配置数据,然后就可以发送数据。

图4.3 按键检测与控制程序流程图

图4.4 串口发送程序流程图
5 仿真测试
5.1 称重数据显示
数码管显示的数据分为两个,A后面的数据是物体的总重,B后面的数据是物体的单价。一开始物体的重量是73.8,对应数码管显示的数据为74.1,显示的效果如图5.1所示。然后改变物体重量为75,显示的数据为75.5,显示的效果图如图5.2所示。误差进不超过百分之1。

图5.1 实重为73.8的称重显示仿真图

图5.2 实重为75的称重显示仿真图
5.2 单价改变测试
单价需要通过前两个按键进行控制,每按一下,单价变化0.1,一开始按第一个按键3次,将其单价变为0.3,仿真效果图如图5.3所示,然后按第二个按键1次,将其单价变为0.2,仿真效果图如图5.4所示。
图5.3 单价变为0.3的仿真图
图5.4 单价变为0.2的仿真图
5.3 总重计算测试
首先重量显示为75.5,单价为0.3,按下计算总价按钮,总价应该为22.65显示效果图如图5.5所示;接着重量显示为75.5,单价为0.2,按下计算总价按钮,总价应为15.1,显示效果图如图5.6所示。
图5.5 总价为22.65的仿真图
图5.5 总价为15.1的仿真图
5.4 串口通信测试
首先需要安装虚拟串口,然后运行程序,发送单价、重量、和总价数据,单价为0.2,重量为74.2,总价为14.84,串口助手显示效果图如图5.6所示。
图5.6 串口助手显示数据图
5.5 故障检测测试
当检测的物体重量超过80,LED亮表示提示,设置温度为80.1,显示的效果图如图5.7所示。
图5.7 故障检测测试仿真图
7. 总结
本实验以ATmega16单片机作为控制核心,通过称重传感器检测物体的重量,单片机通过AD转换把物体重量的模拟数据转换为相应的数字数据,然后通过按键调整物体的单价,然后通过计算总价案件计算物体总结,接着通过数码管显示和串口助手显示。
本实验通过在PROTEUS上进行原理图仿真,ICCAVR上编写代码,基本上达到了题目中的要求,并且具有良好的兼容性。
附录
整体原理图

四、仿真和报告获取

相关文章:
实践项目2-自动计价电子秤
自动计价电子秤 一、功能说明 基于AVR单片机设计一自动计价电子秤。根据输入的价格以及检测的重量自动计算总价并打印(串口模拟)。 二、具体要求 1、开机后实时检测重量并显示; 2、通过按键输入并显示价格,具有修改功能&#…...
iOS如何操作更新推送证书
最近收到一份邮件,应该如何操作呢,证书还是跟以前一样冲钥匙串直接申请吗 Hello, As we announced in October, the Certification Authority (CA) for Apple Push Notification service (APNs) is changing. APNs will update the server certificates in sandbox on January…...
WSL2 在vscode无法连接copilot
报错情况: 本机可以使用copilot,但在WSL2上无法连接,报错信息如下: 检查网络情况: ping api.github.com 发现无法连接: github.com:Temporary failure in name resolution 在网上搜集的解决方法&#…...
HTA8998 实时音频跟踪的高效内置升压2x10W免电感立体声ABID类音频功放
1、特征 输出功率(fIN1kHz,RL4Ω,BTL) VBAT 4V, 2x10.6W(VOUT9V,THDN10%) VBAT 4V, 2x8.6W (VOUT9V,THDN1%) 内置升压电路模式可选择:自适应实时音频跟踪 升压(可提升播放时间50%以上)、强制升压 最大升压值可选择,升压限流值可设置 ACF防破音功能 D类…...
用ChatGPT-o1进行论文内容润色效果怎么样?
目录 1.引导问题发现 2.角色设定 3.整理常问修改 4.提供样例 5.小细节 小编在这篇文章中分享如何充分利用ChatGPT-o1-preview来提升论文润色的技巧。小编将持续跟进最新资源和最新的调研尝试结果,为宝子们补充更多实用的写作技巧。这些技巧将有助于您更有效地利…...
《探索 Jetpack Compose:构建现代化 Android UI 的利器》
Jetpack Compose 是谷歌推出的现代化 UI 框架,用于简化 Android 应用开发中的 UI 构建。它使用声明式编程方式,允许开发者以简洁直观的方式创建动态和响应式的 UI。本文将从基础概念到进阶用法,带你全面了解 Compose 的核心功能和使用技巧。 …...
cocos creator 的 widget组件的使用及踩坑
以下的内容基于cocos creator 3.8版本,如有错误,恳请指出。 👉官方文档的指引 应用:以上官方指引有非常清晰的使用方式,接下来说明一些注意事项: 1、与canvas搭配的使用,解决多分别率适配问题。…...
Baumer工业相机的EMVA1288 数据报告简介
项目场景: Baumer工业相机堡盟VCX系列和VLX系列为堡盟全系列相机中的主流常用相机和高端相机,性能强大、坚固可靠,易于集成,常用与一般行业的检测定位识别使用。 对应的高端相机系列具有极为丰富的强大技术功能,可轻…...
Docker 安装 中文版 GitLab
Docker 安装系列 安装GitLab、解决服务器内存不足问题、使用域名/IP地址访问项目 1、拉取 [rootTseng ~]# docker pull twang2218/gitlab-ce-zh:latest latest: Pulling from twang2218/gitlab-ce-zh 8ee29e426c26: Pull complete 6e83b260b73b: Pull complete e26b65fd11…...
uni-app 个人课程表页面
uni-app 个人课程表页面 插件参考地址 大部分代码都是参考了上述代码,只对代码做出了优化 1. 页面模板 在 schedule.vue 文件中,编写页面结构: <template><view><u-navbar title"个人中心"><view class&q…...
FPGA工作原理、架构及底层资源
FPGA工作原理、架构及底层资源 文章目录 FPGA工作原理、架构及底层资源前言一、FPGA工作原理二、FPGA架构及底层资源 1.FPGA架构2.FPGA底层资源 2.1可编程输入/输出单元简称(IOB)2.2可配置逻辑块2.3丰富的布线资源2.4数字时钟管理模块(DCM)2.5嵌入式块 …...
【OpenCV】平滑图像
二维卷积(图像滤波) 与一维信号一样,图像也可以通过各种低通滤波器(LPF)、高通滤波器(HPF)等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…...
LeetCode300. 最长递增子序列(2024冬季每日一题 30)
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的 子序列。 示例 1&…...
vue H5如何实现copy功能
vue H5如何实现copy功能 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><link rel"stylesheet" href"https://unpkg.com/vant2.12/lib/index.css" /><title></title><st…...
Golang使用etcd构建分布式锁案例
在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统。分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要。它有助于维护一致性,防止竞争条件,并确保在任何给定时间只有一个进程独占访问资源。 我们将使用Go作为编程语言&am…...
Windows 和 Ubuntu 双系统安装
复现论文的时候,个别包只有Linux版本,并且源码编译比较麻烦,所以干脆直接安装一个双系统(WinUbuntu),方便复现论文。 参考视频链接:Windows 和 Ubuntu 双系统的安装和卸载 0.所需工具 4G以上U…...
多媒体文件解复用(Demuxing)过程
多媒体文件的解复用(Demuxing)过程指的是从一个多媒体容器文件(如 MP4、MKV、AVI 等)中提取不同类型的多媒体数据流(例如视频流、音频流、字幕流等)的过程。 容器文件本身并不包含实际的视频或音频数据&…...
从 Zuul 迁移到 Spring Cloud Gateway:一步步实现服务网关的升级
从 Zuul 迁移到 Spring Cloud Gateway:一步步实现服务网关的升级 迁移前的准备工作迁移步骤详解第一步:查看源码第二步:启动类迁移第三步:引入 Gateway 依赖第四步 编写bootstrap.yaml第五步:替换路由配置第六步&#…...
qt之插件编译
QtXlsxWriter sudo apt install qtbase5-private-dev git clone https://github.com/dbzhang800/QtXlsxWriter.git cd QtXlsxWriter/ qmake make -j6 sudo make install #将生成的lib 及 include copy至项目路径的lib 及include里项目配置: QT xlsxbluetoo…...
pandas一行拆成多行
import pandas as pd df pd.DataFrame({Country:[China,US,Japan,EU,UK/Australia, UK/Netherland],Number:[100, 150, 120, 90, 30, 2],Value: [1, 2, 3, 4, 5, 6],label: list(abcdef)})# 法一 推荐 df2df.drop(Country, axis1).join(df[Country].str.split(/, expandTrue).…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
