智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2245|回复: 4
打印 上一主题 下一主题

求解键盘消抖程序

[复制链接]

2

主题

8

帖子

0

精华

注册会员

Rank: 2

积分
187
威望
120
贡献
41
兑换币
0
注册时间
2012-7-18
在线时间
13 小时
跳转到指定楼层
1#
发表于 2012-7-29 22:05:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
求高手指教,今天看到一个程序,是利用键盘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;
}
}
}




0

主题

59

帖子

0

精华

高级会员

Rank: 4

积分
692
威望
407
贡献
177
兑换币
77
注册时间
2012-2-22
在线时间
54 小时
毕业学校
是公司的风格
2#
发表于 2012-8-5 20:40:12 | 只看该作者
看到delay这5个字母可以断定你还是学生
回复

使用道具 举报

2

主题

8

帖子

0

精华

注册会员

Rank: 2

积分
187
威望
120
贡献
41
兑换币
0
注册时间
2012-7-18
在线时间
13 小时
3#
 楼主| 发表于 2012-8-6 18:04:27 | 只看该作者
自由de-Style 发表于 2012-8-5 20:40
看到delay这5个字母可以断定你还是学生

然后呢?
回复

使用道具 举报

0

主题

59

帖子

0

精华

高级会员

Rank: 4

积分
692
威望
407
贡献
177
兑换币
77
注册时间
2012-2-22
在线时间
54 小时
毕业学校
是公司的风格
4#
发表于 2012-8-7 19:20:11 | 只看该作者
knifezhang 发表于 2012-8-6 18:04
然后呢?

有点小菜
回复

使用道具 举报

0

主题

8

帖子

0

精华

注册会员

Rank: 2

积分
166
QQ
威望
125
贡献
35
兑换币
0
注册时间
2012-8-9
在线时间
3 小时
5#
发表于 2012-8-11 19:10:02 | 只看该作者
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的时候才会延时或不掩饰,‘&'就相当于’与‘。。。。。。
欢迎接着提问啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-18 15:53 , Processed in 0.042465 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表