你好!欢迎来到深圳市颖特新科技有限公司!
语言
当前位置:首页 >> 技术中心 >> 单片机入门 >> 从零开始学单片机(六)键盘接口

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

关键字:单片机 键盘接口 作者:admin 来源:不详 发布时间:2018-05-19  浏览:3

键盘工作原理还是使用都是比较简单的。下面是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;

}

编辑:admin  最后修改时间:2018-05-19

联系方式

0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08

Copyright © 2014-2023 颖特新科技有限公司 All Rights Reserved.  粤ICP备14043402号-4