在网上看到这样的一句话 “51单片机的I/O 口检测高低电平是需要首先让该端口置为1的。此时这个引脚才被设置为输入”,
--正确。
也就是说如果上面的设计可以做到的话,那么就需要一开始的时候给高电平吗?
--必须先给端口置一。
--你的电路,是做不到的。
--你的电路,按键、不按键,送到引脚的信号,都是高电平。
--你的电路,设计的不对,不符合单片机的特点。
--按键,另一端,应该接地。
设计存在缺陷:“51单片机的I/O 口检测高低电平是需要首先让该端口置为1的。此时这个引脚才被设置为输入” 正确,此操作在IO口初始化时设置;但是你的电路图,读取的始终为“1”;原因:当设置为输入时,单片机内部有上啦电阻,把其IO口引脚拉高;
改进:IO口连接一下拉电阻 6.8K~10K之间即可
单片机IO与外部相连是线与的关系,所以你的方法不行。单片机io口为高的时候你读取的相应io口电平才是外部电平。如果你把相应IO口置0,无论外部是0或1你读取的永远是0。所以你只有把io口置1,判断if( p1^6==0)才能判断是否键按下(当然你的按键得接地)。
51单片机的引脚检测到各个引脚的电压高于1.8V就认为是有高电平输入,低于0.7V就认为是低电平输入,在0.7~1.8V之间,是一个未知区域,既不是高电平也不是低电平。
大家常用的是,按键一端接地,另一端接IO口 检测,检测端加上拉电阻。