按键处理的几种方法
解决电脑键盘按键松动的三种有效方法

解决电脑键盘按键松动的三种有效方法电脑键盘是我们日常使用最频繁的输入设备之一,但随着时间的推移,键盘按键可能会出现松动的问题。
这不仅会影响我们的打字速度和准确性,还可能导致按键失灵。
为了解决这一问题,本文将介绍三种有效的方法。
方法一:清洁键盘键盘按键松动的一个常见原因是灰尘和污垢的积累。
这些杂质会进入按键之间的间隙,导致按键无法正常弹起。
因此,定期清洁键盘是解决按键松动问题的首要方法。
首先,关闭电脑并断开键盘与电源的连接。
然后,将键盘轻轻倒扣,用吹风机或键盘清洁喷雾剂将键盘上的灰尘吹走。
接下来,使用一根细长的刷子(如牙刷)蘸取清洁剂,沿着键盘的间隙慢慢刷洗。
最后,用干净的湿布擦拭键盘表面,确保键盘完全干燥后再重新连接电源。
方法二:更换按键如果清洁键盘后问题仍未解决,那么可能需要考虑更换松动的按键。
这需要一些技巧和耐心,但通常是一种有效的解决方法。
首先,找到松动的按键。
通常,按键的下方有一个小型的弹簧结构,它负责按键的弹起。
使用小型的螺丝刀或针状物轻轻撬开松动的按键,将其从键盘上取下。
接下来,检查按键下方的弹簧结构是否完好无损。
如果弹簧损坏或变形,需要将其更换为新的弹簧。
然后,将新的按键插入键盘上的相应位置,并用力按下以确保按键固定。
方法三:使用键帽固定器键帽固定器是一种专门设计用于解决键盘按键松动问题的工具。
它可以帮助固定松动的按键,使其恢复正常的使用效果。
使用键帽固定器的方法很简单。
首先,找到松动的按键,并将键帽轻轻取下。
然后,将键帽固定器插入按键的下方,确保它与键盘底座紧密贴合。
最后,将键帽重新安装到固定器上,用力按下以确保按键稳固。
总结通过清洁键盘、更换按键或使用键帽固定器,我们可以有效解决电脑键盘按键松动的问题。
无论采取哪种方法,都需要耐心和细心操作,以确保键盘的正常使用。
同时,定期保持键盘的清洁和维护也是预防按键松动问题的重要措施。
希望本文提供的方法能够帮助到你解决键盘按键松动的困扰,提升你的打字体验。
解决键盘按键失灵的方法

解决键盘按键失灵的方法键盘按键失灵是我们在日常使用电脑时可能会遇到的一个问题。
当键盘按键失灵时,我们将无法正常输入文字,给我们的工作和生活带来很大的困扰。
那么,如何解决键盘按键失灵的问题呢?下面将介绍一些常见的方法供大家参考。
一、检查键盘连接当键盘按键失灵时,首先需要检查键盘与电脑的连接是否正常。
可以尝试重新插拔键盘连接线,确保连接稳固。
同时,也可以尝试将键盘连接到其他的USB接口上,以排除接口故障的可能性。
二、清洁键盘键盘长时间使用后,键盘上可能会积累灰尘、污垢等杂物,导致按键失灵。
因此,定期清洁键盘是解决按键失灵问题的有效方法。
可以使用清洁刷或者吹风机将键盘上的灰尘吹掉,或者使用专用的键盘清洁剂进行清洁。
在清洁键盘时,需要注意断电操作,避免发生电击或其他意外。
三、检查键盘驱动程序键盘按键失灵可能是由于键盘驱动程序出现问题所致。
可以通过以下步骤检查和更新键盘驱动程序:1.打开计算机的设备管理器,找到键盘选项。
2.右键点击键盘选项,选择“更新驱动程序”。
3.根据系统提示,选择自动更新驱动程序或手动下载最新的驱动程序进行安装。
四、重启电脑有时,键盘按键失灵可能是由于系统故障引起的。
这时,可以尝试重启电脑,以解决键盘按键失灵的问题。
重启电脑可以重新加载系统和驱动程序,有可能恢复键盘的正常工作。
五、更换键盘如果以上方法都无法解决键盘按键失灵的问题,那么很有可能是键盘本身出现了故障。
这时,可以考虑更换键盘。
选择一款质量可靠、适合自己使用习惯的键盘,可以有效解决键盘按键失灵的问题。
总结:解决键盘按键失灵的方法有很多种,可以根据具体情况选择合适的方法进行处理。
在日常使用中,我们也应该注意保持键盘的清洁,避免灰尘和污垢的积累。
另外,定期检查和更新键盘驱动程序,以及及时更换故障的键盘,都是保证键盘工作正常的重要措施。
希望以上方法能够帮助大家解决键盘按键失灵的问题,提高工作和生活的效率。
解决电脑键盘失灵的方法

