关于消抖,我现在想到的方法只有两种,一种是延时跳过抖动再检测;另一种也就是本贴的思路:就是把抖动灭掉,不让它抖动,而不是跳过抖动,如下图:

#include<AT89X55.H>
#define uchar unsigned char
#define uint unsigned int
sbit key=P1^3;
uchar i;
uchar code num[]=
{0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/
0xB0,/*3*/0x99,/*4*/0x92,/*5*/0x82,/*6*/
0xF8,/*7*/0x80,/*8*/0x90,/*9*/};
void keysan()//按键扫描
{
bit flag;
uint keysta;
if((!key)&(!flag))
{
key=0;//消抖
i++;
if(i>9)
i=0;
flag=1;
}
if(!key)
{
keysta++;
if(keysta==10000)
{
key=1;//拉高
keysta=0;
flag=0;
}
}
}
void main()
{
while(1)
{
keysan();
P0=0xf0;
P2=num;
}
}
电路仿真.rar
(24.54 KB, 下载次数: 20)
|