按键抖动及消除方法
硬件消抖
软件消抖
while(P3_1 == 0){ Delay(20); while(P3_1 == 0);//检测松手 Delay(20); //这里可以写主体函数。 }
按键控制LED显示二进制
#include<REGX52.H> // 定义一个延时函数,参数为延时的毫秒数。函数是通过STC-IPS软件生成的 void Delay(unsigned int xms) //@12.000MHz { while(xms--) { unsigned char i, j; i = 2; j = 239; do { while (--j); } while (--i); } } /*由于LED在MCU端口输出低电平的时候为亮,所以不能直接把二进制显示出来。 先定义一个字符来表示二进制数,每次按下按键后,该字符自增。同时P2显示该字符取反后的值,就能通过按键控制LED显示二进制*/ void main() { unsigned char LEDNum = 0; while(1) { while(P3_1 == 0) { Delay(20); while(P3_1 == 0);//检测松手 Delay(20); LEDNum++; P2 = ~LEDNum; } } }
按键控制LED左移右移
#include<REGX52.H> void Delay(unsigned int xms);//声明延时函数 void main() { unsigned char LEDNum = 0;//定义一个参数来保存P2的状态,,原理同上 P2 = ~0x1;//初始化一下LED的状态,让第一个LED灯亮 while(1) { while(P3_1 == 0)//按键K1控制LED左移,每按一次向左移动一位 { Delay(20); while(P3_1 == 0);//检测松手 Delay(20); LEDNum++; if(LEDNum >= 8)//当参数大于8,让它归零,回到最右边 { LEDNum = 0; } P2 = ~(0x00000001 << LEDNum); } while(P3_0 == 0)//按键K1控制LED右移,每按一次向右移动一位 { Delay(20); while(P3_0 == 0);//检测松手 Delay(20); if(LEDNum == 0)//当按键小于零,让它为8,回到最左边 { LEDNum = 8; } LEDNum--; P2 = ~(0x00000001 << LEDNum); } } } void Delay(unsigned int xms) //@12.000MHz { while(xms--) { unsigned char i, j; i = 2; j = 239; do { while (--j); } while (--i); } }
现象就不详细概述了,烧录程序可以之间观察到现象。如果出现问题,可能是按键管脚口的选择出错了,查一下电路原理图进行修改。
————————————————
版权声明:本文为CSDN博主「孤心亦暖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Destiny_Di/article/details/126781175