51单片机数码管显示的计数器,按键按下暂定,再次按下继续。(按键功能使用中断实现)

1、功能描述

数码管显示的计数器,按键按下暂定,再次按下继续。(按键功能使用中断实现)

2、实验原理

·  按键与中断:使用单片机的外部中断功能来检测按键动作,实现非阻塞的按键检测。

·  中断服务程序:编写中断服务程序来处理按键动作,切换暂停和继续的状态。

·  动态显示:通过分时控制两个数码管(或一个数码管的两个位置)来动态显示计数器的值。

3、编程思路

·  主循环:在主循环中,根据暂停标志位决定是否继续计数和更新数码管显示。

·  显示逻辑:编写数码管显示函数,用于显示计数器的当前值。由于只有一个数码管,需要实现动态扫描来交替显示十位和个位的数字。

·  中断服务程序: 在按键按下时,通过中断服务程序切换暂停标志位。使用边沿检测机制来避免抖动和多次触发的问题。

· 去抖动处理:在中断服务程序中加入防抖动逻辑,确保按键状态稳定后再进行处理。

·  暂停与继续:

当暂停标志位为非激活状态时,单片机继续计数并更新数码管显示。

当暂停标志位为激活状态时,单片机停止计数,但可以通过再次按下按键来继续计数。

