蓝桥杯单片机 | 特训案例【进阶02】长按与短按控制数码管显示

本文主要是介绍蓝桥杯单片机 | 特训案例【进阶02】长按与短按控制数码管显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【1】题目要求

新建工程,以I/O模式编写代码,在CT107D单片机综合训练平台上,实现以下功能:

1、系统上电后,关闭蜂鸣器和继电器,关闭全部指示灯,数码管最右边两位显示计数初始值28,其余数码管关闭。

2、利用定时器0实现10ms的间隔定时,将其作为长定时的基本单位,用于记录按键按下的持续时间。

3、将J5的23脚短接,把S4设置为独立按键

4、循环扫描S4按键,按下时间小于1秒短按,数码管上的数字加1,超过最大值99后恢复00,继续计数;S4按键按下的时间大于1秒长按,数码管上的计数清除为00。 

5、在按键扫描和处理的过程中,不能干扰数码管正常显示,避免出现按键误触发和一次按键多次处理的情况。

【小提示】:按键的长按与短按实现原理,可见本博客:《【CC2530强化实训01】普通延时函数实现按键的长按与短按》

【2】核心源码

/*==================蓝桥杯单片机特训==================
【进阶02】:长按与短按控制数码管显示
**平  台:CT107D单片机综合实训平台
**模  式:IO模式
**设  计:欧浩源(小蜜蜂老师,ohy3686@qq.com)
**时  间:2022-03-31
**更多详见:www.xmf393.com
====================================================*/
#include "reg52.h"sbit S4 = P3^3;//定义动态显示中单个数码管点亮时长
#define TSMG	500
//-------共阳数码管的段码编码表(无小数点)--------
//0 1 2 3 4 5 6 7 8 9 A b C D E F - .
unsigned char code SMG_NoDot[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};unsigned char num = 28;					//定义计数变量
bit F_key = 0;    						//按键按下标志
unsigned int count_t = 0;				//10ms单位累计
void Display_Num();						//声明数码管显示函数		
/*====锁存器设置和数码管显示的代码参考前面的案例====*/
//===================定时器T0初始化===================
void Init_Timer0()
{//定时器计数初值设置TH0 = (0 - 10000) / 256;TL0 = (0 - 10000) % 256;TMOD = 0x01;                //模式1:16位非重装模式ET0 = 1;					//使能定时器0中断EA = 1;						//打开总中断TR0 = 1;					//启动定时器0
}
//===============定时器T0的中断服务函数================
void Service_Timer0() interrupt 1
{TH0 = (0 - 10000) / 256;TL0 = (0 - 10000) % 256;if(F_key == 1)				//在按键按下期间进行计数{count_t++;				//按键按下的持续时间}
}
//==================按键扫描处理函数===================
void Scan_Keys()
{if(S4 == 0){DelaySMG(1000);			//去抖动处理if(S4 == 0)				//确认为按下信号{count_t = 0;		//时间计数变量清0F_key = 1;			//标志按键按下状态while(S4 == 0)		//等待按键松开{Display_Num();	//在按下期间保持数码管正常显示}F_key = 0;			//标志按键松开状态if(count_t > 50)	//按下时间大于1秒,长按{num = 0;		//数码管计数清除为00}else				//按下时间小于1秒,短按{num++;			//数码管计数加1if(num == 100){num = 0;	//计数超出最大值99后恢复00}}}}
}

【注】:更多关于蓝桥杯单片机备赛内容,详见《蓝桥杯单片机设计与开发》小蜜蜂特训手册,本站可下载,相关更多蓝桥杯的案例完整源码及学习备赛笔记,欢迎进入“小蜜蜂笔记”公众号。

这篇关于蓝桥杯单片机 | 特训案例【进阶02】长按与短按控制数码管显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red