蓝桥杯单片机 | 特训案例【进阶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;		//时间计数变量清0
			F_key = 1;			//标志按键按下状态
			while(S4 == 0)		//等待按键松开
			{
				Display_Num();	//在按下期间保持数码管正常显示
			}
			F_key = 0;			//标志按键松开状态
			
			if(count_t > 50)	//按下时间大于1秒,长按
			{
				num = 0;		//数码管计数清除为00
			}
			else				//按下时间小于1秒,短按
			{
				num++;			//数码管计数加1
				if(num == 100)
				{
					num = 0;	//计数超出最大值99后恢复00
				}
			}
		}
	}
}

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

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蜜蜂老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值