1 / 5
文档名称:

堪称一绝的“IO口扫键”法.docx

格式:docx   页数:5页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

堪称一绝的“IO口扫键”法.docx

上传人:luyinyzha 2016/3/20 文件大小:0 KB

下载得到文件列表

堪称一绝的“IO口扫键”法.docx

相关文档

文档介绍

文档介绍:堪称一绝的“ IO 口扫键”法 ead-854599-1- 在做项目(工程)的时候,我们经常要用到比较多的按键,而且 IO资源紧张,于是我们就想方设法地在别的模块中节省 IO口,好不容易挤出一两个 IO口,却发现仍然不够用,实在没办法了就添加一个 IC来扫键。一个 IC虽然价格不高,但对于大批量生产而且产品利润低的厂家来说,这是一笔不菲的开支! 那,我们能不能想到比较好的扫键方法:用最少的 IO口,扫最多的键?可以吗? 举个例:给出 5个 IO口,能扫多少键?有人说是 2*3 =6个,如图一: 图一对, 大部分技术参考书都这么做,我们也经常这样做:用3个 IO口作行扫描,2个 IO作列检测(为方便描述,我们约定:设置某一 IO口输出为“0 ”――称其为“扫某 IO口”)。用行线输出扫键码,列线检测是否有按键的查询方法进行扫键。扫键流程:在行线依次输出 011 , 101 , 110 扫键值,行线每输出一个扫键值,列线检测一次。当列线检测到有按键时,结合输出的扫键值可以判断相应的按键。但是,5个 IO真的只能扫 6个键吗?有人说可以扫 9个,很聪明!利用行 IO与地衍生 3个键(要注意上拉电阻),如图二: 图二扫键流程:先检测 3 个行 IO 口,对 K1’, K2’, K3’进行扫键,之后如上述 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 ,否则会出错(为什么,请思考)。感觉怎么样?不错吧!让我们再看看图三,好有成就感!看着,看着……又看到了什么?快!见图四: 图四真强!被您看出 20 个键!多了一个对称的三角形。可是,像这样的排列能正确扫 20 个键吗?回答是肯定的:不能!上下三角形相互对称,其对称扫出的键无法区别。有没有注意到分析图三时提到的注意点? ( à“当扫某 IO口时,不要去检测已经扫过的 IO口,否则会出错”) 我们分析一下图四:当 IO1 输出“0”时,按下 K11 或 K11 ’键都能被 IO2 检测到,但 IO2 检测却无法区别 K11 和 K11 ’键!同理,不管扫哪个 IO口,都有两个对称的键不能区分。我们假想,如果能把对称键区分开来,我们就能正常地去判断按键。我们在思考:有没有单向导通性器件? 有!见图五! 图五很巧妙的思路!利用二极管的单向导通性,区别两个对