hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 979|回复: 0

自学AVR单片机十三(独立按键输入的判断)

[复制链接]

566

主题

578

帖子

1837

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1837
发表于 2024-2-3 23:43:25 | 显示全部楼层 |阅读模式
前面我们学习了蜂鸣器,流水灯,数码管显示这些实验,仔细分析一下,我们会发现这几个实验全部是通过控制单片机的I/O端口输出高低电平来实现的。也就是说这几个实验实际上都是讲的单片机I/O口的输出控制功能。
      我们已经说过,单片机的主要功能就是通过I/O口判断和控制外围电路的状态,其中控制外围电路用到的是I/O口的输出功能。而判断外部电路状态用的是I/O口的输入功能。
     今天我们就来学习一下单片机I/O口的输入功能。


一、电路实现

按键其实就是开关,单片机通过读取单片机输入引脚的状态来判断按键的闭合状态,然后根据按键状态控制单片机程序的运行状态。
         单片机对按键状态的判断经过以下三个步骤:
        一次按键事件一般包括:按键按下,按键确认,按键释放三个阶段。
        1、按键按下的判断:将连接按键的单片机的I/O口设置为输入口,判断该端口的电平状态(判断按键是处在闭合还是断开状态);
        2、按键确认的判断:当检测到按键处于闭合状态时,进行按键真正按下的确认,一般要经过按键消除抖动的处理(按键消抖处理可以采用硬件和软件两种方法,一般采用软件的方法);
       3、按键释放判:确认按键被按下后,还需要继续检测按键是否被释放,只有当按键被释放后,才能算是发生了一次完整的按键事件。
      在涉及到按键复用,一键多功能等情况的时候,按键释放的判断要复杂很多。
     一般情况下,在进行按键实例学习的时候,可以忽略按键释放判断这一步骤。
     关于按键消抖的两种处理方法:硬件处理、软件处理,在许多资料中都有详细的描述,我们可以翻阅相关资料查询。
       一个比较简单的硬件按键消抖电路是增加一个RC积分电路,其电路原理图与我们学习板上的单片机复位电路一致。
      软件消抖就是在程序中当检测到按键按下后,添加一定的延时(10-20ms),然后再次判断该按键是否依旧处于按下状态,如果依旧检测到按键被按下,则可以确认按键按下事件的发生,否则判断为干扰脉冲,不再进行按键按下的处理。

           在本实例中,我们进行4个按键状态的判断,在上面的电路图中,四个按键分别连接单片机的PD0、PD1、PD2、PD3四个端口,从图中可以看出,在按键没有被按下的时候,4个按键连接的I/O端口的电平通过上拉电阻被固定在vcc,即高电平状态,当按键被按下后,I/O口被拉到GND上,即便为低电平。所以在本实例中一个完整按键事件中I/O口的电平状态变化为(以PD0端口为例):
    PD0端口的电平为高电平(按键没有按下)PD0端口的电平变为低电平(按键被按下)延时20ms后,PD0端口电平依旧为低电平(确认按键按下)PD0端口电平变为高电平(按键释放,一次完整的按键事件完成)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-4-28 08:58 , Processed in 0.077918 second(s), 22 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表