解决电脑键盘失灵的方法在使用电脑的过程中,有时候我们会遇到键盘失灵的问题。
这个问题给我们的生活和工作带来了不便,但是我们可以通过一些简单的方法来解决。
本文将介绍几种解决电脑键盘失灵的方法。
一、检查键盘连接首先,我们应该检查键盘的连接是否正常。
键盘与电脑主机连接的常用方式有USB和蓝牙两种。
对于USB连接的键盘,我们可以将键盘插头拔出后再重新插入,确保连接牢固。
对于蓝牙连接的键盘,我们可以尝试重新连接蓝牙设备,或者重新配对键盘与电脑之间的蓝牙连接。
二、清洁键盘键盘在使用过程中,会因为灰尘、油污等原因导致按键失灵。
因此,定期清洁键盘是解决键盘失灵问题的有效方法。
我们可以使用专用的清洁剂、清洁刷或者吹风机来清洁键盘。
将清洁剂喷洒于键盘表面,使用清洁刷清洁按键间的缝隙,或者使用吹风机将灰尘吹走,这样可以大大提高键盘的灵敏度。
三、重新安装键盘驱动程序键盘失灵的问题有时候可能是由于驱动程序的故障或者冲突所致。
我们可以通过重新安装键盘驱动程序来修复这个问题。
打开设备管理器,找到键盘驱动程序,右键点击卸载,然后重新启动电脑,系统会自动重新安装键盘驱动程序。
如果系统没有自动进行安装,我们可以前往电脑厂商的官方网站下载并安装最新的驱动程序。
四、使用虚拟键盘如果键盘无法解决键盘失灵的问题,我们可以尝试使用虚拟键盘。
虚拟键盘是电脑操作系统提供的一种可视化软件键盘,通过鼠标或者触摸板来模拟键盘操作。
我们可以在电脑设置中找到虚拟键盘的选项,在需要输入的时候点击相应的按键即可。
五、寻求专业帮助如果以上方法都不能解决键盘失灵的问题,我们可能需要寻求专业技术支持。
可以将电脑送到售后服务点,让专业人员检修键盘或者更换键盘。
另外,如果是笔记本电脑的键盘失灵,我们也可以使用外接键盘来暂时代替。
总结:通过检查连接、清洁键盘、重新安装驱动程序、使用虚拟键盘以及寻求专业帮助这几种方法,我们可以解决电脑键盘失灵的问题。
在日常使用电脑的过程中,我们应该保持键盘的清洁,并及时处理键盘失灵问题,以提高工作和生活的效率。
应对电脑键盘按键卡住的实用办法

