原创 参考资料之按键编(下)--io口编

2008-7-29 22:33 2641 7 7 分类: MCU/ 嵌入式

最常用的一个端口上拉接一个按键接法和扫描方式非常简单,只需检查是否有低电平即可,此处略.


 


********************************************************************


让我们来看看4X4的按键接法和扫描方式:6eed0f08-4a41-4938-94e7-9b9840f1f0e1.GIF


1)PA0~PA3置为输出,PA4~PA7置为输入并打开上拉;


2)先使PA0输出0,PA1~PA3输出1,检测PA4~PA7的输入电平,可检测S0~S3四个按键,如果无键接下,则PA4~PA7全为高电平;当S0按下时PA4则输入0,S1按下时PA5输入0.......


3)按步骤2方法,依次使PA1,PA2,PA3输入低电平,可检测其他按键有无按键按下,方法同步骤2;


 


*********************************************************************


把思维再改改,请看下图:


点击开大图


 


扫描方式


1)置IO1为输出,其他为输入(开上拉)来检测K11~K14有无按下;如果IO2~IO5全为输入高,则K11~K14无键按下;当K11按下时,IO2为输入低电平;当K12按下是IO3为输入低电平.........


2)同理置IO2为输出,IO3~IO5为输入(开上拉),可分别检测其他按键有无按下;


注意扫描某一IO口时(输入0)时,不要去检测已经扫过的IO口;


 


*********************************************************************


对上图再进一步优化:看下图


点击开大图


 


扫描方法:


1)置IO1为输出0,其他为输入(开上拉)来检测K11~K14有无按下;如果IO2~IO5全为输入高,则K11~K14无键按下;当K11按下时,D2导通,IO2为输入低电平;当K12按下时,D3导通,IO3为输入低电平.........置IO1为输出0其他输入上拉可检测第一横排按键;


2)同理,置IO2为输出0其他输入上拉可检测第二横排按键,此时可以检测全部IO口的电平;


*******************************************************************


再改改看:


点击开大图


 


5个IO不输出低电平扫描信号,先扫对地的5个键(最下排的K61~K65),若某键按下则对应的二极管道通,IO口读入低电平,判断出是哪个键被按下。接着对逐一对IO口进行扫键。但当对某一IO口扫键时,如果有对地的键按下,这时有可能会误判按键,因为对地键比其他键有更高的响应优先级。


例如:
         当IO1输出“0”,恰好此时K62按下,IO2检测到有按键,那就不能判断是K11还是K62。我们可以在程序上避免这种按键误判:若IO2检测到有按键,那下一步就去判断是否有对地键按下,如果没有,那就可以正确地判断是K11了。


********************************************************************


 


PS:一按键接法示意图,如下,硬件上相对于上图粗糙得多,只是软件上处理简单的多;


点击开大图


***********************************************************************


        由 "西南科技大学 创新实践班"总结的"5io口驱动25按键",内容十分详尽,忘记原始资料的链接地址了(由于赋件太大,上传不了),本贴关于"5io口驱动25按键"全部转于"西南科技大学 创新实践班"的同学的资料;版权当然归其所有!有兴趣的可以网上baidu一下,应该会有很多相关资料出来的.

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /3 下一条