最常用的一个端口上拉接一个按键接法和扫描方式非常简单,只需检查是否有低电平即可,此处略.
********************************************************************
让我们来看看4X4的按键接法和扫描方式:
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一下,应该会有很多相关资料出来的.
文章评论(0条评论)
登录后参与讨论