
正文
c语言中按键扫描函数 c语言扫描键盘输入
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
在c语言中什么函数能实现识别键盘上的按键?
添加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;
相关问答
Q1: C语言矩阵键盘函数疑问
看程序中P1.0-P1.3是行扫描输出,P1.4-P1.7是扫描输入。所以原理是P1.0-P1.3中每次只有一个引脚输出0,其余输出1,然后读取P1.4-P1.7是否有引脚为0;如果有0说明有按键按下,如果全1说明没有按键按下。
scancode这个变量就是用于控制P1.0-P1.3(P1 = scancode;由这句输出)中每次只有一个引脚输出0的。
scancode = 0xfe;这句中bit0值为0,其余bit为1,所以开始时,P1 = scancode;由这句输出后,P1.0为0,其余引脚为1。
scancode = (scancode 1) | 0x01;这句使为0的bit左移一位(依次值为0xFE, 0xFD, 0xFB, 0xF7, 0xEF)。0xFE, 0xFD, 0xFB, 0xF7都满足while ((scancode 0x10) != 0)这个条件,而0xEF则不满足了,所以说此语句只检查第五位是否为1,如果最低列按下后不就等于零了,就跳过此函数了,到这就所有按键都扫描过了,没有按键按下(如果有按键按下,中途就返回了)。
if ((P1 0xf0) != 0xf0)这句中P1 0xf0表示只判断P1.4-P1.7,只有当前按下的按键所在行扫描输出为0时,这个表达式才成立(这时(P1 0xf0) != 0xf0);否则这个表达式肯定不成立(这时(P1 0xf0) == 0xf0),所以说当前行。
return ((~scancode) + (~tmpcode));这句就是如果有按键按下,那么直接返回键值,并不再进行循环退出程序。
程序格式要注意,下面这样更清楚:
uchar keyscan(void)
{
uchar scancode, tmpcode;
P1 = 0xf0; // 发全0行扫描码
if ((P1 0xf0) != 0xf0)
// 若有键按下
{
delay(); // 延时去抖动
if ((P1 0xf0) != 0xf0)
// 延时后再判断一次,去除抖动影响
{
scancode = 0xfe;
while ((scancode 0x10) != 0)
// 逐行扫描此语句只检查第五位是否为1,如果最低列按下后不就等于零了,就跳过此函数了
{
P1 = scancode; // 输出行扫描码
if ((P1 0xf0) != 0xf0)
// 本行有键按下为什么是行?哪一列按下此句都成立啊
{
tmpcode = (P1 0xf0) | 0x0f;
/* 返回特征字节码,为1的位即对应于行和列 */
return ((~scancode) + (~tmpcode));
}
else
scancode = (scancode 1) | 0x01;
// 行扫描码左移一位
}
}
}
return (0); // 无键按下,返回值为0
}
Q2: C51 4*4键盘扫描程序(c语言)
键盘为4*4矩阵式连接c语言中按键扫描函数,一共有16个按键。 工作原理为。P1端c语言中按键扫描函数的低四位为列,高四位行。所先置低四位为低,高四位为高,当有按键按下时高四位就会有某位被拉低。只要判断高四位不为全高就说明有按键按下。判断有按键按下后就要判断是某位按下的,方法为,选将高四位的某一位置低。判断低四位是否有低电平出现。依次对高四位的每位置低并判断低四位出现的低电平。如高四位某位置低后低四某也有出现低电平。这样就能判断出低四位与高四位相连的位某位按键被按下c语言中按键扫描函数了。通过定义好的编码就可以查出是某个按键被按下c语言中按键扫描函数了,程序将按键值通过查表并发送到LED上显示。 6位LED为动态扫描方式 。先显示第一位,延时一定时间后在显示第二位依次类推。。。 共有17个按键。按下按键后数码管显示相应的数字,并左移一位。uchar kbscan(void) /*键扫描函数*/{uchar j; uchar sccode,recode; P2=0x0f; /*发0行扫描码*/ if((P2 0x0f)!= 0x0f) /*若有键按下*/ { dlms(); if((P20x0f)!= 0x0f) /*逐行扫描初值*/ { sccode=0xfe; for(j=4;j0;j--) { while((sccode0x10)!=0) { P2=sccode; /*输出行扫描码*/ if((P20xf0)!=0xf0) /*本行有键按下*/ { recode=(P20xf0)|0x0f; return((~sccode)+(~recode)); /*返回特征字节码*/ } else sccode=(sccode1)|0x01; /*行扫描码做移一位*/ } } } } return(0); /*无键按下,返回0值*/}参考链接c语言中按键扫描函数:
Q3: C语言获取按键信息函数
这个程序应该满足你的要求吧。
#include stdio.h
#include conio.h
int main(void)
{
while (1)
{
if (!kbhit())
printf("1");
else
{
char c = getch();
if (c == 'a')
{
putchar('2');
getch();
}
}
}
return 0;
}
关于c语言中按键扫描函数和c语言扫描键盘输入的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






