1.按键入门

发布日期:2020-12-26 09:10:21 来源:网络转载

这一章我们讲解单片机最常用的硬件部分——按键!


1.原理图

按键分 独立按键 和 矩阵按键,本教程不讲解矩阵按键,4个独立按键已经满足大部分的程序测试。学会了独立按键,矩阵按键可参考宋老师的教程。

先看到我们开发板上的K4

6.png

 

我们单独拿这个按键来入门,看一下它的原理图

1.png


现在让单片机的P2.3输出低电平,则演化为下图所示

2.png


要是K4被按下导通,则

3.png

圈出部分都为0V电压,因为这些地方都被接了地。

 

2.原理

原理很简单,我们开发板上的按键用的是没有自锁功能的自弹起的按键,也就是像按家里电磁炉上的按键一样,按下之后两个断点就被短接起来,松手后这时按键自己弹起,两个断点就没有短接在一起了。

拿P2.7来说,当K4按键按下,则断点导通,P2.7被接地,此时P2.7的IO端口为0V,也就是低电平,俗称被拉低。这时候即使是程序令P2.7输出5V高电平都于事无补,因为这是外部电路直接导致,IO端口就是0V。内部硬件也能感觉到这个信号属于被强制拉低。这么解释有点笼统,所以我们前往《手把手教你学51单片机》文档8.4.1节有很权威的解释。

在程序里我们是可以去读此时的IO端口信号的,读的意思就是外部信号输入到单片机内部里面,单片机去检测识别这个信号的意思,我们还是先用一个简单的程序来说明一下IO端口被拉低的情况怎么在代码中表示出作用。

 

3.代码

程序下载进去我们按下K4,按下时8盏LED小灯被点亮,松开不按时就熄灭

#include <reg52.h> 
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;
 
sbit KEY4  = P2^7;
sbit GND   = P2^3;

void main()
{  
    ADDR3 = 1;//使能三八译码器
    ENLED = 0;// 
  
    ADDR2 = 1;//**************************
    ADDR1 = 1;//让三八译码器的IO6输出低电平
    ADDR0 = 0;//**************************
    GND=0;    //让P2.7能具备有被拉低的条件先
    
    while(1)
    {
        P0=KEY4*0xFF;
    }   
}

 

4.解析

那么看到“P0=KEY4*0xFF;”语句,KEY4是可以作为一个数值与0xFF相乘的,但这个KEY4值只有两个极限数,不是1就是0。

在P2.3输出低电平的情况下,当按键按下时,此时P2.7被拉低,在程序中KEY4就变为0了,当按键松开,那P2.7断开了与地相接,就相当于什么也没接,自然跟第三章第2讲结尾提到过的是高电平状态了,这是内部硬件上拉电阻的作用,空闲时是高电平,所以此时在程序中KEY4也就变为1了。

所以“P0=KEY4*0xFF;”就是取决于按键的动作是要变为“P0=0x00;”还是“P0=0xFF;”。

我们就是用一排灯来提示了一个IO端口有没有被拉低了的功能。

如果想实现按下时8盏小灯熄灭,松开不按时点亮,只需把“P0=KEY4*0xFF;”改为“P0=~(KEY4*0xFF);”即可。

关键词 :
网站违法和不良信息举报邮箱:23139485@qq.com
CopyRight@2020-2030 www.haoapp8.cn All Rights Reserved.C语言学习网版权所有 粤ICP备15061369号
免责声明:本站内容来源于用户自行提供或网络收集,其真实性、准确性和合法性,www.haoapp8.cn不提供任何保证,亦不承担任何法律责任.而产生的法律关系及法律纠纷,由您自行协商解决。