C51单片机键值重复读取

C51单片机键值重复读取,第1张

你这程序这么写,在调用时肯定会重复读取一个键值的。

改进方法:在没有按键时,读取的键值应该是多少,知道吗,或者能计算出来吗?用xx表示。

主程序要用一个变量,假设叫keyx,保存原键值的,初始值就是那个未按键的值keyx=xx。

好了,在主程序调用时,判断键值,是未按键:keyx=xx,就不处理。继续调用。

如果有按键,按键值=keyx?不等,说明是新按键了,keyx=新键值。

这时会出现重复读取的现象了,但是:按键值=keyx了,就不处理了。

这样有按键,只处理一次。

当松开按键,读取的是按键值xx,keyx=xx了。

再有新按键,按键值=keyx肯定不成立,则又有新按键,依此类推,就可以了。

单片机书上应该有讲的哦,多查资料。

既然是4x4,即4行4列了,共需要8个I/O口,有8bit数据(如高四位为行4bit,低四位为列4bit)位:xxxx xxxx。还要结合你的程序来编码键值,如果有键按下了,查询所有按键的所连接的I/O口电平状态,每个按键需要两个I/O口,一端连接行(行4bit之一),一端连接列(列4bit之一);若此时按键的电平状态为0010 0001,即十六进制数据0x21,按下的按键所对应的键值编码即为0x21。当然为了使用方便,在确定了按下按键的编码后,可对其赋值,我要将它赋值为数字键8,方便后续编程使用。例:

//获取键值编码,由于确定哪个按键按下

uchar keyscan(void)//键盘扫描函数,使用行列反转扫描法

{

uchar cord_h,cord_l;//行列值

P3=0x0f; //行线输出全为0

cord_h=P3&0x0f; //读入列线值

if(cord_h!=0x0f) //先检测有无按键按下

{

delay(100); //去抖

if(cord_h!=0x0f)

{

cord_h=P3&0x0f; //读入列线值

P3=cord_h|0xf0; //输出当前列线值

cord_l=P3&0xf0; //读入行线值

return(cord_h+cord_l);//键盘最后组合码值

}

}return(0xff); //返回该值

}

while(1)

{

key=keyscan();//调用键盘扫描,

//keyVal=0~15表示按键对应的功能

switch(key)

{

case 0x7e:keyVal=0;break;//0 按下相应的键显示相对应的码值

case 0x7d:keyVal=1;break;//1

case 0x7b:keyVal=2;break;//2

case 0x77:keyVal=3;break;//3

case 0xbe:keyVal=4;break;//4

case 0xbd:keyVal=5;break;//5

case 0xbb:keyVal=6;break;//6

case 0xb7:keyVal=7;break;//7

case 0xde:keyVal=8;break;//8

case 0xdd:keyVal=9;break;//9

case 0xdb:keyVal=10;break;//a

case 0xd7:keyVal=11;break;//b

case 0xee:keyVal=12;break;//c

case 0xed:keyVal=13;break;//d

case 0xeb:keyVal=14;break;//e

case 0xe7:keyVal=15;break;//f

}

如果你用的键盘hook的话,你可以用msdn查询一下里面包含了 keyboardproc回调函数的

参数的解释!!其中 wparam就是所谓的 虚拟件 例如

VK_SPACED代表 空格

在vb中你可以 根据 定义宏或者常量来 给16进制的 数字赋值 然后旧可以和c一样调用

vk_拉, 加分谢谢!!!

RegValue = CreateObject("WscriptShell")RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")

Msgbox(RegValue)

以上就是关于C51单片机键值重复读取全部的内容,包括:C51单片机键值重复读取、单片机中的4×4矩阵键盘的键值怎么求、VB里如何获得在windows下按键盘的键值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/web/9316318.html

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

发表评论

登录后才能评论

评论列表(0条)

保存