【TB作品】体重监控系统,ATMEGA16单片机,Proteus仿真

机电荷2018级课程设计题目及要求
题1:电子称重器设计
功能要求:
1)开机显示时间(小时、分)、时分可修改;
2)用滑动变阻器模拟称重传感器(测量范围0-
200g),数码管显示当前重量值,当重量值高于高
值时,红灯长亮;
3)当重量值低于低值时,黄灯长亮;
4)当重量值在正常值时,绿灯亮;
5)重量高值150g-200g和低值30g。
硬件调试:实现以上功能

数码管 段选RORTD八个引脚 位选PC0 PC1 PA1 PA2 PA3 PA4 PA5(只用到7位数码管)
按键四个 PB0 PB1 PB2 PB3
滑动变阻器接PA0
三个灯,黄绿红,接PB4 PB5 PB6

功能:
1数码管前四个显示时和分比如0158代表1点58分。数码管最后三位显示重量000到200表示多少g。
重量低于30,则黄灯亮。
重量正常,则绿灯亮。
重量高于150,则红灯亮。
按键1增加小时,按键2减少小时。(调时)
按键3增加分钟,按键4减少分钟。(调分)
正常走时。

在这里插入图片描述

电子称重器设计

功能要求

  1. 显示时间:开机后显示当前时间(小时和分钟),并且可以通过按键进行时、分的修改。
  2. 重量测量:使用滑动变阻器模拟称重传感器,测量范围为0到200克。数码管实时显示当前重量。
  3. 重量报警:根据测量的重量值,分别控制三种指示灯:
    • 当重量高于150克时,红灯亮。
    • 当重量低于30克时,黄灯亮。
    • 当重量在30克到150克之间时,绿灯亮。

硬件配置

  • 数码管:用于显示时间和重量。段选引脚连接RORTD,位选引脚连接PC0、PC1、PA1、PA2、PA3、PA4、PA5(只使用7位数码管)。
  • 按键:四个按键,分别连接到PB0、PB1、PB2、PB3。用于调整时间。
  • 滑动变阻器:连接到PA0,用于模拟称重传感器。
  • 指示灯:三个灯(黄、绿、红),分别连接到PB4、PB5、PB6。

系统原理

  1. 时间显示与调整

    • 数码管的前四个位置用于显示当前时间。例如,显示"0158"表示当前时间是1点58分。
    • 通过按键1和按键2可以增加或减少小时,通过按键3和按键4可以增加或减少分钟。
    • 时间正常计时,并且每秒钟更新一次。
  2. 重量测量与显示

    • 滑动变阻器模拟称重传感器,通过AD转换器将模拟信号转换为数字信号。
    • AD转换后的数据经过处理,显示在数码管的后三位。例如,显示"050"表示当前重量为50克。
    • 重量的变化实时更新到数码管上。
  3. 重量报警指示

    • 程序根据重量值的范围控制相应的指示灯。
      • 当重量低于30克时,黄灯亮,表示重量过轻。
      • 当重量在30克到150克之间时,绿灯亮,表示重量正常。
      • 当重量超过150克时,红灯亮,表示重量过重。

程序实现与讲解

1. 初始化设置
DDRA = 0xFF - 0x01;  // 配置引脚的输入输出关系
DDRC |= 0x03;        // 配置引脚的输入输出关系
DDRD = 0xFF;         // 配置引脚的输入输出关系
DDRB = 0xF0;         // 配置引脚的输入输出关系

这段代码配置了各个引脚的输入输出关系。数码管、滑动变阻器和指示灯分别连接到不同的端口。

2. 时间更新与显示
SEG_DISP[0] = LED_Disbuf[time_hour % 100 / 10];
SEG_DISP[1] = LED_Disbuf[time_hour % 10];
SEG_DISP[2] = LED_Disbuf[time_minute % 100 / 10];
SEG_DISP[3] = LED_Disbuf[time_minute % 10];

这段代码将当前时间的小时和分钟分解成个位和十位,并将其转换为数码管显示的内容。

3. 按键检测与时间调整
int GetKey(void) {
    if ((PINB & 0x01) == 0) {
        return 1; // 第1个按键
    } else if ((PINB & 0x02) == 0) {
        return 2; // 第2个按键
    } else if ((PINB & 0x04) == 0) {
        return 3; // 第3个按键
    } else if ((PINB & 0x08) == 0) {
        return 4; // 第4个按键
    }
    return 0;
}

这个函数检测哪个按键被按下,并返回相应的按键编号。通过这个返回值可以调整时间。

if (keyvalue == 1) { // 按键1的功能
    time_hour++;
    if (time_hour == 24) time_hour = 0;
} else if (keyvalue == 2) { // 按键2的功能
    if (time_hour == 0) {
        time_hour = 23;
    } else {
        time_hour--;
    }
} else if (keyvalue == 3) { // 按键3的功能
    time_minute++;
    if (time_minute == 60) time_minute = 0;
} else if (keyvalue == 4) { // 按键4的功能
    if (time_minute == 0) {
        time_minute = 59;
    } else {
        time_minute--;
    }
}

