您的位置 首页 电子

2个I/O 口检测6个按键

今天看到了用2个IO口来检测6个按键的方法,确实很霸道,特传上来和大家一起分享。原理图如下:分析:首先:IO1,IO2输出高电平S1按下

今日看到了用2个I/O口来检测6个按键的办法,的确很蛮横,特传上来和我们一同共享。
原理图如下:


剖析:
首要:IO1,IO2输出高电平
S1按下,IO2为低电平
S2按下,IO1为低电平
S3按下,IO1,IO2为0.7V(1N4148导通电压),仍是低电平。
现在开端判别其他几个按键了:
1、IO1输出低电平,读IO2电平
假如IO2为低电平,此刻应该是S4或许S6按下(S6按下时,IO2为0.7V,仍旧是低电平)。
此刻IO1输出高电平,IO2输出低电平,读IO1电平
当S4按下时,IO1为低电平。剩下的就只能是S6了。
2、IO1输出高电平,IO2输出低电平
读IO1,S5按下时,IO1为低电平。若IO1仍旧为高电平,则是S6按下了。

按键扫描程序:
unsignedcharscan_key(void)
{
unsignedcharkeyval=0;//无键,有键1~6

KEY_IO1=1;//开释总线
KEY_IO2=1;//开释总线

if(!KEY_IO1&&!KEY_IO2)
keyval=3;//S3
elseif(!KEY_IO1)
keyval=2;//S2
elseif(!KEY_IO2)
keyval=1;//S1
else
{
//开端扫描,也要考虑小毛贼的问题~~~
KEY_IO1=0;//扫描
if(!KEY_IO2)
{
//这时不能当即断定S4/S6
KEY_IO1=1;//开释总线
KEY_IO2=0;//反向扫描
if(!KEY_IO1)
keyval=4;//S4~~~
else
keyval=6;//S6
}
else
{
//只能是S5了
KEY_IO1=1;//开释总线
KEY_IO2=0;//反向扫描

if(!KEY_IO1)
keyval=5;//S5
//elsekeyval=6;//S6//上面已判出了S6,这句是废话
}
KEY_IO1=1;//开释总线//现已开释~~~
KEY_IO2=1;//开释总线
}
returnkeyval;//回来键值0-无键,1~6-S1~S6键
}

程序流程图:

因为演示图片是动态的,此处无法进行演示。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/258868.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部