单片机入门资料,按键消抖方式,按键怎么消抖

这篇具有很好参考价值的文章主要介绍了单片机入门资料,按键消抖方式,按键怎么消抖。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 1.什么是按键消我们先来看一下按键按下去的波形图单片机入门资料,按键消抖方式,按键怎么消抖

 文章来源地址https://www.toymoban.com/news/detail-473910.html

1.按键消抖原理


我们可以看到当按键按下的那一时刻和松开的时候有类似于锯齿的形状那就是按键抖动,这个抖动不是我们人为能控制得了的,所以我们只能对进行硬件消抖或者进行软件消抖. 
        上图中我们可以看到理想波形和实际波形有很大的区别,区别在于实际波形在按键按下的那一刻前后有20毫秒的抖动,我们按键消抖的目的呢就是把抖动忽略掉只要中间的稳定闭合区域.

方法一:延时消抖法

可以使用延时的方式跳过抖动的区域

1.检测按键按下

2.延时消抖

3.等待松开

4.消除松开按键的抖动

5.执行相应程序

#include <reg52.h>
sbit S1 = P2^0;//定义按键IO口
void main()
{
	while(1)
	{
		if(S1==0)			//判断按键按下	第一步
		{
			delay(20);	//延时消抖		第二步
			
			while(S1==0);	//等待按键松开	第三步

			delay(20);	//延时消抖		第四步

			LED=1;	   //执行相应程序性	第五步
            
		}
	}
}

程序分析:

        主函数进来进行大循环判断S1有没有按下,如果按下就延时20毫秒消除抖动延时退出后循环判断 也就是等待,等待按键松开 执行第四步,理论上来说可以不用第四步我们为了程序稳定最好加上,延时20毫秒消抖后执行相应程序。

这样就很容易就实现了最简单的消抖程序。

  优缺点:   操作简单使用方便,不占用其他资源.                                                                                    优点讲解:消抖程序只有两行,所以使用非常简单,他不占用任何硬件资源和外围电路

  缺点:       ​​降低单片机使用效率,使用时单片机不能进行其他动作,                                                        缺点讲解:一个20毫秒的延时对于51单片机来说可以运行两万条程序左右所以使用效率非常低,按键按下的时候会运行等待按键松开的语句,只要按键不松开他就一直停在这里不会执行其他程序

        适合新手使用或者对使用环境要求不大的场合使用

方法二:外围元件消抖电路                                                               

 

        优点:       外围电路简单,不占用其他资源.     

 优点讲解:外围原件只有电阻电容,不使用任何硬件资源不需要多写程序

 

        缺点:       开发时间和成本增加,不建议大量使用。

缺点讲解:      增加了焊接元件的时间和元件的成本,如果大量使用会造成不必要的浪费

        适合新手使用或者少量的开关使用

消抖电路原理讲解:

电流VCC经过R2限流电阻向电容充电,此时IO口电位是5V,当我们按下按钮时会立刻给电容放电并且把电位拉低,这样他的抖动就会被电容过滤掉。

方法三:定时器消抖法

主要看中断函数和主函数

#include <reg52.h>

sbit S1 = P2^0;//定义按键IO口

//*************定时器初始化*****************8
void Timer0Init(void)		//20微秒@11.0592MHz
{
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0xA4;			//设置定时初始值
	TH0 = 0xFF;			//设置定时初始值
	EA = 1;				//打开总中断
	ET0 = 1;			//允许定时器中断
}


//***************主函数
void main()
{
	bit ss=0;			//按键消抖标志位
	Timer0Init();		//定时器初始化
	while(1)
	{
		if(S1==0)
		{
			TR0=1;//开始定时20毫秒
			if(ss==1)//判断消抖时间是否达到
			{			//如果达到
				ss=0;//给他复位因为下次按下按键还要用
				LED=1;//执行相应程序
			}
		}
		//按键按下去不影响程序继续向下跑

        //此处省略千行程序
        //此处省略千行程序
        //此处省略千行程序
        //此处省略千行程序
	}
}


//*************中断函数
void T0_T0()interrupt 1
{
	TL0 = 0xA4;			//设置定时初始值
	TH0 = 0xFF;			//设置定时初始值
	ss=1;				//表示20毫秒消抖时间已过
	TR0=0;//关闭定时
}

程序分析  :

进来大循环会不停的判断按键,一旦按键按下就会启动定时器,经过定时20毫秒后进入定时器中断函数,一进中断给他重新赋值然后把按键标志位 置一表示20毫秒达到,随后关闭定时器因为我们暂时不需要他了。

退出中断后经过第一个判断因为按键我们就没有松开按键所以就直接经过第一个判断,第二个判断是判断20毫秒有没有达到,如果达到把标志位清零,如果不清零会重复执行下边的程序所以我们要清零,随后执行相应程序。