4、代码

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned intsbit k3 = P3^2;    // 连接到P3.2的按键
bit pause_flag = 0; // 定义一个标志位,用于控制计数器的暂停和继续uchar count = 0; // 计数器变量// 延时函数
void delay(uint xms) {uint i, j;for (i = xms; i > 0; i--)for (j = 110; j > 0; j--);
}// 数码管显示函数
void display(uchar num) {uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};P0 = table[num]; // 显示数码管
}// 外部中断0服务程序
void external0_isr() interrupt 0 {if (k3 == 0) { // 检测按键是否按下pause_flag = !pause_flag; // 切换暂停标志位while (k3 == 0); // 等待按键释放}
}void main() {// 初始化设置IT0 = 1; // 设置INT0为边沿触发EX0 = 1; // 使能INT0中断EA = 1;  // 使能全局中断P0 = 0x3f; // 初始数码管显示0while (1) {if (!pause_flag) { // 检查是否处于暂停状态display(count / 10); // 显示计数器的十位数display(count % 10); // 显示计数器的个位数count++; // 计数器增加delay(1000); // 计数间隔延时}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十四、OpenAI之助手API(Asistants API)

助手API允许你在自己的应用系统中构建一个AI助手。助手有指令&#xff0c;能利用模型、工具和文件响应用户的查询。助手API目前支持3种类型的工具&#xff1a;代码交互&#xff0c;文件搜索和函数调用。 你可以使用助手后台探索助手的能力&#xff0c;或通过这个指南的大纲一步…

【栈】2751. 机器人碰撞

本文涉及知识点 栈 LeetCode2751. 机器人碰撞 现有 n 个机器人&#xff0c;编号从 1 开始&#xff0c;每个机器人包含在路线上的位置、健康度和移动方向。 给你下标从 0 开始的两个整数数组 positions、healths 和一个字符串 directions&#xff08;directions[i] 为 ‘L’ …

MySQL-数据处理函数

026-distinct去重 select job from emp;加个 distinct 就行了 select distinct job from emp;注意&#xff1a;这个去重只是将显示的结果去重&#xff0c;原表数据不会被更改。 select 永远不会改变原数据 select distinct deptno, job from emp order by deptno asc;027-数…

步态控制之足旋转点(Foot Rotation Indicator, FRI)

足旋转点(Foot Rotation Indicator, FRI) 足旋转点是人形机器人步态规划中的一个关键概念,用于描述步态过程中机器人脚部的旋转和稳定性。FRI 可以帮助确定机器人在行走时是否稳定,以及如何调整步态以保持稳定。下面详细介绍FRI的原理,并举例说明其应用。 足旋转点(FRI…

R语言统计分析——图形的简单示例

参考资料&#xff1a;R语言实战【第2版】 1、示例一 # 绑定数据框mtcars attach(mtcars)# 打开一个图形窗口并生成一个散点图plot(wt,mpg)# 添加一条最优拟合曲线abline(lm(mpg~wt))# 添加标题title("Regression of MPG on weight") # 解除数据框绑定 detach(mtcar…

ES8.13 _bulk报错Malformed content, found extra data after parsing: START_OBJECT解决

在使用elaticsearch8.13.0使用批量创建索引时&#xff0c;根据谷粒中说的es7.9方法去批量操作请求&#xff1a; http://127.0.0.1:9200/shop/_doc/_bulk 注意1&#xff1a;设置header为Content-Type:application/x-ndjson,否则请求报错&#xff1a; {"error": &qu…

量化视频2---miniqmt的使用配置

量化视频2---miniqmt的使用配置 量化视频2---miniqmt的使用配置 (qq.com)

机器学习笔记:focal loss

1 介绍 Focal Loss 是一种在类别不平衡的情况下改善模型性能的损失函数最初在 2017 年的论文《Focal Loss for Dense Object Detection》中提出这种损失函数主要用于解决在有挑战性的对象检测任务中&#xff0c;易分类的负样本占据主导地位的问题&#xff0c;从而导致模型难以…

什么是async/await?

async/await 是 JavaScript 中处理异步操作的一种新方式&#xff0c;它使得异步代码能够以同步的方式书写&#xff0c;从而提高了代码的可读性和可维护性。 async async 是一个函数修饰符&#xff0c;用于声明一个函数是异步的。一个 async 函数总是返回一个 Promise 对象。如…

6.10 c语言

7.1 if-else语句 简化形式 if(表达式)语句块 阶梯形式 if(表达式1)语句块1 else if(表达式2&#xff09;语句块2 嵌套形式 if() if() 语句1 else 语句2 else if() 语句3 else 语句4 表达式一般情况下为逻辑表达式或关系表达式 #include <stdio.h>//从小到大排序,输出顺…

【recast-navigation-js】使用three.js辅助绘制Agent寻路路径

目录 说在前面setAgentTarget绘制寻路路径结果问题其他 说在前面 操作系统&#xff1a;windows 11浏览器&#xff1a;edge版本 124.0.2478.97recast-navigation-js版本&#xff1a;0.29.0golang版本&#xff1a;1.21.5上一篇&#xff1a;【recast-navigation-js】使用three.js辅…

linux:centos7升级libstdc++版本到3.4.26

下载&#xff0c;解压 wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip unzip libstdc.so_.6.0.26.zip 复制到【/usr/lib64】&#xff1a; cp libstdc.so.6.0.26 /usr/lib64创建软链接 cd /usr/lib64 sln libstdc.so.6.0.26 libstdc.so.6查看一…

Python | Leetcode Python题解之第144题二叉树的前序遍历

题目&#xff1a; 题解&#xff1a; class Solution:def preorderTraversal(self, root: TreeNode) -> List[int]:res list()if not root:return resp1 rootwhile p1:p2 p1.leftif p2:while p2.right and p2.right ! p1:p2 p2.rightif not p2.right:res.append(p1.val)…

机器学习笔记 - LoRA:大型语言模型的低秩适应

一、简述 1、模型微调 随着大型语言模型 (LLM) 的规模增加到数千亿,对这些模型进行微调成为一项挑战。传统上,要微调模型,我们需要更新所有模型参数。这也称为完全微调 (FFT) 。下图详细概述了此方法的工作原理。 完全微调FFT 的计算成本和资源需求很大,因为更新每…

数据中台、数据仓库、数据湖的区别和关联

区别 概念定义 数据中台&#xff1a;是企业级的逻辑概念&#xff0c;体现企业数据向业务价值转化的能力。它距离业务更近&#xff0c;能够更快速地响应业务和应用开发需求&#xff0c;为业务提供速度更快的服务。数据仓库&#xff1a;是为企业所有级别的决策制定过程&#xff…

初识 CAS理论

1、CAS 通过硬件保证比较-更新的原子性&#xff0c;不涉及用户态内核态的切换。 2、CAS 是 CPU 的原子指令(cmpxchg指令)&#xff0c;不会造成数据的不一致问题。Unsafe提供的 CAS 方法底层实现的是 CPU 指令cmpxchg。 3、执行cmpxchg指令&#xff0c;会判断 当前系统是否为多…

Vmess协议是什么意思? VLESS与VMess有什么区别?

VMess 是一个基于 TCP 的加密传输协议&#xff0c;所有数据使用 TCP 传输&#xff0c;是由 V2Ray 原创并使用于 V2Ray 的加密传输协议&#xff0c;它分为入站和出站两部分&#xff0c;其作用是帮助客户端跟服务器之间建立通信。在 V2Ray 上客户端与服务器的通信主要是通过 VMes…

深度学习的点云分类

深度学习的点云分类 点云分类是指将三维点云数据中的每个点或整个点云进行分类的任务。点云数据由大量三维点构成&#xff0c;每个点包含空间坐标&#xff08;x, y, z&#xff09;&#xff0c;有时还包含其他信息如颜色和法向量。点云分类在自动驾驶、机器人导航、3D重建等领域…

bitset 优化DP

bitset bitset 可以 用二进制代替0&#xff0c;1选择情况&#xff0c;也就是把固有的时间复杂度除以64或者32&#xff0c;且常数非常小&#xff0c;有些题目1e8都可以过

【InternLM实战营第二期笔记】06:Lagent AgentLego 智能体应用搭建

文章目录 讲解为什么要有智能体什么是 Agent智能体的组成智能体框架AutoGPTReWooReAct Lagent & Agent LegoAgentLego 实操Lagent Web Demo自定义工具 AgentLego&#xff1a;组装智能体“乐高”直接使用作为智能体&#xff0c;WebUI文生图测试 Agent 工具能力微调 讲解 为…