搜索
bottom↓
回复: 8

关于按键问题~求大神

[复制链接]

出0入0汤圆

发表于 2013-5-14 16:20:12 | 显示全部楼层 |阅读模式
我要做的是用按键设置时间:
有两个按键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)
     {
        应该怎么调用。
     }
}

void  delay_1s()
{}

void delay_2s()
{}

......

谢谢大神帮忙~~

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-5-14 16:29:30 | 显示全部楼层
本帖最后由 zjk 于 2013-5-14 16:31 编辑

LZ 可以设置一个变量,通过两个按键判断变量的奇偶性,打比方,按键1时判断偶数时,变量自加一,奇数则变量不变;按键2时判断偶数时变量不变,,奇数则变量自加一;同时在按键2的程序里记得判断,若变量大于4,则变量自减一,然后用switch语句根据变量的值去调用你那些延时函数,大概就这么个思路吧。。。。还有好多其他方法,LZ多想想就行了

出0入0汤圆

 楼主| 发表于 2013-5-14 20:23:18 | 显示全部楼层
zjk 发表于 2013-5-14 16:29
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的时候,为什么没有显示啊。。(这几个函数我都写了显示)

出0入0汤圆

发表于 2013-5-14 20:43:36 | 显示全部楼层
把 setstate=2
改成if(setstate<5)setstate++;
另外一个按键中类似的if(setstate>1)setstate--;

出0入0汤圆

发表于 2013-5-14 22:30:35 | 显示全部楼层
用标志位flag,

出0入0汤圆

发表于 2013-5-14 22:34:28 | 显示全部楼层
        #include<reg52.h>
        #include<intrins.h>
        #define uchar unsigned char
        #define uint  unsigned 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灯代替延时函数 试了下 ,你在看看,看行的通不?










出0入18汤圆

发表于 2013-5-14 22:36:23 | 显示全部楼层
直接flag  delay-1s(flag*1000) 对flag进行操作

出0入0汤圆

发表于 2013-5-16 08:43:09 | 显示全部楼层
本帖最后由 zjk 于 2013-5-16 08:44 编辑

额,记得松手判断,不然按一次可能加或者减好几个数,还有就是那几个延时函数不要放在按键判断程序里边

出0入0汤圆

发表于 2013-5-16 09:55:29 | 显示全部楼层
晕。这种按键设计,思路是就是低效的,只能是当教材范例用,看看这个吧http://www.ndiy.cn/thread-5152-1-3.html
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-17 15:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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