02讲 | 51单片机按键外部中断实现LED灯的亮灭

前言

专栏内容持续补充更新,目前正在进行优惠活动!

目录

一、按键中断控制原理

二、外部中断实现 LED 灯亮灭功能代码

三、按键控制LED亮灭工程代码


一、按键中断控制原理

外部中断 INT0 和外部中断 INT1 触发有两种方式,上升沿或下降沿均可触发方式和仅下降沿触发方式。

二、消除抖动

矩阵键盘通常使用机械触点式按键开关,其主要功能式把机械上的通断转换为电气上的逻辑关系。

机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定的时间触点机械抖动,然后其触点才稳定下来。

其抖动过程如下图所示,抖动时间的长短与开关的机械特性有关,一般为 5-10ms。在触点抖动期间检测按键的通与断,可能导致判断出错,即按键一次按下或释放错误的被认为是多次操作,这种情况是不允许出现的。

为了克服按键触点机械抖动所致的检测误判,必须采取消抖措施。按键较少时,可采用硬件消抖,按键较多时,我们一般采用软件消抖,软件消抖的时候直接用延时函数判断,延时时间一般采用 10ms


二、外部中断实现 LED 灯亮灭功能代码

#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led=P2^0;
sbit k4=P3^3;//外部中断1
void delay(u16 i)
{
	while(i--);
}
void zhongduan()
{
	EA=1;//总中断打开
	EX1=1;//外部中断1打开
	IT1=1;//外部中断1选择低电平触发
}
void main()
{
	zhongduan();//调用中断函数
	while(1);
}
void zhong() interrupt 2//外部中断服务函数
{
	delay(1000);//消除按键抖动
	if(k4==0)
	{	
		led=~led;//led默认高电平,这里实现状态的反转
	}
}

三、按键控制LED亮灭工程代码

#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led=P2^0;
sbit ke=P3^1;

void delay(u16 i)
{
	while(i--);
}

void anjian()
{
	if(ke==0)//判断按键是否被按下
	{
		delay(1000);//消抖
		if(ke==0)//消抖之后再次判断是否被按下 ?
		led=~led;//点亮led灯,led灯默认高电'平
		while(!ke);//判断是否断开
	} 
}

void main()
{
	while(1)
	{
		anjian();
	}
}
  • 19
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

工科男小Y

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

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

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

打赏作者

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

抵扣说明:

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

余额充值