单片机矩阵键盘如何实现一键多用

单片机矩阵键盘如何实现一键多用,第1张

可以加个定时器实现你说的功能,首先把矩阵键盘扫描编写成一个独立的函数,比如char keyread(void)(无键按下返回0,否则返回该键的数值) 然后把定时器设置为定时1s(根据你需要按得次数确定时间),主程序直接调用keycan(),当检测到返回值不为0时启动定时器,然后进入while死循环扫描按键,在定时器未到1s前,再次检测到返回该值则标记加1,当定时器到时间时读取标记的值进入按键处理程序,并把标记清零

按键消抖动程序估计有问题,给你看个消抖动的例子程序

while(key1==0)

{

delayms(10);

if(key1==0)

{

num=1;

}

}

#include<stdioh>

#include<reg51h>

#define uchar unsigned char

uchar key;

int i=0;

char b[4]={'0','0','0','0'};//输入的密码放这里和初始的比较来判断是否密码正确

void keyscan() //扫描按键是否按下

{

uchar temp;

P3=0xfe; //扫描第一行

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0) //判断按键是否按下

{

delayms(10);//去抖动

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)//确认按键按下

{

temp=P3;

switch(temp)

{

case 0xee:key='0';break;

case 0xde:key='1';break;

case 0xbe:key='2';break;

case 0x7e:key='3';break;

}

while(temp!=0xf0) //判断按键是否松开

{

temp=P3;

temp=temp&0xf0;

}

b[i]=key;i++;if(i==3)i=0;

}

}

P3=0xfd; //扫描第二行

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xed:key='4';break;

case 0xdd:key='5';break;

case 0xbd:key='6';break;

case 0x7d:key='7';break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

b[i]=key;i++;if(i==3)i=0;

}

}

P3=0xfb; //扫描第三行

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xeb:key='8' ;break;

case 0xdb:key='9' ;break;

case 0xbb:key='A';break;

case 0x7b:key='B';break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

b[i]=key;i++;if(i==3)i=0;

}

}

P3=0xf7; //扫描第四行

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xe7:key='C';break;

case 0xd7:key='D';break;

case 0xb7:key='E';break;

case 0x77:key='F';break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

b[i]=key;i++;if(i==3)i=0;

}

}

}

main()

{

char a[4]={'3','5','A','C'}; //这个做初始密码

while(1)//无限循环,保证了b 0-3 四个数有值

{

keyscan();

if(a[0]==b[0]&&a[1]==b[1]&&a[2]==b[2]&&a[3]==b[3])

{

//这里写密码正确程序要怎么处理

}

}

}

独立按键:

优点:可以直接读取,检测占用时间较少,不受其它因素影响。

缺点:占用IO口资源较多,每一个按键都独占一个IO口。

矩阵键盘

优点:占用IO口资源较少。

缺点:必须扫描检测按键情况,程序复杂,占用时间较多。

扩展资料:

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成44=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显。

参考资料来源:百度百科-矩阵键盘

以上就是关于单片机矩阵键盘如何实现一键多用全部的内容,包括:单片机矩阵键盘如何实现一键多用、怎么用C语言实现51单片机矩阵键盘按一个键后其他键才有用、51单片机4*3矩阵键盘6位密码锁c语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9304947.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存