应对电脑键盘按键卡住的实用办法电脑在现代生活中扮演着重要的角色,而键盘作为输入设备的主要工具,在我们的日常使用中起到了至关重要的作用。
然而,键盘按键卡住是一个常见的问题,给我们的工作和学习带来了很大的困扰。
为了帮助大家能够更好地应对这个问题,本文将介绍几种实用的办法。
一、用软毛刷清理键盘键盘经常受到灰尘和碎屑的侵扰,这些杂物会导致按键无法正常弹起,造成按键卡住的情况。
因此,定期清理键盘是解决问题的有效方法之一。
我们可以使用软毛刷将键盘上的灰尘和碎屑清理干净。
在清理过程中,可以将键盘翻过来轻轻拍打,使杂物掉落出来。
这样做可以有效减少按键卡住的情况发生。
二、使用喷气罐清洁键盘除了使用软毛刷清理外,我们还可以借助喷气罐清洁键盘。
喷气罐里装有压缩气体,能够将键盘间隙中的灰尘和杂物吹走。
使用喷气罐时,需要将气罐保持垂直,并将喷嘴对准键盘间隙,用力喷射。
但需要注意的是,使用喷气罐时要保持适当的距离,避免过近造成按键损坏。
三、键盘重插的方法有时,键盘按键卡住是由于键盘连接不稳造成的。
这时,我们可以尝试将键盘重插一下,重新建立连接。
具体操作方法是,首先将电脑关机,拔下键盘连接线,稍等片刻再重新插入。
重新插入后,打开电脑,看看键盘是否恢复正常工作。
这个简单的方法有时能够解决按键卡住的问题。
四、更换按键弹簧在长时间使用键盘后,按键弹簧可能会因为老化而失去原本的弹性,导致按键容易卡住。
为了解决这个问题,我们可以尝试更换按键弹簧。
首先,需要购买适合键盘品牌和型号的按键弹簧。
然后,使用工具打开键盘,将原始的按键弹簧取出,并将新的按键弹簧安装到对应位置上。
这样做能够有效地恢复按键的弹性,提高键盘的使用寿命。
五、寻求专业维修如果以上方法都无法解决键盘按键卡住的问题,那么最后的选择是寻求专业的维修帮助。
可以将问题的键盘送往专业的维修中心进行检修。
维修人员会仔细检查键盘的各个组件,找到问题所在并进行修复。
虽然这种方法需要花费一些时间和金钱,但是可以确保问题得到彻底解决,恢复键盘的正常使用。
键盘按键失灵怎么办

键盘按键失灵怎么办在现代化的社会中,电脑已经成为我们生活中不可或缺的一部分。
我们使用电脑来工作、学习和娱乐,在日常生活中经常需要使用键盘。
然而,有时候我们可能会遇到键盘按键失灵的情况,这给我们的工作和生活带来了很多不便。
那么,当键盘按键失灵时,我们应该如何解决这个问题呢?本文将为大家提供一些解决键盘按键失灵问题的方法。
首先,如果你发现键盘上的某个按键失灵,不要慌张,首先可以尝试重新插拔键盘。
有时候,键盘接口与电脑之间可能出现松动,导致按键失灵的问题。
你可以将键盘的插头从电脑上拔下来,等一会儿再重新插上,看看问题是否解决了。
如果问题依然存在,那么可以考虑尝试以下方法。
第二,你可以尝试使用其他的键盘来替换原来的键盘。
如果你有其他的键盘可以使用,可以将其连接到电脑上,看看问题是否依然存在。
如果新键盘可以正常工作,那么很可能是原来的键盘出现了故障。
你可以考虑更换键盘或者修理键盘。
第三,检查键盘上是否有灰尘或其他污垢。
长时间使用键盘,灰尘和污垢可能会进入键盘内部,导致按键失灵。
你可以使用吹风机或者喷气罐清洁键盘。
将键盘倒置,用吹风机在较低的风力下吹气,清除键盘上的灰尘。
另外,你也可以用棉签蘸取清洁液或者酒精擦拭键盘上的按键,但要注意不要让液体渗入键盘内部。
第四,你还可以尝试重新安装键盘驱动程序。
键盘驱动程序是与键盘相关的软件,如果驱动程序出现故障或者损坏,键盘可能会出现按键失灵的问题。
你可以在电脑的设备管理器中找到键盘驱动程序,右击键盘驱动程序,选择卸载,然后重启电脑。
电脑会自动重新安装键盘驱动程序,看看问题是否解决。
最后,如果以上方法都没有解决问题,那么可能是键盘硬件本身出现了故障。
在这种情况下,你可以考虑将键盘送修或更换。
如果你的键盘还在保修期内,你可以联系电脑品牌的客户服务部门,寻求他们的帮助。
如果键盘不在保修期内,你可以找专业的电脑维修人员进行修理或者购买一个新的键盘。
总之,当键盘按键失灵时,我们不必过于慌张。
c语言按键消抖常用方法

