5个IO端口实现了对25个按钮的扫描,他做到了!这是必须的!

排版:小宇从:从我们从事Chip House的项目(工程)时,我们经常使用更多的按钮,并且IO资源很紧张,因此我们尝试了各种方法将IO端口保存在其他模块中。

我挤出了一个或两个IO端口,但发现仍然不够。

无法添加IC来扫描按键。

尽管IC的价格不高,但对于批量生产且产品利润较低的制造商来说,这是非常昂贵的费用!然后,我们可以考虑一种更好的密钥扫描方法:使用最少的IO端口,扫描最多的密钥吗?我可以?例如:给定5个IO端口,可以扫描多少个键?有人说它是2 * 3 = 6,如图1所示:图一,大多数技术参考书都这样做,我们经常这样做:使用3个IO端口进行行扫描,并使用2个IO端口进行列检测(对于为了便于描述,我们同意:将某个IO端口输出设置为“ 0”,称其为“扫描某个IO端口”)。

使用行行输出扫描键代码,使用列行检查是否有按键查询方法来扫描键。

扫描键过程:在行线上依次输出011、101、110扫描键值。

每次在行行上输出扫描键值时,都会对列行进行一次检查。

当在列线中检测到键时,可以通过组合输出的扫描键值来判断相应的键。

但是,实际上5个IO只能扫描6个键吗?有人说您可以扫描九个,这非常聪明!使用行IO和接地来派生3个键(请注意上拉电阻),如图2所示:图2扫描键过程:首先检测3个行IO端口,扫描K1,K2和K39键;,K3&#39 ;,然后如图2所示进行上述2 * 3按键扫描过程。

5个IO端口可以扫描9个按键,这足够强大,比6个按键要多1/2个!用你的大脑,你可以扫描更多吗?一些?一个很好!好吧,再想一想,我被逼出去了!图片三:图片三不多也不少,恰好是10个键!这种扫描密钥的方式相对罕见!漂亮的!扫描按键过程:将IO1输出设置为“ 0”,检查IO2…IO5,如果判断为有对应的按键,则可以知道有按键;如果没有键,则继续扫描键:将IO2输出设置为“ 0”,检查IO3,IO4,IO5,判断是否有键按下,依此类推。

此处注意:扫描特定的IO端口(输出为“ 0”)时,请勿检测已扫描的IO端口。

例如:此时,将IO2的输出设置为“ 0”,并依次检查IO3,IO4,IO5,但不要检查IO1,否则将发生错误(请考虑原因)。

你觉得怎么样?不错吧!让我们再次看一下图3,它是如此的充实!看,看...你又看到了什么?快速地!参见图片4:图片4真的很强!您可以看到20个键!另一个对称的三角形。

但是,这样的安排可以正确扫描20个键吗?答案是肯定的:不!上三角和下三角相互对称,并且不能区分因对称而扫出的琴键。

您是否注意到图3的分析中提到的要点? (“在扫描某个IO端口时,请勿检查已扫描的IO端口,否则将发生错误”。

)让我们来分析图4:当IO1输出“ 0”时,按K11或K11。

39;键可以被检测到IO2,但是IO2检测不能区分K11和K11。

钥匙!同样,无论扫描哪个IO端口,都有两个无法区分的对称密钥。

我们假设,如果可以区分对称密钥,则可以正常判断密钥。

我们在思考:是否有单向通信设备?有!见图五!图5非常聪明的主意!使用二极管的单向电导率来区分两个对称键。

扫描按键提示:逐个IO端口扫描按键,其他四个IO端口可以检测到它们所在的四个按钮。

这样,在图3的分析中就不会提及任何关注点。

足够酷!等一下,不要对现状感到满意,让我们看一下图2。

这是否有启发性?是的,让我们分析“从5个接地的IO端口派生的5个密钥”。

参见图片6:图片6 25个按键! 5个IO端口可清除25个按键!不要激动,让我们分析一下它的可行性,只有在分析之后才能使用它。

假定按键扫描过程:首先扫描地面上的5个按键,然后如图5所示扫描按键。

首先将5个按键扫描到地面上,判断没有按键,然后一个接一个地扫描按键在IO端口上。

但是,在扫描某个IO端口的键时,如果按下接地键,则此时可能会误判该键,因为接地键的响应优先级高于其他键。

例如:扫描IO1,仅在以下情况下IO1输出“ 0”