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

本文主要是介绍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); // 计数间隔延时}}
}

这篇关于51单片机数码管显示的计数器,按键按下暂定,再次按下继续。(按键功能使用中断实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050860

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi