STC12C5A60S2单片机为什么设置为准双向模式可以正常读取按键状态,设置成输入高阻模式却不正常

设置为准双向模式正常,设置成输入高阻模式,却不能正常读取按键的状态。而买的一本书中设置成输入高阻模式却正常。唯一区别是。
STC说明文档中:sfr P1M0 = 0x92; // 0000,0000
sfr P1M1 = 0x91; // 这样按照STC官网说明文档定义设置为输入高阻模式无法正常检测按键的状态

买的书中:sfr P1M0 = 0x91;
sfr P1M1 = 0x92; // 这样定义的地址。将按键所用引脚设置为输入高阻模式却正常。

高阻模式io口被悬空,没有上拉也没有下拉,完全由外部电平驱动,准双向模式中有上拉和下拉,当写0就是开启了下拉,写1就是开启了上拉,所以检测按键的时候,高阻模式时,不管写入0还是1,io口都没有电平输出,矩阵扫描时就扫描不到按键,相反,准双向时,写1时高电平,写0时低电平,当有按键按下时,对应的io口的高电平被下拉,所以就能检测到高电平变成了低电平,所以能扫描到按键。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-07-26
因为设置双向模式的话,单片机内部配置了弱上拉(可能是100K的上拉电阻,也有可能是其他阻值的上拉电阻),如果设置输入高阻状态,必须在外部,按键上面配置上拉电阻,以便区分高低电平。
第2个回答  2016-09-21
1、理解一下什么叫按键扫描,首先确定你的按键是上啦输入的还是下拉输入,确定一下。上啦输入的话,VCC接电阻接管脚,然后管脚拉线接按键到地。按键一次就触发一次下降沿。反过来下拉输入的话就是上升沿,但是你初始状态是没有电流对地的。
2、高阻状态的意思就是防止对外输出,相当于一个较大电阻串接在管脚,那么你即便是按键了,这个高阻值可能会大于你的上啦或者下拉电阻,这样电流不会进入管脚过多,导致管脚电压低于高电平基准的1.8V-2.2V。所以就检测不到,
3、以上是基于你的按键不是AD方式的,如果你的按键是基于AD扫描方式的,高阻状态会直接影响到你的AD精度,
第3个回答  2016-06-16
高阻输入为什么不正常 准双向正常

主要原因是
引脚处于悬浮状态
(高阻输入 引脚不能出现悬浮 要么高电平 要么低电平)

解决方法是
引脚 上拉或下拉
上拉 引脚接个电阻 这个电阻再接到 vcc上 开关一端接GND 一端接引脚
下拉 引脚接个电阻 这个电阻再接到GND上 开关一端接VCC 一端接引脚
(电阻取值1k 10k都行)

准双向弱上拉为什么可以呢
输入状态时 接口本身是弱上拉 所以可以不用上拉 或下拉。
第4个回答  2016-08-03
独立按键应该不会出现这种情况,你用的是矩阵键盘吧。
矩阵键盘是要靠IO逐次选通一行(列),然后根据返回的状态判断哪一列(行)按键按下了。就可以像坐标一样确定具体的按键了。
所以扫描线是输出,反馈线是输入。另外高阻输入在没有按键按下时是浮空状态很容易受干扰,外部加上(下)拉电阻状态才能稳定。