随想杂谈--一个GPIO控制两个按键
最近在一个工程中,受限于单片机管脚不够的原因,不得不使用一个GPIO口控制两个按键,
在这里顺便记录下使用的过程。
说起用一个GPIO口控制两个按键的方法,一般来说有三种:
第一种方法是使用GPIO对应的AD通道,通过电阻分压的方式采集每个按键按下的电平,
理论上只要AD够精准,可以控制无限个按键,使用这种方法的前提是对应的GPIO口需要ADC;
第二种方法是在管脚上加入一个电容,通过检测电容充放电来判断对应的是哪个按键被按下;
第三种方法是通过分时使能GPIO口上下拉电阻,判断对应的是哪个按键被按下,这种方法也是最简单的一种;
本次杂谈中我使用的是第三种方法,对应的电路图如下:
图中串在两个按键上下的电阻作用为防止两个按键同时按下时电源正负极短路,轻则单片机复位,重则烧坏芯片。
对于上下拉电阻的选择需要注意的是,单片机必须内部带有一路上拉或者下拉,不能两者都没有。如果单片机内
部带有上拉或者下拉的话,则对应部分的上下拉电阻可以取消,上拉电阻的取值必须比下拉电阻的取值小,确保
上下拉电阻同时使能时上拉电阻能正常拉高GPIO电平。
下面为代码思路,以我使用的一款应广PMS150C为例(GPIO带内部上拉):
#define PULL_UP_RESISTOIR PAPH.4
#define key_pre PA.4 </