16键的按键扫描,采用横纵扫描,初始化横向电平0000,纵向电平1111,理论上,
横向检测io口时,若检测到横向电平0000中有一个变为高电平1,说明有按键按下;
纵向检测io口时,若检测到纵向电平1111中有一个变为低电平0,也说明有按键按下。
然而,在实际的使用过程中(STC15F2K60),初始化电平0000后,按下按键并不能检测出高电平1,而初始化电平1111后,按下按键却能检测出低电平0;
如下图:




原因:单片机io开漏输出只能输出低电平,高电平的时候实际上是个高阻态,不具备输出能力,详细的可以搜索关键词:推挽输出、开漏输出;