1.消抖
①软件消抖,在判断出电平降低后,进行延时5ms左右,再次判断点平是否降低,从而实现软件消除抖动。
②硬件消抖,在电路上,通过串联电容,当电平降低,对电容充电,一直降低后,再判断电平。
2.实现按键后,灯闪烁并且晶体管上显示数值。
#include "reg52.h"
sbit LED1=P2^0;
sbit key1=P3^1;
sbit key2=P3^0;
sbit key3=P3^2;
sbit key4=P3^3;
#define KEY1_out 1
#define KEY2_out 2
#define KEY3_out 3
#define KEY4_out 4
#define KEY_no 0
#define shumaguan P0//数码管
sbit WEIA=P2^4;//三八译码器控制数码管位选
sbit WEIB=P2^3;
sbit WEIC=P2^2;
unsigned char xianshi_shuzhu[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay_10us(int time1)
{
while(time1--);
}
int anjian_panduan(int in)//in负责判断是单次判断或者多次判断,当单次判断时in=0,多次判断时in=1
{
static key=1;
if(in==1)
{
key=1;
}
if((key==1)&&(key1==0||key2==0||key3==0))
{
delay_10us(500);
key=0;
if(key1==0)
return KEY1_out;
else if(key2==0)
return KEY2_out;
else if(key3==0)
return KEY3_out;
}
else if(key1==1&&key2==1&&key3==1)
{
key=1;
return KEY_no;
}
return KEY_no;
}
int key_result=0;
void main()
{
while(1)
{
key_result=anjian_panduan(0);
if(key_result==KEY1_out)
{
LED1=!LED1;//灯闪烁
WEIA=1;WEIB=1;WEIC=1;//三八译码器控制第一个数码管打开
shumaguan=xianshi_shuzhu[0];//显示数值为0
delay_10us(50000);//延时一段时间
shumaguan=0x00;
}
}
}