智能车制作

标题: 求解键盘消抖程序 [打印本页]

作者: knifezhang    时间: 2012-7-29 22:05
标题: 求解键盘消抖程序
求高手指教,今天看到一个程序,是利用键盘p1.4与p1.5,按下P1.4数码管数字加1,P1.5减1.具体程序如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar datas[4]={1,2,0,3};
uint number=8888;
uchar key_up;
uchar key_down;


void delay(uint ms)
{uchar j;
while(ms>0)
{ms--;
for(j=1;j>0;j--);
}
}

void display(uchar *p)
{uchar i,led=0xfe;
for(i=0;i<4;i++)
{P0=table[p];
P2=led;
led=(led<<1)|0x01;
delay(1);
}
}


void process(uint i,uchar *p)
{
p[0]=i/1000;
i=i%1000;
p[1]=i/100;
i=i%100;
p[2]=i/10;
i=i%10;
p[3]=i;
}


void check(void)          /*键盘消抖程序*/
{
while((P1&0x10)==0)
{key_up=1;
display(datas);
}
while((P1&0x20)==0)
{
key_down=1;
display(datas);
}
}             /*看不懂啊!!!*/


void main()
{while(1)
{
process(number,datas);
display(datas);
check();
if(key_up==1)
{
if(number!=9999)
number++;
else
number=0;
key_up=0;
}
if(key_down==1)
{
if(number!=0)
number--;
else
number=9999;
key_down=0;
}
}
}





作者: 自由de-Style    时间: 2012-8-5 20:40
看到delay这5个字母可以断定你还是学生
作者: knifezhang    时间: 2012-8-6 18:04
自由de-Style 发表于 2012-8-5 20:40
看到delay这5个字母可以断定你还是学生

然后呢?

作者: 自由de-Style    时间: 2012-8-7 19:20
knifezhang 发表于 2012-8-6 18:04
然后呢?

有点小菜
作者: ~ら悠^ǒ^然    时间: 2012-8-11 19:10
void check(void)          /*键盘消抖程序*/
{
while((P1&0x10)==0)
{key_up=1;
display(datas);
}
while((P1&0x20)==0)
{
key_down=1;
display(datas);
}
}             /*看不懂啊!!!*/
其中P1&0x10程序就是只选择P1.4与P1.5端口,其余端口肯定为0,所以只有你在按下P1.4或P1.5的时候才会延时或不掩饰,‘&'就相当于’与‘。。。。。。
欢迎接着提问啊!





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2