独立按键输入检测:
#include<reg52.h>sbit LED1=P1^0;
sbit KEY1=P3^4;void main()
{KEY1=1;while(1){if(KEY1==0) //KEY1按下{LED1=0; //LED1被点亮}else{LED1=1;}}
}
按键
#include<reg52.h>#define uchar unsigned char
#define uint unsigned intsbit LED1=P1^0;
sbit KEY1=P3^4;sbit dula=P2^6;
sbit wela=P2^7;uchar disnum;uchar code table_duan[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};void main()
{P0=0xfe;wela=1;wela=0;KEY1=1;while(1){if(KEY1==0) //KEY1按下{LED1=0; //LED1被点亮disnum++;if(disnum==10){disnum=0;}while(!KEY1); //重要}else{LED1=1;P0=table_duan[disnum];dula=1;dula=0;}}
}
按键在闭合和断开的时候,触电会存在抖动的现象:
按键抖动时间是由按键的机械特性决定:
一般为5ms到10ms之间。
按键前沿抖动消除和按键后延抖动的消除:
#include<reg52.h>#define uchar unsigned char
#define uint unsigned intsbit LED1=P1^0;
sbit KEY1=P3^4;sbit dula=P2^6;
sbit wela=P2^7;uchar disnum;uchar code table_duan[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};void delay(uchar);void main()
{P0=0xfe;wela=1;wela=0;KEY1=1;while(1){if(KEY1==0) //KEY1按下{delay(10); //按键前沿抖动的消除if(KEY1==0) //按键前沿抖动的消除{LED1=0; //LED1被点亮disnum++;if(disnum==10){disnum=0;}while(!KEY1); //重要delay(10); //按键后延抖动的消除while(!KEY1); //按键后延抖动的消除} }else{LED1=1;P0=table_duan[disnum];dula=1;dula=0;}}
}void delay(uchar x)
{uchar a, b;for(a=x;a>0;a--){for(b=200;b>0;b--);}
}
在代码中增加了延时和判断的代码来消除按键抖动的问题。
然后测试,可以看到数码管的数字显示非常稳定。