关于按键问题~求大神
我要做的是用按键设置时间:有两个按键key1和key2:当按key1时,调用delay_1s,再按key1时,调用delay_2s,再按key1,调用delay_3s······
当按key2时,比如按key1到了delay_5s,这时候我需要按key2递减。
void key()
{
if(key_number==1)
{
应该怎么调用啊。。
}
if(key_number==2)
{
应该怎么调用。
}
}
voiddelay_1s()
{}
void delay_2s()
{}
......
谢谢大神帮忙~~ 本帖最后由 zjk 于 2013-5-14 16:31 编辑
LZ 可以设置一个变量,通过两个按键判断变量的奇偶性,打比方,按键1时判断偶数时,变量自加一,奇数则变量不变;按键2时判断偶数时变量不变,,奇数则变量自加一;同时在按键2的程序里记得判断,若变量大于4,则变量自减一,然后用switch语句根据变量的值去调用你那些延时函数,大概就这么个思路吧。。。。还有好多其他方法,LZ多想想就行了 zjk 发表于 2013-5-14 16:29 static/image/common/back.gif
LZ 可以设置一个变量,通过两个按键判断变量的奇偶性,打比方,按键1时判断偶数时,变量自加一,奇数则变量 ...
大神:
uchar setstate;
if(key_numer=1)
{
setstate=2;
switch(setstate)
{
case 1:delay_100ms();
break;
case 2:delay_200ms();
break;
case 3:delay_300ms();
break;
case 4:delay_400ms();
break;
case 5:delay_500ms();
}
}
我开始直接显示200ms的然后按key1的时候,为什么没有显示啊。。(这几个函数我都写了显示) 把 setstate=2
改成if(setstate<5)setstate++;
另外一个按键中类似的if(setstate>1)setstate--; 用标志位flag, #include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uintunsigned int
sbit key1=P3^0;
sbit key2=P3^1;
uchar flag=0;
void delay_1ms(uint x)
{
uchar i,j;
for(i=x;i>0;i++)
for(j=110;j>0;j++);
}
void key()
{
if(key1==0)
{
delay_1ms(5); // 延时,去抖动
if(key1==0)
{
flag++;
if(flag>5)
{
flag=5;
}
}
}
if(key2==0)
{
delay_1ms(5); // 延时 ,去抖动
if(key2==0)
{
flag--;
if(flag<0)
{
flag=0;
}
}
}
}
void main()
{
while(1)
{
key();
if(flag==1)
{
delay_1ms(1000);
}
if(flag==2)
{
delay_1ms(2000);
}
if(flag==3)
{
delay_1ms(3000);
}
if(flag==4)
{
delay_1ms(4000);
}
if(flag==5)
{
delay_1ms(5000);
}
}
}
菜鸟不才,小写了个程序,试下看行不行,我用开发板led灯代替延时函数 试了下 ,你在看看,看行的通不?
直接flagdelay-1s(flag*1000) 对flag进行操作 本帖最后由 zjk 于 2013-5-16 08:44 编辑
额,记得松手判断,不然按一次可能加或者减好几个数,还有就是那几个延时函数不要放在按键判断程序里边 晕。这种按键设计,思路是就是低效的,只能是当教材范例用,看看这个吧http://www.ndiy.cn/thread-5152-1-3.html
页:
[1]