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

相关文章

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.