51单片机独立按键部分编程问题
发布网友
发布时间:2022-04-24 09:27
我来回答
共1个回答
热心网友
时间:2023-10-09 10:10
你好:
程序是这么运行的:
先在心中想象独立按键的结构,没按下时,P3外接上拉电阻,所以输入总是1,按键按下时,倒地,对应按键的IO输入为0.
然后,先置IO为输入,没按下时读出全是1,0xff,当有按键按下时,读入为0了,所以用if(KeyPort!=0xff)来判断是否有输入,然后消抖一下,继而继续判断是否还在输入,如果还在输入说明不是抖动引起而是认为引起,之后读取P3口的低5为数据(估计是你的独立按键的接口吧),并赋值给keyvalue;while((KeyPort & 0x1f)!=0x1f)这句的意思是如果一直按着,P3输入的数据肯定不变,那么条件为真,死循环,如果松开,P3全为1了,此时是等于0x1f的,所以结束循环,进行按键处理。
最后,是按键的核心,当P3.0按下,那么对应值是11111110,那么keyvalue的值是11110=0x1e,如果P3.1按下,那么对应值是11111101,那么keyvalue的值是11101=0x1d,以此类推,5个按键对应你题目中5个值。
不懂回复。
希望我的回答能帮助到你。追问那么我把#define KeyPort P3
改成#define KeyPort P1
后面的是不是自动引申成P1.0、P1.1等等了
追答是的。不仅是程序的修改,如果你P1口有上啦有按键就可以