单片机 键盘检测与应用

发布时间:2022-12-08  

键盘是单片机应用系统中重要的输入设备,是实现人机对话的纽带。键盘主要分编码键盘和非编码键盘两大类,其中键的开闭的识别由硬件编码器来实现的称为编码键盘,如计算机键盘。而靠软件编程来识别键的开闭的称为非编码键盘,单片机系统中常用的键盘为非编码键盘。

键盘都是由一个一个小按键构成的,按键实际上就是一个开关元件,单片机系统中常用的按键主要有自锁按键和非自锁按键,分别如图1、图2所示。

图1 自锁按键

图2 非自锁按键

非编码键盘通常又分为独立键盘和矩阵键盘两大类。所谓独立键盘是指按键在与单片机相连时,每一个按键都与一个单片机单片机的I/O口相连,如图3所示;而对于一些应用系统中若需要较多按键时,采用独立键盘的连接方法,则比较耗费单片机的I/O口,此时我们一般会用到矩阵键盘,如图4所示,16个按键排成4行4列,称为4X4矩阵键盘,如按独立按键法,需要16个I/O口,而按图4的接法只需要8个I/O.

图3 独立键盘

图4 4X4矩阵键盘

由于在单片机在应用系统中,更多的会用到独立键盘,加之两者的检测原理基本相似,所以这一节里我主要讲解独立键盘的检测原理及程序实现的方法。

1、 按键的检测原理

按键与单片机的连接如图5所示,按键的一端与地相连,另一端直接与单片机的I/O口相连。此时我们在程序中先给I/O口赋值高电平,然后不断的检测I/O口电平的变化。当按键没有被按下时,此I/O口的电平一直为高;当按键被按下时,由于按键的另一端直接与地相连,相当于低电平,此时我们从I/O口读出的即为高电平,程序一旦检测到I/O口由高电平变为低电平时,说明按键被按下,此时马上执行相应的动作,这就是按键检测的原理。

图5 按键与单片机连接图

2、 按键的抖动与消除

由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,与单片机I/O口相接的一端的电压会出现相应的变化,如图6所示。

图6 按键按下时电压的变化情况

从图6中我们可以看出,实际的电压波形在按下松手的时候都会出现一定的抖动,经过实验知道,这个一时间大概在5-10ms。所在在做单片机与按键相关的系统时必须考虑消抖的环节。按键消抖的方法有两种,一个是硬件方法 一个是软件的方法,而从节约成本和尽量简化硬件电路的角度出发,一般是采用在程序中加上消抖的方法实现,通常是采用延时的方法。具体的作法是:

检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。后面会结合到程序进行讲解。

下面我写一个简单的程序,功能为:当一个键按下时,让一个发光二极管发光,我们先看下按键模块在实验板上的原理图,如图7和图8所示。

图7 发光二极管模块原理图

图8 按键模块原理图


例1 按键检测程序

//功能:当按下S8键时,L1灯发光,松手后,L1灯熄灭。相应程序如例1.

#include

#define uint unsigned int

#define uchar unsigned char

 

sbit D1=P1^0;

sbit S1=P3^4;

 

void main()

{

       P3=0xff;

       while(1)

       {

              if(S1==0)

delay(20);//消除按下时的抖动

if(S1==0)

{

                     D1=0;        

while(!S1);//松手检测

              delay(20);//消除松手时的抖动

}

              else

                     D1=1;           

       }

}

 

 

例2 按键检测程序

//功能:当每按下S8键时,数码管自动加1,当加到F时又从零开始。

#include


#define uint unsigned int

#define uchar unsigned char

sbit duan=P2^6;

sbit wei=P2^7;

sbit S1=P3^4;

uchar temp;

uchar code table[]=

{0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

 

void delay(uint z )

{

       uint x ,y;

       for(x=z;x>0;x--)

              for(y=110;y>0;y--);

}

void main()

{

       P3=0xff;

       wei=1;

       P0=0xfe;

       wei=0;

       temp=0;

       while(1)

       {

              if(S1==0)

              {

                     delay(20);//消除按下时的抖动

                     if(S1==0)//

                     {

                            temp++;

                            if(temp==16)temp=0;

                     }

                     while(!S1);//松手检测,防止temp一次多加

                     delay(20);//消除松手时的抖动

                     while(!S1);

              }    

           duan=1;

              P0=table[temp];

              duan=0;

       }

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    程序文件”,将目标hex文件导入。 5、然后点击“下载”选项,可以看到软件界面右下角显示框显示“正在检测目标单片机。。。”。 6、然后对单片机重新上电,不久后,软件界面右下角显示框显示“正在重新握手。。。成功......
    做环境试验。行业里解密的方法有很多,每个人破解的思路也不一样。但是大致分为几种。 一软件破解 利用软件破解目标单片机的方法,利用这种方法,不会对目标MCU元器件造成物理损伤。主要是对WINBONGD......
    -ISP软件 点击下载/编程,电脑开始检测目标单片机 5.给设备上电,开始给单片机烧录程序。 6.烧录成功 这样就能看到程序在硬件上的控制效果啦。 ......
    所要下载的hex文件,点击“打开程序文件”选择需要烧写的hex文件,该文件由编程软件生成,如keil生成;4)点击下载“下载/编程”,这里需要注意的是,点击完了后,会在右侧出现“正在检测目标单片机”的字......
    -2毫米,太远了测不到信号,(这个问题又摸索了半天)。 5,用示波器测霍尔传感器的信号,显示为方波,记录此时的频率 6,将霍尔传感器的信号线接到单片机的外部中断引脚上,捕获其频率。 此时......
    这些单片机按键设计方案,请拿好,不谢!;在单片机系统里,按键是常见的输入设备,在本文中介绍几种按键硬件、软件设计方面的技巧。一般的在按键的设计上,一般有四种方案。 一是GPIO口直接检测......
    设置",然后选择好我们的单片机型号,点击“将所选目标单片机设置位仿真芯片” 在Keil软件端仿真,我们先在while循环中下个断点,由于串口的通讯速度不高,延时时间太长仿真很容易崩溃,我这里将延时改成1ms......
    的改变可以在显示端体现。 3. 拨动人体检测的开关即模拟检测到人和检测不到人,在显示屏端也会相应的进行显示。 4. 拨动火焰传感器的开关代表检测到火焰,此时在显示屏端会进行提醒并且会通过GSM发短信进行提醒,这里......
    在出问题时可以快速定位问题所在。同时,开发人员还需掌握单片机的时钟和电源管理技术,以确保单片机的稳定性和可靠性。 总之,单片机调试需要充分了解目标单片机的特性和运行原理,并在实践中注意安全性和可靠性,根据......
    进行一点小操作,也就是下载一个ST宏晶公司提供的监控程序,像我们的STM32单片机每片都是自带监控程序的,在“STC-ISP”软件中找到"Keil仿真设置",然后选择好我们的单片机型号,点击“将所选目标单片机......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>