大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果是操作系统下,判断按键,需要调用相关操作系统的相关函数。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、网站空间、营销软件、网站建设、庐阳网站维护、网站推广。
如果是单片机矩阵键盘,需要自己写循环延时判断按钮的电平状态。
我以window为例子,写了简单的判断W和A键同时按下的程序。
两个按键先后按下,之间存在间隔,我定义的常量,默认10毫秒,你需要自己改。
#include stdio.h
#include windows.h
#define delayT 10 //两个按键先后按下的最大间隔,毫秒
int keyDU(char key);//判断按键是否按下,是返回1,否返回0
int main()
{
int kw=0,kwl=0,ka=0,kal=0;
while(1)
{
kw=keyDU('W');
ka=keyDU('A');
if( (kw==1 kwl!=kw) || (ka==1 kal!=ka))
{
while(delayT)//当其中一个键按下,每一毫秒检查一次两个键有没有同时按下
{
kw=keyDU('W');
ka=keyDU('A');
if(kw==0)
kwl=kw;
if(ka==0)
kal=ka;
if(kw==1 kwl!=kw ka==1 kal!=ka)
{
printf("W、A键同时被按下\n");
kwl=kw;
kal=ka;
break;
}
Sleep(1);
}
}
if(kw==0)
kwl=kw;
if(ka==0)
kal=ka;
}
return 0;
}
int keyDU(char key)//判断按键是否按下,是返回1,否返回0
{
int down=0;
down=GetKeyState(key);
if(down0)
return 1;
if(down0)
return 0;
return -1;
}
有独立键盘和距阵键盘的独立键盘的很简单我就不写了距阵的我给你写一个//键盘扫描ucharKeys_Scan(){ucharsCode,kCode,i,k;//低4位置0,放入4行P1=0xf0;//若高4位出现0,则有键按下if((P10xf0)!=0xf0){DelayMS(2);if((P10xf0)!=0xf0){sCode=0xfe;//行扫描码初值for(k=0;k4;k++)//对4行分别进行扫描{P1=sCode;if((P10xf0)!=0xf0){kCode=~P1;for(i=0;i16;i++)//查表得到按键序号并返回if(kCode==KeyCodeTable[i])return(i);}elsesCode=_crol_(sCode,1);}}}return(-1);
添加WM_KEYDOWN函数。在函数体中case WM_KEYDOWN: if (wParam==VK_LEFT)//方向键左 { rect1.left-=10; rect1.right-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_RIGHT)//方向键右 { rect1.left+=10; rect1.right+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_UP)//方向键上 { rect1.top-=10; rect1.bottom-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_DOWN)//方向键下 { rect1.top+=10; rect1.bottom+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_PRIOR)//PG UP { rect1.top-=10; rect1.bottom-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_NEXT)//PG DN { rect1.top+=10; rect1.bottom+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_HOME)//HOME { rect1.left-=10; rect1.right-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_END)//END { rect1.left+=10; rect1.right+=10; InvalidateRect (hWnd,NULL,TRUE); } break;
C语言判断键盘按下和释放,是通过检测该键的状态来实现的。如果是单一的一个按键,那么直接检测该键是“1”还是“0”,就可以确定是按下还是释放。如果是矩阵键盘,那么需要发送扫描码,再检测输入值,来判断键盘中键的状态。以下举例说明:
bit keychk() //单一按键检测
{
if(P1.0==0) //如果键按下
{
delay(); //延时去抖
if(P1.0==0)return(1); //返回键状态
}
return(0);
}
unsigned char kbscan(void) //矩阵扫描按键检测
{
unsigned char sccode,recode;
P1=0x0f; //发0扫描,列线输入
if ((P2 0x0f) != 0x0f) //有键按下
{
delay(20); //延时去抖动
if ((P10x0f)!= 0x0f)
{
sccode = 0xef; //逐行扫描初值
while((sccode0x01)!=0)
{
P1=sccode;
if((P10x0f)!=0x0f)
{
recode=(P10x0f)|0xf0;
while((P10x0f)!=0x0f);//等待键抬起
return((~sccode)+(~recode));
}
else
sccode=(sccode1)|0x01;
}
}
}
return 0; //无键按下,返回0
}