51单片机矩阵键盘(c语言) 求大神啊~

51单片机矩阵键盘(c语言) 求大神啊~,第1张

uchar KeyScan(void)

{

static uchar k=0; //由于函数在调用结束时k值已返回给函数,k作为局部变量即可

/////////

uchar Trg,Trg1,Trg2,Cont1,Cont2;

uchar ReadData1,ReadData2;

/////////

P3=0x0f;

ReadData1=P3^0x0f;

Trg1=ReadData1&(ReadData1^Cont1); //触发键

Cont1=ReadData1; //长按键

/////////

P3=0xf0;

ReadData2=P3^0xf0;

Trg2=ReadData2&(ReadData2^Cont2);

Cont2=ReadData2;

Trg=Trg1+Trg2;

////////

switch(Trg)

{

case 0x81:{k=1;break;}

case 0x41:{k=2;break;}

case 0x21:{k=3;break;}

case 0x11:{k=4;break;}

case 0x82:{k=5;break;}

case 0x42:{k=6;break;}

case 0x22:{k=7;break;}

case 0x12:{k=8;break;}

case 0x84:{k=9;break;}

case 0x44:{k=10;break;}

case 0x24:{k=11;break;}

case 0x14:{k=12;break;}

case 0x88:{k=13;break;}

case 0x48:{k=14;break;}

case 0x28:{k=15;break;}

case 0x18:{k=16;break;}

default:{k=0;break;}

}

return(k);

}

//在主函数里面直接调用keyboard()函数,直接返回键值;

然后在数码管显示。

好好的研究下这个键盘程序, 这种方式很程序很精炼、简单

绝对可以调出来。

C语言判断键盘按下和释放,是通过检测该键的状态来实现的。如果是单一的一个按键,那么直接检测该键是“1”还是“0”,就可以确定是按下还是释放。如果是矩阵键盘,那么需要发送扫描码,再检测输入值,来判断键盘中键的状态。以下举例说明:bit keychk() //单一按键检测{if(P10==0) //如果键按下 { delay(); //延时去抖 if(P10==0)return(1); //返回键状态 }return(0);}unsigned char kbscan(void) //矩阵扫描按键检测{unsigned char sccode,recode;P1=0x0f; //发0扫描,列线输入if ((P2 & 0x0f) != 0x0f) //有键按下{delay(20); //延时去抖动if ((P1&0x0f)!= 0x0f){sccode = 0xef; //逐行扫描初值while((sccode&0x01)!=0){ P1=sccode;if((P1&0x0f)!=0x0f){ recode=(P1&0x0f)|0xf0;while((P1&0x0f)!=0x0f);//等待键抬起return((~sccode)+(~recode));} elsesccode=(sccode<<1)|0x01;}}}return 0; //无键按下,返回0}

以上就是关于51单片机矩阵键盘(c语言) 求大神啊~全部的内容,包括:51单片机矩阵键盘(c语言) 求大神啊~、如何获取用户按下的键、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9787883.html

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

发表评论

登录后才能评论

评论列表(0条)

保存