在C语言中,按键消抖是指处理物理按键在按下或释放时可能产生的抖动或不稳定信号的问题。
常用的方法包括软件延时消抖和状态机消抖。
1. 软件延时消抖:- 当检测到按键按下或释放时,可以通过在代码中添加一个短暂的延时来过滤掉按键可能产生的抖动信号。
例如,在按键检测到变化后,延时几毫秒以确保按键信号稳定后再进行状态读取。
```cvoid delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 300; j++);}// 在按键检测中使用延时if (button_pressed && !last_button_state) {delay(10); // 等待10毫秒if (button_pressed) {// 执行按键按下后的操作last_button_state = button_pressed;}}```这种方法简单易行,但需要根据具体硬件和按键特性调整延时时间,且可能会造成按键响应速度变慢。
2. 状态机消抖:- 利用状态机来跟踪按键状态变化,并在一定持续时间内保持一致的状态才认定为有效按键按下或释放。
这可以通过一个状态变量和定时器结合实现。
```cenum ButtonState {IDLE, PRESSED, RELEASED};enum ButtonState current_state = IDLE;unsigned int debounce_timer = 0;// 在按键检测中使用状态机void button_check() {switch (current_state) {case IDLE:if (button_pressed) {current_state = PRESSED;debounce_timer = 10; // 设定10毫秒的延时}break;case PRESSED:if (!button_pressed) {current_state = RELEASED;debounce_timer = 10; // 设定10毫秒的延时}break;case RELEASED:if (button_pressed) {current_state = PRESSED;debounce_timer = 10; // 设定10毫秒的延时}break;}if (debounce_timer > 0) {debounce_timer--;} else {if (current_state == PRESSED) {// 执行按键按下后的操作} else if (current_state == RELEASED) {// 执行按键释放后的操作}current_state = IDLE; // 处理完毕后返回IDLE状态 }}```这种方法相对于延时消抖更加灵活,可以根据具体需求设置不同的延时时间,并且不会影响整体的按键响应速度。
怎样修复电脑的键盘按键卡住的问题

怎样修复电脑的键盘按键卡住的问题在日常使用电脑的过程中,有时会遇到键盘按键卡住的问题。
这不仅会影响我们的工作效率,还会给我们带来诸多不便。
那么,怎样修复电脑的键盘按键卡住的问题呢?本文将为您介绍几种常见的解决方法。
1. 清洁键盘键盘上的灰尘和污垢是导致按键卡住的主要原因之一。
我们可以使用合适的清洁工具,如纸巾、小刷子等进行清洁。
先将电脑关机,断开电源和外设连接,然后将键盘颠倒,轻轻敲击背部,以使掉落的灰尘和杂质从键盘中脱落。
接着,用纸巾蘸取少量清洁剂或酒精,擦拭每个按键的表面和间隙,确保彻底清除污垢。
清洁后,将键盘晾干或用吹风机低风速吹干,确保键盘完全干燥后再进行使用。
2. 检查键盘连接当键盘连接不良时,也可能导致按键卡住的情况发生。
请检查键盘与电脑之间的连接线是否完好无损,并确保插头牢固连接。
如果使用的是无线键盘,需要检查电池电量是否充足以及无线接收器与电脑之间的连接是否正常。
如果连接有问题,重新插拔连接线或更换新电池后,再次测试键盘是否恢复正常使用。
3. 调整按键灵敏度有时,键盘的按键灵敏度设置不当也可能导致按键卡住。
进入电脑的设置界面,找到键盘设置选项,调整按键灵敏度为适合您的程度。
不同的操作系统和品牌可能设置方式有所不同,您可以根据自己使用的电脑型号查找相应的设置方法。
4. 更新键盘驱动程序键盘驱动程序也可能是键盘按键卡住问题的原因之一。
通过更新键盘驱动程序,可以解决驱动程序与系统不兼容或损坏的情况。
打开设备管理器,找到键盘驱动程序并右键单击,选择“更新驱动程序”。
系统会自动搜索最新的驱动程序并安装。
安装完成后,重新启动电脑并测试键盘是否能够正常使用。
5. 检查软件冲突某些应用程序或软件可能会与键盘的正常工作发生冲突,导致按键卡住。
在电脑任务管理器中,关闭可能引起冲突的程序或进程,并重新测试键盘功能。
如果键盘恢复正常,可以进一步调查冲突的原因,并选择卸载或更换相应的软件。
总结修复电脑的键盘按键卡住的问题有多种方法,包括清洁键盘、检查键盘连接、调整按键灵敏度、更新键盘驱动程序和检查软件冲突。
按键处理

