项目场景:
单片机IO口按键扫描
16键的按键扫描,采用横纵扫描方式,初始化横向电平0000,纵向电平1111,
问题描述
理论上:
横向检测io口时,若检测到横向电平0000中有一个变为高电平1,说明有按键按下;
纵向检测io口时,若检测到纵向电平1111中有一个变为低电平0,也说明有按键按下;
然而,在实际的使用过程中(STC15F2K60),以两个io口做演示,
当初始化电平0后,按下按键不能检测出高电平1,如下图:
而初始化电平1后,按下按键却能检测出低电平0。如下图:
原因分析:
单片机io开漏输出只能输出低电平,高电平的时候实际上是个高阻态,不具备输出能力,详细的可以搜索关键词:推挽输出、开漏输出;
解决方案:
将待用到的io口初始化为1或者加上拉电阻