智能车制作
标题:
为什么51的按键防抖程序不得行?大侠们帮帮忙啊~小生这里谢过了哈
[打印本页]
作者:
oo7ak47666
时间:
2011-2-28 14:01
标题:
为什么51的按键防抖程序不得行?大侠们帮帮忙啊~小生这里谢过了哈
目的是防抖,而且按一次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;}
}
作者:
gao0708
时间:
2011-3-2 11:08
似乎你单写的时候参数是KEY1
而写成函数的时候参数是KEY2
作者:
oo7ak47666
时间:
2011-3-9 19:54
回复
2#
gao0708
这是用的两个不同的键来试的。
作者:
romantic1412
时间:
2011-7-21 00:03
防抖延时是不是少了点……
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2