找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2668|回复: 5
打印 上一主题 下一主题
收起左侧

单片机检测按键状态程序的请教

[复制链接]
跳转到指定楼层
楼主
大家好,还是我,之前的问题已经解决了,现在我来问问P0&0x0f  这种代码,这个我明白是检测电平变化,但是我自己不懂得该怎么写,就是面对一个不熟悉的单片机时候,要怎么写这种类型的控制,我用KEY=P3_5这种写法然后if(key==0)来检测,一个个控制LED,发现很繁琐,所以想要学会这种比较简单的检测方式,请大家详细说明一下这个的用法的全部好吗?(ps:题主会进制)




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:275826 发表于 2019-9-8 17:25 | 只看该作者
不同类型按键要采用不同的检测方法,你表达不清楚
回复

使用道具 举报

板凳
ID:601868 发表于 2019-9-8 20:24 | 只看该作者
这个其实还是比较简单的。主要还是你没有习惯这种方法。
按照lz的意思,应该是这样的:
key = P0;
key = key & 0x0f;
然后是
if(key != 0x0f)
{
//执行语句
}

意思大致是:key先存储P0口的高低电平状态,然后和0x0f做“与”运算(不一定非要是0x0f)。然后得到“与”运算之后的结果,“与”运算的结果如果和0x0f不一致,则表明P0口的数据发生了变化,即按键按下之后,改变了P0的电平状态。如果数据一致,则表示P0电平未发生变化,按键没有被按下。

举个栗子:
若按键在P0.3,P0初始为0x0f,(0000 0111 b),按下按键之后,会变成0x07(0000 0111b),
若按键按下0x07(0000 0111) & 0x0f(0000 1111) = 0x07(0000 0111)不等于0x0f
此时,key的值会赋值给P2。
回复

使用道具 举报

地板
ID:462827 发表于 2019-9-8 22:17 | 只看该作者
学到矩阵按键的扫描时,最好能结合仿真软件比如proteus来看一下引脚的电平实际变化,会更容易理解的。
回复

使用道具 举报

5#
ID:123289 发表于 2019-9-9 01:12 | 只看该作者
用脑子想一下,你要区分三个不同的按键,即使用没有时序,它也有8种按键组合方式(不按、单按、双按、三按),你想如何简单呢?
简单与复杂与你的设计要求相关。
回复

使用道具 举报

6#
ID:65956 发表于 2019-9-9 08:27 | 只看该作者
P0&0x0f 这个只是表达屏蔽高4位,只取低4位作状态判断,也就是按键是接在低4位,用每次对应低4位状态值变化而判断即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表