首页  /  单片机教程  /  按键入门  /  

按键入门

点击打开在线编译器,边学边练

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


1.原理图

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

先看到我们开发板上的K4

按键1

 

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

按键2


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

按键3


要是K4被按下导通,则

按键4

圈出部分都为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);”即可。


本文固定URL:https://www.dotcpp.com/course/199

第一章 单片机入门
第二章 LED
第三章 蜂鸣器
第四章 数码管
第五章 独立按键
第六章 多文件编程
第七章 外部中断
第八章 定时器
第九章 舵机与超声波模块
第十章 串口通信
第十一章 1602液晶屏
第十二章 IIC通信
第十三章 红外遥控与温度传感器
第十四章 AD与DA
第十五章 混合例程
第十六章 完结
Dotcpp在线编译      (登录可减少运行等待时间)