智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2739|回复: 3
打印 上一主题 下一主题

为什么51的按键防抖程序不得行?大侠们帮帮忙啊~小生这里谢过了哈

[复制链接]

8

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
479
威望
327
贡献
114
兑换币
20
注册时间
2009-7-27
在线时间
19 小时
跳转到指定楼层
1#
发表于 2011-2-28 14:01:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的是防抖,而且按一次8位灯只加一次。
防抖没问题,就是按一次只加一次目的没到到。
见红色部分。
#include<reg52.h>
#include<intrins.h>
sbit KEY1=P0^0;
sbit KEY2=P0^1;
sbit KEY3=P0^2;
sbit KEY4=P0^3;
sbit KEY5=P0^4;
sbit KEY6=P0^5;
sbit KEY7=P0^6;
sbit KEY8=P0^7;
unsigned char key_scan(void);
void hold_key(bit key);
void delay(unsigned int us);
main()
{
P2=0xff;
for(;;)
{
  if(key_scan()==1){P2+=1;while(KEY1==0){KEY1=1;}} 单写没问题
  if(key_scan()==2){P2-=1;hold_key(KEY2);}      换成函数就不行了,是不是函数有问题?
}
}

//*********************
void delay(unsigned int us)
{
  unsigned int i=0;
  unsigned char j=0;
   for(i=0;i<us;i++)
  {
   for(j=0;j<20;j++){;}
  }
}
unsigned char key_scan(void)
{
  P0=0xff;
  if(KEY1==0){delay(10);if(KEY1==0){return 1;}}
  if(KEY2==0){delay(10);if(KEY2==0){return 2;}}
  if(KEY3==0){delay(10);if(KEY3==0){return 3;}}
  if(KEY4==0){delay(10);if(KEY4==0){return 4;}}
  if(KEY5==0){delay(10);if(KEY5==0){return 5;}}
  if(KEY6==0){delay(10);if(KEY6==0){return 6;}}
  if(KEY7==0){delay(10);if(KEY7==0){return 7;}}
  if(KEY8==0){delay(10);if(KEY8==0){return 8;}}
  if(P0==0xff){return 0;}
}
void hold_key(bit key)
{
  while(key==0){key=1;}
}

4

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
955
威望
283
贡献
582
兑换币
0
注册时间
2010-9-9
在线时间
45 小时
2#
发表于 2011-3-2 11:08:39 | 只看该作者
似乎你单写的时候参数是KEY1
而写成函数的时候参数是KEY2
回复 支持 反对

使用道具 举报

8

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
479
威望
327
贡献
114
兑换币
20
注册时间
2009-7-27
在线时间
19 小时
3#
 楼主| 发表于 2011-3-9 19:54:19 | 只看该作者
回复 2# gao0708


    这是用的两个不同的键来试的。
回复 支持 反对

使用道具 举报

1

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
655
威望
398
贡献
155
兑换币
0
注册时间
2011-7-11
在线时间
51 小时
4#
发表于 2011-7-21 00:03:03 | 只看该作者
防抖延时是不是少了点……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 13:57 , Processed in 0.065030 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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