键盘灯亮但无法输入

今天碰到了一个很奇葩的问题,不知道为什么突然无法输入任何字符。

键盘的灯是亮的,表明应该不是驱动的事

如下解决:

1. 右键-》运行-》 用鼠标粘贴regedit -》运行


2.  在打开的窗口中,按照如下路径打开文件夹:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}


3. 删除UpperFilters项


4. 下面是最关键的步骤,重启!!!! 如果设置有开机密码的小伙伴,不要慌张,有一个东西叫做屏幕键盘可以输入密码的,注意开机界面左下方有一个按钮,点开可以选择使用屏幕按钮(我就折腾了很久才发现这个功能....ORZ)


5. 重新启动之后按照第一步重新开始(Tip:因为无法输入,可以将之前的步骤粘贴到U盘,方便操作)


6. 依然定位到文件夹: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}


7. 添加多重字符串UpperFilters项,内容是kbdclass


8. 再次重启,BINGO!!!


以下是使用Keil uVision5软件编写的控制两个LED的89C51单片机完整程序。在这个程序中,我们使用矩阵键盘输入密码,并将密码储存在程序中。当密码输入正确时,第一个LED起来,当密码输入错误三次时,第二个LED起来。 ```c #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit led1 = P2^0; // 第一个LED连接P2.0引脚 sbit led2 = P2^1; // 第二个LED连接P2.1引脚 uchar password[6] = {1, 2, 3, 4, 5, 6}; // 设定的6位密码 uchar input[6]; // 存储用户输入的6位密码 uchar count = 0; // 记录输入密码错误的次数 void delay(uint t) // 延时函数 { uint i, j; for(i = t; i > 0; i--) for(j = 110; j > 0; j--); } void init_keypad() // 初始化矩阵键盘 { P1 = 0xF0; // P1高4位输出0,低4位输入1 } uchar get_key() // 获取按下的键值 { uchar row, column, key; row = P1; // 读取P1的值 row &= 0xF0; // 高4位清零,低4位保留 if(row != 0xF0) // 如果有某一行有键按下 { delay(20); // 延时消抖 if((P1 & 0xF0) != 0xF0) // 如果按下的键仍然在同一行 { row = P1; // 再次读取P1的值 row &= 0xF0; // 高4位清零,低4位保留 column = P1; // 读取P1的值 column &= 0x0F; // 低4位清零,高4位保留 key = row | column; // 按下的键值为行值和列值的或 while((P1 & 0xF0) != 0xF0); // 等待按键释放 return key; // 返回按下的键值 } } return 0; // 如果没有键按下,返回0 } void main() { uchar i, key; while(1) { init_keypad(); // 初始化矩阵键盘 key = get_key(); // 获取按下的键值 if(key != 0) // 如果有键按下 { input[count] = key; // 将按下的键值存入用户输入的密码中 count++; // 输入次数加1 if(count == 6) // 如果输入的次数等于6 { count = 0; // 输入次数清零 for(i = 0; i < 6; i++) // 遍历用户输入的密码 { if(input[i] != password[i]) // 如果输入的密码与设定的密码不一样 { delay(500); // 延时500ms led2 = 1; // 第二个LED起来 delay(500); // 延时500ms led2 = 0; // 第二个LED熄灭 break; // 跳出循环 } } if(i == 6) // 如果遍历完用户输入的密码,没有发现错误 { led1 = 1; // 第一个LED起来 delay(500); // 延时500ms led1 = 0; // 第一个LED熄灭 break; // 跳出循环 } } } } } ``` 在这个程序中,我们使用了一个`password`数组来储存设定的6位密码,一个`input`数组来存储用户输入的6位密码,一个`count`变量来记录用户输入密码的次数。 在`main`函数中,我们使用了一个`while`循环来不断等待用户输入密码。在每次循环中,我们首先调用`init_keypad`函数初始化矩阵键盘,然后调用`get_key`函数获取按下的键值。如果有键按下,我们将按下的键值存入`input`数组中,并将输入次数加1。如果输入次数等于6,我们遍历用户输入的密码。如果输入的密码与设定的密码不一样,我们延时500ms,让第二个LED起来,并再次延时500ms,让第二个LED熄灭。如果遍历完用户输入的密码后,没有发现错误,我们延时500ms,让第一个LED起来,并再次延时500ms,让第一个LED熄灭。 希望能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值