资源描述:
《51单片机按键》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、键盘检测原理及应用实现作者:超级鹏鹏一.关于键盘的一些简单介绍键盘分为编码键盘和非编码键盘。键盘上闭合的键的识别由专门的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘。我们先来看这块板子上的独立按键:按键的一端共地,另外一端,三个按键分别连接在CPU的P3.2P3.3P3.4三个端口上。如果按键被按下,那么我们可以检测到这三个端口应该是低电平。还有一个知识点要在这里
2、说明:就是按键的消抖。按键在闭合和断开的时候,会有触点存在抖动现象,就如上图那样,所以我们在检测键盘是否按下都要加上去抖动的操作,利用软件延时:就是先判断一下按键是否按下?延迟10ms再检测一次按键按下?检测按键是否释放执行相应代码二.小试牛刀我们自己编程来尝试一下吧!!!#include#defineucharunsignedchar#defineuintunsignedintsbitkey=P3^2;//定义一个独立键盘ucharcodetable[16]={0x3f,0x06,0x5b
3、,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};ucharcodeled_w[8]={0,1,2,3,4,5,6,7};ucharnum=0;voiddelay(uint);/**********************************************************名称:main()功能:通过一个独立按键使得每按一次按键,数码管上的数字加一**********************************************************/v
4、oidmain(){while(1){if(key==0)//消抖,先判断一次{delay(10);//延迟一下if(key==0)//再判断一下,如果真的被按下,执行下面内容{num++;if(num==10)//数码管上显示到9时,再从0重新开始num=0;}while(!key);//判断是否按键弹起来delay(10);while(!key);}elseP0=table[num];//数码管段值P2=led_w[0];//点亮某一位数码管}}/*****************************
5、*****************************名称:delay()功能:延迟函数**********************************************************/voiddelay(uintx){uinta,b;for(a=x;a>0;a--)for(b=110;b>0;b--);}按下第一个独立按键,是不是数字开始从0~9呢!!!恭喜你,你成功了!!!三.矩阵键盘检测独立键盘与单片机连接时,每一个按键都需要单片机的一个IO口,若某单片机系统需要较多的按键,如果
6、用独立按键便会占用过多的IO口资源。单片机的IO口资源比较宝贵,所以当用到多个按键时,为了节省IO线,我们引入矩阵键盘。我们可以看出矩阵键盘没有共地端,所以我们在检测按键有没有被按下时,可以先送一列低电平,其余几列都为高电平,立即轮流检测一次各行是否有低电平,若检测到某一行为低电平,则我们可以确定当前按键被按下的键是哪一行哪一列的。我们可以利用这种方法检测完全部按键。同样我们也可以将行线置低电平检测列线。Ok,我们有了以前独立按键的基础,又有了上述讲的知识,那么我们还是从编程中取得想要的结果吧!!#inclu
7、de#include#defineucharunsignedchar#defineuintunsignedintvoiddelay(uint);ucharcodetable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*******************************************************名称:keysc
8、an()功能:实现按键的读取,并返回相应的按键位置*******************************************************/ucharkeyscan(){ucharbuffer[]={0xfe,0xfd,0xfb,0xf7};//每一行线分别为低电平的数组uchari,j,temp;for(i=0;i<4;i++){P1=buffer[i];//每一行线为低电平