独立按键输入检测:
#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 int
sbit 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 int
sbit 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--);
}
}
在代码中增加了延时和判断的代码来消除按键抖动的问题。
然后测试,可以看到数码管的数字显示非常稳定。