优点:       无外围电路,效率高消抖时其他程序正常运行。                                                                         优点讲解:不需要任何外围电路元件无额外成本,使用时不会影响其他程序的正常运行

缺点:      使用一个定时器                                                                                                                         缺点讲解:因为使用定时器定时所以占用一个定时器,如果您对定时器有一定了解那样你就可以对定时器进行分时复用。

        适合对定时器中断有一定了解的开发者使用

三种消抖方式都有优点和缺点根据自己的要求选择合适的方法

如果您有更好的建议请您留言

如果此文章有使用价值请您一键三连谢谢

 

到了这里,关于单片机入门资料,按键消抖方式,按键怎么消抖的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯

    实验内容: 利用所学的单片机知识及电路知识编程实现单片机 I/O 口检测按键输入电平。         1.选中 8 位数码管的其中 1 位数码管,当独立按键 1 每按下一次,数码管加一(按下期间加 1),范围为 0—F;         2.选中 8 位数码管的另 1 位数码管,当独立按键 2

    2024年02月06日
    浏览(33)
  • 蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按

    此片文章用于记录蓝桥杯单片机的学习 篮球杯单片机上的矩阵按键原理图如下:   使用矩阵键盘时,要将跳线帽J5跳至KBD模式。   值得注意的是,若开发板上的单片机使用的为STC15,那么以上原理图适用。如果单片机为IAP15,则在上述原理图中,要将P36换成P42,P37换成P44。  

    2023年04月10日
    浏览(36)
  • 51单片机——数码管、按键、矩阵按键C语言入门编程

    目录 数码管: 1.静态数码管:第二位数码管显示0 2.动态数码管:每一位数码管依次显示对应位数 按键: 1.独立按键:按下按键对应LED亮灭 矩阵按键: 1.矩阵按键:按下的每个按键,数码管显示对应键码          数码管按段数可分为七段数码管和八段数码管,八段数码管

    2024年01月23日
    浏览(37)
  • 【雅特力】单片机AT32F421系列入门资料

    AT32 全系列MCU选型手册.PDF AT32F421F8P7 AT32F421C8T7 (雅特力厂商送样的两个芯片版本) 【 数据手册】AT32F421系列引脚定义、电气特性与封装特性.PDF 【技术手册】AT32F421系列各外设(Peripheral)完整说明与各寄存器(Register)定义说明.PDF 【教程】AT32F421入门使用指南.PDF AT-START-F421 及 AT-Link

    2024年02月13日
    浏览(26)
  • 51单片机入门 - 详解定时器实现按键控制流水灯方向

    操作系统:Windows 10 x84-64 单片机:STC89C52RC 编译器:SDCC 烧录软件:stcgal 1.6 开发板:普中51单片机开发板A2套件(2022) 在 VS Code 中新建项目到烧录的过程: 左侧EIDE图标 - 新建项目 - 空项目 - 8位MCU项目 - 保存文件夹。 更改构建配置: SDCC ;更改烧录配置: stcgal 。 在项目文件

    2024年02月06日
    浏览(33)
  • 单片机之独立按键(多种按键代码编写)

    单片机之独立按键原理:按键右端接GND,左边接到单片机的IO口,同时接了一个上拉电阻,当按键未按下时,P2.0为高电平(学过模电的人都应该知道为什么吧)当按键按下时,相当于P2.0口与GND相连为 低电平。

    2024年02月03日
    浏览(45)
  • 51单片机 --独立按键

    前言 前几章介绍的都是IO 口输出的使用,这一教程我们通过独立按键实验来介绍IO 口作为输入的使用。开发板上板载8 个独立按键。本教程所要实现的功能是:通过开发板上的独立按键K1 控制D1 指示灯亮灭。大家可以参考前面的实验内容。 一、按键介绍 按键是一种电子开关

    2024年02月06日
    浏览(46)
  • 单片机——矩阵按键模块

    主要目的 学会按键扫描 1.延时函数 延时函数部分详见链接: 单片机控制一盏灯的亮与灭程序解释 这个程序里面的延时函数的目的是按键消抖。 2.按键扫描模块 这是本次实验的重点,将详细介绍。 先来观察矩阵按键模块的连接 总共8个口。 先实现关于列的扫描,设置初始值(

    2024年02月08日
    浏览(27)
  • 【51单片机】矩阵按键

    参考:普中 51 单片机开发攻略 main.c 只有第一个数码管量,并且按第几个键,就显示第几(0-F)。

    2024年01月21日
    浏览(44)
  • 单片机按键开关代码

    在单片机的应用程序中,按键开关的使用频率非常高。按键开关可以通过检测用户的操作,实现程序的控制和交互。本文将介绍单片机按键开关的基本原理和如何在程序中实现按键开关的控制。 按键开关的原理基于接通和断开电路之间的变化。当按键按下时,连接到单片机的

    2024年02月02日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包