c语言按键检测
‘壹’ C语言 如何在一段时间内检测键盘是否按下
#include <bios.h>
#include <stdio.h>
main()
{
int key;
for(;;)
{
if (bioskey(1)) /*有键按下,读取键值*/
key=bioskey(0);
else /*无键按下,返回0*/
key=0;
switch(key)
{case 0: ...../*无按键,执行该操作*/
case 0xXXXXH:..../*不同键值,做不同处理*/
。。。。。
}
}
}
该程序段功能:
判断是否有键按下,若有进行不同操作,若无进行其他操作。
相关原理:
函数名: bioskey
功 能: 直接使用BIOS服务的键盘接口
函数原型:int bioskey (int cmd)
说明:bioskey()的函数原型在bios.h中
bioskey()完成直接键盘操作,cmd的值决定执行什么操作。
cmd = 1:
当cmd是1,bioskey()查询是否按下一个键,若按下一个键则返回非零值,否则返回0。
键盘有按键时,会把键值(扫描码)存入缓冲区,当需要判断是否有键按下时,扫描缓冲区,为空则无键按下,不为空则有键按下。注意:该功能并不清空缓冲区。
cmd = 0:
当cmd是0,bioskey()返回键盘键入的值。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8位数存放该字符的ASCII码,高8位存放该键的扫描码;对于特殊键(如方向键、F1~F12等等),低8位为0,高8位字节存放该键的扫描码。
其操作步骤为:
1.检测缓冲区是否有数据;
2.没有则继续第一步;
3.读取缓冲区第一个单元中的键盘输入
4.读取的扫描码
5.将已读取的键盘输入从缓冲区删除
‘贰’ 如何用C语言实现按键功能
主要就是按键检测,防抖呗。
首先给出检测按键代码:(我这个事4*4键盘。具体你要根据实际情况编写)
uchar TestKey()
{
uchar cord_h,cord_l;
P6=0x0f;
cord_h=P6&0x0f;
if(cord_h!=0x0f)
{
Delay_Xms(1);
if(cord_h!=0x0f)
{
cord_h=P6&0x0f;
P6=cord_h|0xf0;
cord_l=P6&0xf0;
return(cord_h+cord_l);
}
}return(0xff);
}
--------------------------------------
然后你在Main函数里编写循环,检测按键然后做你想做的事情。。。
while(1)
{
key=TestKey();//调用键盘扫描,
switch(key)
{
case 0x7e:P4=0xa1;break;//0 按下相应的键显示相对应的码值
case 0x7d:Show1Menu();break;//1
case 0x7b:P4=0x83;break;//2
case 0x77:P4=0x88;break;//3
case 0xbe:P4=0x99;break;//4
case 0xbd:P4=0x90;break;//5
case 0xbb:P4=0x82;break;//6
case 0xb7:P4=0xb0;break;//7
case 0xde:P4=0xc0;break;//8
case 0xdd:P4=0x80;break;//9
case 0xdb:P4=0x92;break;//a
case 0xd7:P4=0xa4;break;//b
case 0xee:P4=0xc6;break;//c
case 0xed:P4=0xf8;break;//d
case 0xeb:P4=0x99;break;//e
case 0xe7:P4=0xf9;break;//f
}
}