51单片机 c语言编程 4*4矩阵键盘如何实现等待按键松开功能

51单片机 c语言编程 4*4矩阵键盘如何实现等待按键松开功能,第1张

1、在程序检测到按键后,加个延时去抖,不要加松手检测。然后执行第一个按键相对应的程序。然后继续按键扫描。注意这里说的是继续,也就是继续往下检测。否则的程序就只能执行第一个按键所对应的程序了。这样,就能检测到第二次按键的键值了。

2、例程:

uchar shaomiao()

{

uchar l,h;

P1=0xf0;//获取高四位信息。在此低四位接到行。行低电平

l=P1|0x0f;

P1=l;//只把被按下键所在列置低

h=P1|0xf0;

switch(h)

{

case 0xfe:h=0;break;//1111 1110

case 0xfd:h=1;break;

case 0xfb:h=2;break;

case 0xf7:h=3;break;

}

switch(l)

{

case 0xef:l=0;break;//1110 1111

case 0xdf:l=1;break;

case 0xbf:l=2;break;

case 0x7f:l=3;break;

}

P1=0xf0;

/关键问题解决如下/

while(P1!=0xf0)

{

while(P1!=0xf0);//等待放开按键

delayms(50);//防止抖动

}

return(h4+l);

}

#include<reg51h>

unsigned char keyval,keynum=0;

unsigned char distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};

void t1isr() interrupt 3

{

unsigned char sccode,recode;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

P3=0x0f; //发0扫描,列线输入

if ((P3 & 0x0f) != 0x0f)keynum++; //有键按下

else keynum=0;

if(keynum>5) //按键保持在5次中断以上

{

keynum=0;

sccode = 0xef; //逐行扫描初值

while((sccode&0x01)!=0)

{

P3=sccode;

if((P3&0x0f)!=0x0f)

{

recode=(P3&0x0f)|0xf0;

getkey((~sccode)+(~recode));

}

else

sccode=(sccode<<1)|0x01;

}

}

getkey(0);

}

void getkey(unsigned char key)

{

if(key==0){keyval=0xff;return;}

switch(key)

{

case 0x11:keyval=7;break;

case 0x12:keyval=4;break;

case 0x14:keyval=1;break;

case 0x18:keyval=10;break;

case 0x21:keyval=8;break;

case 0x22:keyval=5;break;

case 0x24:keyval=2;break;

case 0x28:keyval=0;break;

case 0x41:keyval=9;break;

case 0x42:keyval=6;break;

case 0x44:keyval=3;break;

case 0x48:keyval=11;break;

case 0x81:keyval=12;break;

case 0x82:keyval=13;break;

case 0x84:keyval=14;break;

case 0x88:keyval=15;break;

default:keyval=0xff;break;

}

}

main()

{

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

TR0=1;

ET0=1;

EA=1;

while(1)

{

if(keyval!=0xff)P0=distab[keyval];

}

}

很简单的啊,不太清楚你的电路图,我把主要程序写一下:

#include<reg52h>

unsigned char flag=0;//设置flag作为标志位,初值为0,一旦产生中断,将其置1

void main()

{

EA=1;//开总中断

EX0=1;//开外部中断0 ,假设是由P32产生的中断

IT0=1;//设置产生中断的方式,这是表示下降沿触发

P0=0X0F;//假设矩阵键盘接P0口,给所有列线低电平,所有行线高电平

while(1)

{

if(flag==1) //这个是表示,如果中断不产生,下面的程序不会运行,只有中断了,才会键盘扫描

{

按键扫描程序,这个我就不写了,写法有很多啦

}

数码管显示程序,这个我也不写了,不晓得你是什么电路图

}

}

void scan() interrupt 0

{

flag=1;//表示,一旦中断产生了,将flag置1

}

希望对你有用,呵呵

以上就是关于51单片机 c语言编程 4*4矩阵键盘如何实现等待按键松开功能全部的内容,包括:51单片机 c语言编程 4*4矩阵键盘如何实现等待按键松开功能、求51单片机矩阵4*4键盘程序,P0口接一个数码管,P3口接矩阵键盘,C语言的、求个单片机矩阵键盘(4*4)中断(记得要中断)的C语言程序。。求高手自己写个啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9764377.html

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

发表评论

登录后才能评论

评论列表(0条)

保存