根据按键检测结果,调整小时和分钟。按键1和按键2用于增加和减少小时,按键3和按键4用于增加和减少分钟。

4. 重量检测与显示
unsigned int AD_GetData(void) {
    unsigned int ADData0;
    ADMUX = (1 << REFS0); // ADC参考电压为AVcc,ADC结果右对齐,选择通道ADC0
    ADCSRA |= (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // 使能AD转换,ADC时钟64分频

    ADCSRA |= (1 << ADSC); // 开始AD转换
    while (!(ADCSRA & (1 << ADIF)));
    ADCSRA |= (1 << ADIF); // 清零ADC中断标志位

    ADData0 = ADC;
    ADData0 = ((long)ADData0 * 5010 / 1024); // 将获得的AD值转换为电压值,单位为mv
    ADData0 = ADData0 / 25; // 数值换算到0~200g

    return ADData0;
}

该函数通过AD转换器获取滑动变阻器的电压值,并将其转换为重量值,显示在数码管上。

5. 指示灯控制
if (ADData0 < 30) { // 重量低于30
    PORTB &= ~0x10; // PB4低电平,黄灯亮
    PORTB |= 0x20; // PB5高电平,绿灯不亮
    PORTB |= 0x40; // PB6高电平,红灯不亮
} else if (ADData0 < 150) {
    PORTB &= ~0x20; // PB5低电平,绿灯亮
    PORTB |= 0x10; // PB4高电平,黄灯不亮
    PORTB |= 0x40; // PB6高电平,红灯不亮
} else {
    PORTB &= ~0x40; // PB6低电平,红灯亮
    PORTB |= 0x20; // PB5高电平,绿灯不亮
    PORTB |= 0x10; // PB4高电平,黄灯不亮
}

根据重量值控制相应的指示灯。当重量低于30克时,黄灯亮;重量在30克到150克之间时,绿灯亮;重量超过150克时,红灯亮。

通过以上功能模块的合理设计和实现,可以完成电子称重器的主要功能,包括时间显示与调整、重量测量与显示以及重量报警指示。

资源

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/773610.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Exploting an API endpoiint using documentation

HTTP request methods https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods 第一步:burp抓包刷新页面 httphistory中只能看到两个记录,可以看下Response,是HTML页面,说明这里有HTML页面 ,但是没有发现特定的API接口。 第二步:用户登录 转到用户登录的功能点处…

Android --- Service

出自于此&#xff0c;写得很清楚。关于Android Service真正的完全详解&#xff0c;你需要知道的一切_android service-CSDN博客 出自【zejian的博客】 什么是Service? Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。 服务可由其他应用组件…

【Python】已解决:ValueError: Worksheet named ‘Sheet’ not found

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;ValueError: Worksheet named ‘Sheet’ not found 一、分析问题背景 在Python编程中&#xff0c;处理Excel文件是一个常见的任务。通常&#xff0c;我们会使用…

DFS之搜索顺序——AcWing 1116. 马走日

DFS之搜索顺序 定义 DFS之搜索顺序是指在执行深度优先搜索时&#xff0c;遍历图或树中节点的策略。具体而言&#xff0c;DFS会沿着一条路径深入到底&#xff0c;当无法继续深入时回溯&#xff0c;然后选择另一条未探索的路径继续深入。搜索顺序直接影响到搜索效率和剪枝的可能…

线性代数|机器学习-P21概率定义和Markov不等式

文章目录 1. 样本期望和方差1.1 样本期望 E ( X ) \mathrm{E}(X) E(X)1.2 样本期望 D ( X ) \mathrm{D}(X) D(X) 2. Markov 不等式&Chebyshev不等式2.1 Markov不等式公式 概述2.2 Markov不等式公式 证明&#xff1a;2.3 Markov不等式公式 举例&#xff1a;2.4 Chebyshev不…

HarmonyOS - 通过.p7b文件获取fingerprint

1、查询工程所对应的 .p7b 文件 通常新工程运行按照需要通过 DevEco Studio 的 Project Structure 勾选 Automatically generate signature 自动生成签名文件&#xff0c;自动生成的 .p7b 文件通常默认在系统用户目录下. 如&#xff1a;C:/Users/zhangsan/.ohos/config/default…

QT学习(6)——QT中的定时器事件,两种实现方式;事件的分发event,事件过滤器

目录 引出定时器事件QTimerEventQTimer 事件的分发事件过滤器 总结QT中的鼠标事件定义QLable的鼠标进入离开事件提升为myLabel重写QLabel的函数鼠标的事件鼠标的左中右键枚举鼠标多事件获取和鼠标移动鼠标追踪 QT中的信号和槽自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.…

了解 PostgerSQL 的门户 – Executor vs Process Utility

当您向 PostgreSQL 发送查询时&#xff0c;查询会依次经历多个处理阶段&#xff0c;并在最后返回结果。这些阶段称为&#xff1a; 解析 分析 重写 计划 执行 在另一篇文章中&#xff0c;我简要概述了PostgreSQL在每个查询处理阶段的主要责任。你可以在这里找到它。 https…

SS8812T替代DRV8812的国产双通道H桥电机驱动芯片

由工采网代理的SS8812T是一款国产双通道H桥电机驱动芯片&#xff1b;该芯片为打印机和其它电机一体化应用提供一种双通道集成电机驱动方案&#xff1b;可Pin-to-Pin兼容替代DRV8812&#xff0c;可广泛应用于POS、打印机、安防相机、办公自动化设备、游戏机、机器人等。 产品描述…

14-8 小型语言模型的兴起

过去几年&#xff0c;我们看到人工智能能力呈爆炸式增长&#xff0c;其中很大一部分是由大型语言模型 (LLM) 的进步推动的。GPT-3 等模型包含 1750 亿个参数&#xff0c;已经展示了生成类似人类的文本、回答问题、总结文档等能力。然而&#xff0c;虽然 LLM 的能力令人印象深刻…

第14届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年8月21日真题

第14届蓝桥杯Python青少组中/高级组选拔赛&#xff08;STEMA&#xff09;2022年8月21日真题 题目总数&#xff1a;5 总分数&#xff1a;128 更多真题下载点我&#x1f447;https://pan.baidu.com/s/1JRLLwW2C-OBbcY2tJ3uYJg?pwd2wk2 编程题 第 1 题 问答题 编程实现&…

antd实现简易相册,zdppy+vue3+antd实现前后端分离相册

前端代码 <template><a-image:preview"{ visible: false }":width"200"src"http://localhost:8889/download/1.jpg"click"visible true"/><div style"display: none"><a-image-preview-group:previe…

【设计模式】设计模式学习线路与总结

文章目录 一. 设计原则与思想二. 设计模式与范式三. 设计模式进阶四. 项目实战 设计模式主要是为了改善代码质量&#xff0c;对代码的重用、解耦以及重构给了最佳实践&#xff0c;如下图是我们在掌握设计模式过程中需要掌握和思考的内容概览。 一. 设计原则与思想 面向对象编…

PMP--知识卡片--波士顿矩阵

文章目录 记忆黑话概念作用图示 记忆 一说到波士顿就联想到波士顿龙虾&#xff0c;所以波士顿矩阵跟动物有关&#xff0c;狗&#xff0c;牛。 黑话 你公司的现金牛业务&#xff0c;正在逐渐变成瘦狗&#xff0c;应尽快采取收割策略&#xff1b;问题业务的储备太少&#xff0…

AGI|Transformer自注意力机制超全扫盲攻略,建议收藏!

一、前言 2017年&#xff0c;谷歌团队推出一篇神经网络的论文&#xff0c;首次提出将“自注意力”机制引入深度学习中&#xff0c;这一机制可以根据输入数据各部分重要性的不同而分配不同的权重。当ChatGPT震惊世人时&#xff0c;Transformer也随之进入大众视野。一夜之间&…

【机器学习】连续字段的特征变换

介绍 除了离散变量的重编码外&#xff0c;有的时候我们也需要对连续变量进行转化&#xff0c;以提升模型表现或模型训练效率。在之前的内容中我们曾介绍了关于连续变量标准化和归一化的相关内容&#xff0c;对连续变量而言&#xff0c;标准化可以消除量纲影响并且加快梯度下降…

智能合约与企业数字化转型:案例分析与未来展望

随着区块链技术的快速发展&#xff0c;智能合约作为其重要应用之一&#xff0c;正逐渐成为推动企业数字化转型的关键工具。智能合约不仅可以自动执行和验证合同&#xff0c;还能够增强数据安全性、优化业务流程&#xff0c;并提升企业间的信任和透明度。本文将深入探讨智能合约…

CPU cache

参考&#xff1a;https://levelup.gitconnected.com/understanding-l1-l2-and-l3-caches-how-to-improve-cpu-performance-d9dcc3e2e1f5 2、以下部分&#xff1a;如何获取x86 CPU L1、L2和L3 cache的大小 - 知乎 (zhihu.com) CPU cache是介于CPU内核和物理内存&#xff08;动态…

ssm校园志愿服务信息系统-计算机毕业设计源码97697

摘 要 随着社会的进步和信息技术的发展&#xff0c;越来越多的学校开始重视志愿服务工作&#xff0c;通过组织各种志愿服务活动&#xff0c;让学生更好地了解社会、服务社会。然而&#xff0c;在实际操作中&#xff0c;志愿服务的组织和管理面临着诸多问题&#xff0c;如志愿者…

实战演练:Fail2Ban部署全攻略,确保您的服务器免受CVE-2024-6387侵害!

Fail2Ban是一个开源的入侵防护软件&#xff0c;它可以扫描日志文件&#xff0c;识别恶意行为&#xff08;如多次失败的登录尝试&#xff09;&#xff0c;并自动采取措施&#xff08;如更新防火墙规则&#xff09;来阻止攻击者。最近&#xff0c;CVE-2024-6387漏洞的爆出使我们更…