按键处理.txt 2、高黑度铅笔。
找一根4B甚至6B的铅笔,总之越黑越好,在失灵按键的导电橡胶上蹭几下,然后,打完收工。
铅笔芯的主要成分不是铅,而是石墨,而石墨是导电的。
这个方法比1要好,操作更简单,所需材料更少。
但是同样有缺点,铅笔末时间长了也还是会脱落,而且如果掉到电路板上,有可能会引起别的麻烦。
3、导电胶水。
相对于上两个方法,这个方法要专业得多。
导电胶水是具有一定导电性能的胶黏剂,专门用于电子电路维修的,在不方便使用焊锡的地方使用它最方便了。
导电胶水主要成分为树脂胶粘剂和导电粒子,导电粒子就是金、银、铜、铁、铝、锌、锡、石墨等一些导电材料的粉末颗粒。
将导电胶水涂抹在导电橡胶上,等其自然干燥后,导电颗粒就被粘在导电橡胶上了,形成一层导电膜,效果非常好。
导电胶水一般价格并不昂贵,老石猴买的10g装的,3块钱。
对于修理电子词典来说,用量也非常少,即便把所有的按键都涂一遍,也不过1滴而已。
如果你能找到别人的借用一点那是最好,东西虽然不贵,但是用不完浪费了还是挺可惜的。
导电胶水在电子城里会有卖的,尤其是买电子电器配件的地方,对于修理手机、电脑的商户来说,这是基本工具。
导电胶的缺点是,随着按键使用中的磨损,导电膜会脱落,掉在电路上会造成按键短路,现象就是某个按键电路一直被接通,而其他的按键失去反应。
这时只要打开电子词典,将脱落的导电膜擦去即可。
导电胶水非常适合修理按键失灵,效果也很好,缺点就是,需要不定期清理脱落的导电膜,过一段时间还要对导电膜已经完全脱落的按键重新涂胶。
这三个方法,应该能够解决常见的按键失灵问题,让你的电子词典起死回生,该方法同样也适用于部分手机、电脑按键的维修。
穿花蛱蝶深深见,点水蜻蜓款款飞。
细雨鱼儿出,微风燕子斜。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
新型的按键扫描程序核心算法:unsigned char Trg;unsigned char Release;unsigned char Cont;void KeyRead( void ){unsigned char ReadData = PINB^0xff; // 1 读键值Trg = ReadData & (ReadData ^ Cont); // 2 得到按下触发值Release=(ReadData^Trg^Cont); //3 得到释放触发值Cont = ReadData; //4 得到所有未释放的键值}下面是程序解释:Trg(triger)代表的是触发,Cont(continue)代表的是连续按下。
1:读PORTB的端口数据,取反,然后送到ReadData 临时变量里面保存起来。
2:算法1,用来计算触发变量的。
一个位与操作,一个异或操作,我想学过C语言都应该懂吧?Trg为全局变量,其它程序可以直接引用。
3:算法2,用来计算连续变量。
我们最常用的按键接法如下:AVR是有部上拉功能的,但是为了说明问题,我是特意用外部上拉电阻。
那么,按键没有按下的时候,读端口数据为1,如果按键按下,那么端口读到0。
下面就看看具体几种情况之下,这算法是怎么一回事。
(1)没有按键的时候端口为0xff,ReadData读端口并且取反,很显然,就是 0x00 了。
Trg = ReadData & (ReadData ^ Cont); (初始状态下,Cont也是为0的)很简单的数学计算,因为ReadData为0,则它和任何数“相与”,结果也是为0的。
Cont = ReadData; 保存Cont 其实就是等于ReadData,为0;结果就是:ReadData = 0;Trg = 0;Cont = 0;(2)第一次PB0按下的情况端口数据为0xfe,ReadData读端口并且取反,很显然,就是 0x01 了。
Trg = ReadData & (ReadData ^ Cont); 因为这是第一次按下,所以Cont是上次的值,应为为0。
那么这个式子的值也不难算,也就是 Trg = 0x01 & (0x01^0x00) = 0x01Cont = ReadData = 0x01;结果就是:ReadData = 0x01;Trg = 0x01;Trg只会在这个时候对应位的值为1,其它时候都为0Cont = 0x01;(3) PB0按着不松(长按键)的情况端口数据为0xfe,ReadData读端口并且取反是 0x01 了。
Trg = ReadData & (ReadData ^ Cont); 因为这是连续按下,所以Cont是上次的值,应为为0x01。
那么这个式子就变成了 Trg = 0x01 & (0x01^0x01) = 0x00Cont = ReadData = 0x01;结果就是:ReadData = 0x01;Trg = 0x00;Cont = 0x01;因为现在按键是长按着,所以MCU会每个一定时间(20ms左右)不断的执行这个函数,那么下次执行的时候情况会是怎么样的呢?ReadData = 0x01;这个不会变,因为按键没有松开Trg = ReadData & (ReadData ^ Cont) = 0x01 & (0x01 ^ 0x01) = 0 ,只要按键没有松开,这个Trg值永远为 0 !!!Cont = 0x01;只要按键没有松开,这个值永远是0x01!!(4)按键松开的情况端口数据为0xff,ReadData读端口并且取反是 0x00 了。
Trg = ReadData & (ReadData ^ Cont) = 0x00 & (0x00^0x01) = 0x00Cont = ReadData = 0x00;结果就是:ReadData = 0x00;Trg = 0x00;Cont = 0x00;很显然,这个回到了初始状态,也就是没有按键按下的状态。
总结一下,不知道想懂了没有?其实很简单,答案如下:Trg 表示的就是触发的意思,也就是跳变,只要有按键按下(电平从1到0的跳变),那么Trg 在对应按键的位上面会置一,我们用了PB0则Trg的值为0x01,类似,如果我们PB7按下的话,Trg 的值就应该为 0x80 ,这个很好理解,还有,最关键的地方,Trg 的值每次按下只会出现一次,然后立刻被清除,完全不需要人工去干预。
所以按键功能处理程序不会重复执行,省下了一大堆的条件判断,这个可是精粹哦!!Cont代表的是长按键,如果PB0按着不放,那么Cont的值就为 0x01,相对应,PB7按着不放,那么Cont的值应该为0x80,同样很好理解。
因为有了这个支持,那么按键处理就变得很爽了,下面看应用:应用一:一次触发的按键处理假设PB0为蜂鸣器按键,按一下,蜂鸣器beep的响一声。
这个很简单,但是大家以前是怎么做的呢?对比一下看谁的方便?#define KEY_BEEP 0x01void KeyProc(void){if (Trg & KEY_BEEP) // 如果按下的是KEY_BEEP{Beep(); // 执行蜂鸣器处理函数}}怎么样?够和谐不?记得前面解释说Trg的精粹是什么?精粹就是只会出现一次。
所以你按下按键的话,Trg & KEY_BEEP 为“真”的情况只会出现一次,所以处理起来非常的方便,蜂鸣器也不会没事乱叫,hoho~~~或者你会认为这个处理简单,没有问题,我们继续。
应用2:长按键的处理项目中经常会遇到一些要求,例如:一个按键如果短按一下执行功能A,如果长按2秒不放的话会执行功能B,又或者是要求3秒按着不放,计数连加什么什么的功能.这里具个简单例子,为了只是说明原理,PB0是模式按键,短按则切换模式,PB1就是加,如果长按的话则连加(玩过电子表吧?没错,就是那个!)#define KEY_MODE 0x01 // 模式按键#define KEY_PLUS 0x02 // 加void KeyProc(void){if (Trg & KEY_MODE) // 如果按下的是KEY_MODE,而且你常按这按键也没有用,{ //它是不会执行第二次的哦,必须先松开再按下Mode++; // 模式寄存器加1,当然,这里只是演示,你可以执行你想// 执行的任何代码}if (Cont & KEY_PLUS) // 如果“加”按键被按着不放{t_plus++; // 计时if (cnt_plus > 100) // 20ms*100 = 2S 如果时间到{Func(); // 你需要的执行的程序}}}应用3:点触型按键和开关型按键的混合使用点触形按键估计用的最多,特别是单片机。
开关型其实也很常见,例如家里的电灯,那些按下就不松开,除非关。
这是两种按键形式的处理原理也没啥特别,但是你有没有想过,如果一个系统里面这两种按键是怎么处理的?我想起了我以前的处理,分开两个非常类似的处理程序,现在看起来真的是笨的不行了,但是也没有办法啊,结构决定了程序。
不过现在好了,用上面介绍的办法,很轻松就可以搞定。
原理么?可能你也会想到,对于点触开关,按照上面的办法处理一次按下和长按,对于开关型,我们只需要处理Cont就OK了,为什么?很简单嘛,把它当成是一个长按键,这样就找到了共同点,屏蔽了所有的细节。
程序就不给了,完全就是应用2的容,在这里提为了就是说明原理~~好了,这个好用的按键处理算是说完了。
可能会有朋友会问,为什么不说延时消抖问题?哈哈,被看穿了。
果然不能偷懒。
下面谈谈这个问题,顺便也就非常简单的谈谈我自己用时间片轮办法,以及是如何消抖的。
延时消抖的办法是非常传统,也就是第一次判断有按键,延时一定的时间(一般习惯是20ms)再读端口,如果两次读到的数据一样,说明了是真正的按键,而不是抖动,则进入按键处理程序。
当然,不要跟我说你delay(20)那样去死循环去,真是那样的话,我衷心的建议你先放下手上所有的东西,好好的去了解一下操作系统的分时工作原理,大概知道思想就可以,不需要详细看原理,否则你永远逃不出“菜鸟”这个圈子。
当然我也是菜鸟。
我的意思是,真正的单片机入门,是从学会处理多任务开始的,这个也是学校程序跟公司程序的最大差别。
当然,本文不是专门说这个的,所以也不献丑了。
我的主程序架构是这样的:volatile unsigned char Intrcnt;void InterruptHandle() // 中断服务程序{Intrcnt++; // 1ms 中断1次,可变}void main(void){SysInit();while(1) // 每20ms 执行一次大循环{KeyRead(); // 将每个子程序都扫描一遍KeyProc();Func1();Funt2();……while(1){if (Intrcnt>20) // 一直在等,直到20ms时间到{Intrcnt="0";break; // 返回主循环}}}}貌似扯远了,回到我们刚才的问题,也就是怎么做按键消抖处理。
我们将读按键的程序放在了主循环,也就是说,每20ms我们会执行一次KeyRead()函数来得到新的Trg 和 Cont 值。
好了,下面是我的消抖部分:很简单基本架构如上,我自己比较喜欢的,一直在用。
当然,和这个配合,每个子程序必须执行时间不长,更加不能死循环,一般采用有限状态机的办法来实现,具体参考其它资料咯。
懂得基本原理之后,至于怎么用就大家慢慢思考了,我想也难不到聪明的工程师们。
例如还有一些处理,怎么判断按键释放?很简单,Trg 和Cont都为0 则肯定已经释放了。
把程序稍改一下,可以兼容所有的电平变化:Unsigned char PreKey;Unsigned char NewKey;Volaitile unsigned char KeyCode;Void ReadKey(void){PreKey = NewKey;NewKey = Pinx;KeyCode = PreKey^NewKey^KeyCode; //注意:等式左边的KeyCode是本次读按键的结果,等式右边的KeyCode是上次读按键的结果}KeyCode 是全局变量,和Cont一样。
题目:多功能按键设计。
利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按。
============================================================================用户基本操作定义:1。