按键

本文详细介绍了按键的工作原理、CPU处理按键的方式,包括轮询和中断式。讲解了独立按键和矩阵键盘的电路接法,重点讨论了按键消抖技术,以及如何通过外部中断来更高效地处理按键事件。此外,还探讨了矩阵键盘的原理和编程实战,强调了其节省IO资源但无法同时检测多个按键按下这一特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 原理图和接线分析

这里写图片描述

(1)8个独立按键接法一样:都是一端接GND,另一端接插座上。

(2)接线:插座接到P1端口,接完之后P1端口8个IO分别对应8个按键(P1.0对应K1、P1.1对应K2····P1.7对应K8)。

(3)为了用LED点亮或熄灭来指示按键是否按下,还要给LED接线。P0端口接LED。

2.2 先监测1个按键(用LED作为指示)

(1)使用轮询法来处理独立按键K1,单片机在循环中每隔很短的时间就检测K1对应的P1.0引脚的输入电平是1还是0.如果是1则表示按键没有按下,熄灭LED作为指示。延时等待下一次检验;如果是0表示按键已经按下了,点亮一颗LED作为指示。

2.3 扩展为监测8个独立按键

注意:
(1)如果要监测的按键数量少,可以用位监测。如果多则可以直接用端口字节变量来监测。

(2)独立按键多个按键之间是彼此独立的,所以允许多个按键同时按下而不会影响。(矩阵按键就只能一次按下一个按键,不能多个同时按下)

#include <reg51.h>

// 当前要处理的是K1,对应P1.0IO口,操控的LED是LED1,对应P0.0

sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key8 = P1^7;

sbit led1 = P0^0;
sbit led2 = P0^1;
sbit led8 = P0^7;


void delay(void)
{
    unsigned char i, j;

    for (i=0; i<100; i++)
        for (j=0; j<100; j++);
}


void main(void)
{
    while (1)
    {
         // C语言中把一个IO引脚定义成一个变量key1
         // 然后给key1变量赋值就相当于是向这个IO引脚输出
         // 直接使用(读)这个key1变量,就相当于从这个IO引脚输入
         if (key1 == 1)
         {
             // 没有按键
             led1 = 0;          // led熄灭
         }
         else
         {
            // 有按键
            led1 = 1;           // led点亮
         }

         if (key2 == 1)
         {
             // 没有按键
             led2 = 0;          // led熄灭
         }
         else
         {
            // 有按键
            led2 = 1;           // led点亮
         }

         if (key8 == 1)
         {
             // 没有按键
             led8 = 0;          // led熄灭
         }
         else
         {
            // 有按键
            led8 = 1;           // led点亮
         }

    }
}

3 键值检测与显示

3.1 何为键值

(1)一般的产品中按键都有很多,对于整个程序来说一般都是把按键进行编码,给每个按键一个对应的编码值,就叫做按键的键值。

(2)在正式的比较庞大的程序中,按键的检测部分和处理部分都是隔开的。这两部分隔开有利于各自部分的程序编写,两部分之间用键值来连接。按键监测部分负责监测按键,一旦发生一个按键事件就产生一个键值,然后将键值传递给按键处理部分。

3.2 加入数码管显示键值

(1)整个程序包括2部分:1部分做按键监测并且发出键值,另一部分负责将接收到的键值显示在独立数码管上。

#include <reg51.h>



/*********************变量定义************************************/
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key8 = P1^7;



// 独立数码管的段码表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值