找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1951|回复: 5
打印 上一主题 下一主题
收起左侧

单片机红外遥控程序问题,为什么要按两次才加一?

[复制链接]
回帖奖励 2 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:319133 发表于 2019-3-21 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
}
  if(IrValue[2]!=~IrValue[3])
  {
   return;
  }
  switch(IrValue[2])
  {
   case 0x19: key_do=~key_do;break;
   Delay10Ms(100);
   case 0x40: key_up=~key_up;break;
   Delay10Ms(100);
   case 0x44: key1=~key1;break;
   Delay10Ms(100);
  }

把遥控当按键使用,为什么要按两次才加一
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:234075 发表于 2019-3-21 18:54 | 只看该作者
只看到key_do\key_up\key1反转,没看到你+1的程序在哪
回复

使用道具 举报

板凳
ID:319133 发表于 2019-3-21 22:52 | 只看该作者
zhb2004xp 发表于 2019-3-21 18:54
只看到key_do\key_up\key1反转,没看到你+1的程序在哪

void key()
{
        if(!key1)
        {
                delays(10);
                if(!key1)
                {
                        key_num++;
                        while(!key1);
                }
        }
        if(key_num==1)
        {
                LcdShowstr(2,0,">");
                if(!key_up)
                {
                        delays(10);
                        if(!key_up)
                        {
                                Temphigh++ ;
                                if(Temphigh>99)
                                Temphigh=99;
                                while(!key_up);
                        }
                }
                if(!key_do)
                {
                        delays(10);
                        if(!key_do)
                        {
                                Temphigh--;
                                if(Temphigh<Templow)
                                Temphigh=Templow;
                                while(!key_do);
                        }
                }
        }
                if(key_num==2)
        {
                LcdShowstr(2,0," ");
                LcdShowstr(11,0,">");
                if(!key_up)
                {
                        delays(10);
                        if(!key_up)
                        {
                                Templow++;
                                if(Templow>Temphigh)
                                Templow=Temphigh;
                                while(!key_up);
                        }
                }
                if(!key_do)
                {
                        delays(10);
                        if(!key_do)
                        {
                                Templow--;
                                if(Templow<0)
                                Templow=0;
                                while(!key_do);
                        }
                }
        }
        if(key_num==3)
        {
                key_num=0;
                LcdShowstr(2,0," ");
                LcdShowstr(11,0," ");
                Write_add_24c02(0,Temphigh);
            delays(50);
            Write_add_24c02(1,Templow);
            delays(50);
        }
}
回复

使用道具 举报

地板
ID:319133 发表于 2019-3-22 01:03 来自手机 | 只看该作者
望大神们知道一下
回复

使用道具 举报

5#
ID:234075 发表于 2019-3-22 01:21 | 只看该作者
?你这个程序思路有问题啊,还是你直接把现有的程序拼接出来的,并没有理解程序的运行过程?
使用红外遥控代替按键,就直接代替按键了,case 0x44: key1=~key1;break;这里就不需要作key1=~key1,直接在这里写你需要key1按下时要做的程序就好了!
另外你为什么要再加一个按键扫描的程序(就是你第二次贴出来的程序)?这个按键扫描是用来扫描检测真实按键用的,这个按键扫描程序先扫描到某个按键(如key1)按下,(其中还有个消抖的过程),其中虽然执行了key_num++,但程序会等待按键(key1)松开,才会去执行下一步程序。
所以你用红外遥控代替按键时,按1次(key1=0),按键扫描程序检测到key=0,会执行key_num++语句,但会停止在while(!key1)语句,只有你按第2次(key1=1,相当于松开按键),程序才会继续向下执行
回复

使用道具 举报

6#
ID:319133 发表于 2019-3-22 09:32 来自手机 | 只看该作者
zhb2004xp 发表于 2019-3-22 01:21
?你这个程序思路有问题啊,还是你直接把现有的程序拼接出来的,并没有理解程序的运行过程?
使用红外遥控 ...

哈哈哈,我就是有真实按键在的程序,然后想加个红外,不能这样直接加吗,还是我思路有问题
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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