您的位置 首页 培训

从零开始学单片机(六)键盘接口

键盘工作原理还是使用都是比较简单的。下面是4times;4的阵列键盘,行分别接P30-P33,列接P34-P37,没有接电源。采用查询法判断那一个

键盘作业原理仍是运用都是比较简略的。下面是4×4的阵列键盘,行别离接P3.0-P3.3,列接P3.4-P3.7,没有接电源

选用查询法判别那一个按键被按下。例如,令P3=0xFE,然后在将P3跟0xFE比较,假如持平,阐明S6-S9没有被按下,否则在判别P3高四位哪一位等于0。例如P3.4=0 则阐明S6被按下。

留意: 手艺按下键盘到开释这个进程大约50ms左右,在按下开端到弹簧片安稳触摸这段时刻为5-10ms,从开释到弹簧片彻底分隔也是5-10ms,在抵达安稳触摸和彻底分隔的微观进程中,电平是时高时低的,由于单片机的速度相对比较快,所以人感觉到只按下一次,单片机却检测到按下屡次。假如在单片机初次检测到键盘按下时延时10ms左右再去检测,就不会检测到颤动的毛刺电平了。这便是消抖的原理

理解原理了,写程序天然也简略了。接下来只要在每一个程序履行周期里边查询它就行了,暂时省掉防抖代码。

#include

#include

void delay(unsigned int times);

unsigned int scankeys();

void main()

{

while(1)

{

scankeys();

delay(100);

}

}

void delay(unsigned int times)

{

unsigned int i,j;

for (i=0; i

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

_nop_();

}

unsigned int scankeys()

{

unsigned char temp;

P3=0xFE;

temp=P3;

if(temp!=0xFE)

{

if(temp==0x7E)

P1 = 3 ;

else if(temp==0xBE)

P1 = 2 ;

else if(temp==0xDE)

P1 = 1 ;

else if(temp==0xEE)

P1 = 0 ;

}

else

{

P3=0xFD;

temp=P3;

if(temp!=0xFD)

{

if(temp==0x7D)

P1 = 7 ;

else if(temp==0xBD)

P1 = 6 ;

else if(temp==0xDD)

P1 = 5 ;

else if(temp==0xED)

P1 = 4 ;

}

else

{

P3=0xFB;

temp=P3;

if(temp!=0xFB)

{

if(temp==0x7B)

P1 = 11 ;

else if(temp==0xBB)

P1 = 10 ;

else if(temp==0xDB)

P1 = 9 ;

else if(temp==0xEB)

P1 = 8 ;

}

else

{

P3=0xF7;

temp=P3;

if(temp!=0xF7)

{

if(temp==0x77)

P1 = 15 ;

else if(temp==0xB7)

P1 = 14 ;

else if(temp==0xD7)

P1 = 13 ;

else if(temp==0xE7)

P1 = 12 ;

}

}

}

}

return 0;

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/262203.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部