51单片机入门——独立按键的基本操作

1 按键相关知识

1.1 按键工作原理
(1)内部机械结构。
(2)电路连接与原理图中图标。
(3)按键电路接法、上拉电阻。上拉是为了让引脚默认是高电平,但是上拉的力量扛不住接地,所以按键没有按下时上拉的力量保证了IO引脚输入为1,而按下后绝对为0。
(4)按下和弹起的区。区别就是接不接地的问题,也就是引脚输入为1还是0的问题。
(5)按键这个设备对我们的意义:按键对于我们CPU来说是一个输入设备,输入的是人的操作。CPU通过监测按键连接的IO引脚的电平输入是1还是0就知道外部有没有人按下这个按键。相当于人通过按按键给CPU输入了一个信号,这个信号可以被CPU监测到从而指导CPU去做一定的工作。
1.2 CPU如何处理按键
(1)轮询式。所谓轮询式就是CPU不断的隔很小时间去查看有没有按键被按下,如果按下就处理按键,如果没按下就过一会再来查看。(按键什么时候被按下CPU是无法预知的)

(2)中断式。
1.3 按键电路接法分类
(1)独立按键。
(2)矩阵按键。

2 按键接法原理图

2.1 原理图和接线分析
在这里插入图片描述
2.2 准双向IO口
原理图设计法
在这里插入图片描述
在这里插入图片描述
2.3 矩阵按键
在这里插入图片描述
2.4 矩阵按键变独立按键示意图
在这里插入图片描述

独立按键扫描

1写法
在这里插入图片描述
在这里插入图片描述
2写法
在这里插入图片描述

按键消抖

在这里插入图片描述
硬件电容消抖
在这里插入图片描述

消抖过程
在这里插入图片描述
消抖原理
我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们再首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认。
代码分析

#include "reg52.h"
 
typedef unsigned char u8;
typedef unsigned int u16;
 
sbit led = P0^0; //设置灯的控制IO口
sbit k1  = P1^0; //设置按键的控制IO口
	
void delay(u16 i) //延时函数
{
    while(i--);
}	
 
void keyprocess()
{
	if(k1 == 0) //判断按键是否按下
	{
	    delay(1000); //延时消抖
	    if(k1 == 0)  //再次判断按键是否按下
	    {
	        led = 1; //如果按键按下,则灯亮
	    }
	    else
	    {
	        led = 0; //如果按键没有按下,则灯灭
	    }
	
	}
}
 
void main()
{
   led = 0; //初始灯灭
   while(1)
   {
   keyprocess(); //处理按键事件
   }
}

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值