找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[疑问]STC15F104W单片机 红外控制LED,已成功,但是有BUG

[复制链接]
跳转到指定楼层
楼主
ID:222772 发表于 2017-8-7 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经过一番的查找资料,在51论坛找到了相关资料,而且通过修改代码,能够实现红外遥控LED的亮灭。
但是,有一些疑问和BUG,想请教一下大家:
判断代码如下,全部代码在附件
  1.                         switch(IRcord[2])
  2.                         {
  3.                                 case 0x0c: led1=0;break;//按1,LED1亮
  4.                                 //case 0x18: led1=1;break;//按2,LED1灭,注释1
  5.                                 case 0x5e: led2=0;break;//按3,LED2亮
  6.                                 //case 0x08: led2=1;break;//按4,LED2灭,注释2
  7.                                 case 0x1c: led3=0;break;//按5,LED3亮
  8.                                 //case 0x5a: led3=1;break;//按6,LED3灭,注释3
  9.                                 case 0x42: led4=0;break;//按7,LED4亮
  10.                                 case 0x52: led4=1;break;//按8,LED4灭
  11.                                 case 0x4a: led5=0;break;//按9,LED5亮
  12.                                 case 0x16: led5=1;break;//按0,LED5灭
  13.                                 case 0x45:
  14.                                         led1=1;
  15.                                         led2=1;
  16.                                         led3=1;
  17.                                         led4=1;
  18.                                         led5=1;
  19.                                         break;//全部灭
  20.                         }
复制代码
如果按照上面的代码,按相对应的按钮会达到相应的效果,例如按7,LED4会亮,按8,LED4会灭,如果只是按7,LED4只会亮,不会灭
问题来了:
1)如果把注释1,2,3其中一个注释取消,当我按7,LED4会亮,但是连续按两下7,LED4竟然会灭。。。。。这是什么情况?
2)另外有个问题,我想把代码写成
case 0x42: led4=~led4;break;//按7,LED4亮,目的就是取反,按同一个键,就达到开和关。但是实际情况,不行啊。。。。为什么
3)怎样用KEIL联机调试debug 红外接收信号。不是虚拟调试。我想跟踪实际接收到红外的信号编码。

红外遥控器编码.png (11.86 KB, 下载次数: 150)

红外遥控编码

红外遥控编码

51HeiRedCtrlLED.zip

28.69 KB, 下载次数: 108

红外遥控LED

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:222772 发表于 2017-8-7 11:37 | 只看该作者
啊~~~~~没有人来吗?
回复

使用道具 举报

板凳
ID:96072 发表于 2017-8-7 13:27 | 只看该作者
这个非常简单啦
回复

使用道具 举报

地板
ID:222772 发表于 2017-8-7 13:37 | 只看该作者
问题终于审核通过了。。。
回复

使用道具 举报

5#
ID:167440 发表于 2017-8-7 14:23 | 只看该作者
IAP15W4K58S4这款片子可以在线调试,对了我一开始用这个片子时发现对keill的版本有要求,有的不可以在线仿真调试

新建位图图像.jpg (107.73 KB, 下载次数: 137)

新建位图图像.jpg

新建位图图像.jpg (101.39 KB, 下载次数: 143)

新建位图图像.jpg
回复

使用道具 举报

6#
ID:167440 发表于 2017-8-7 14:36 | 只看该作者
这样就能解决你的问题了,如果不能我们继续讨论
void main()
{
        EX0init();//Enable GlobaI Interrupt Flag
        TIM0init();
        while(1)
        {
                if(irok)
                {
                        Ircordpro();
                        irok=0;
                }
                if(irpro_ok)//遥控成功接收
                {

                        switch(IRcord[2])
                        {
                                case 0x0c: led1=0;break;//按键1,灯1亮
                                case 0x18: led1=1;break;//按键1,灯1灭
                                case 0x5e: led2=0;break;//按键2,灯2亮
                                case 0x08: led2=1;break;//按键2,灯2灭
                                case 0x1c: led3=0;break;//按键1,灯1亮
                                case 0x5a: led3=1;break;//按键1,灯1灭
                                case 0x42: led4=0;break;//按键1,灯1亮
                                case 0x52: led4=1;break;//按键1,灯1灭
                                case 0x4a: led5=0;break;//按键1,灯1亮
                                case 0x16: led5=1;break;//按键1,灯1灭
                                case 0x45:
                                                  led1=1;
                                                  led2=1;
                                                  led3=1;
                                                  led4=1;
                                                  led5=1;
                                                  break;//按键关机,灯全灭
                        }
                       irpro_ok=0;     //加上这条语句
                }
        }
}

新建位图图像.jpg (26.4 KB, 下载次数: 148)

新建位图图像.jpg

评分

参与人数 1黑币 +5 收起 理由
stc0079 + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:222772 发表于 2017-8-8 09:22 | 只看该作者
浮云骑士 发表于 2017-8-7 14:36
这样就能解决你的问题了,如果不能我们继续讨论
void main()
{

谢谢,我试一下。
回复

使用道具 举报

8#
ID:222772 发表于 2017-8-8 09:27 | 只看该作者
浮云骑士 发表于 2017-8-7 14:23
IAP15W4K58S4这款片子可以在线调试,对了我一开始用这个片子时发现对keill的版本有要求,有的不可以在线仿 ...

网上找到这个文章 用KEIL实现联机调试的步骤
但是不知道那个FLIP程序是什么东东。
回复

使用道具 举报

9#
ID:222772 发表于 2017-8-8 09:48 | 只看该作者
浮云骑士 发表于 2017-8-7 14:36
这样就能解决你的问题了,如果不能我们继续讨论
void main()
{

可以了,谢谢。。。
这个是大概是什么原因? 红外信号没有清除吗?
回复

使用道具 举报

10#
ID:167440 发表于 2017-8-8 10:01 | 只看该作者
stc0079 发表于 2017-8-8 09:48
可以了,谢谢。。。
这个是大概是什么原因? 红外信号没有清除吗?

红外信号按着不松也在发信号,但,不是按键信号,至于具体是什么信号我还没查到,以前用示波器看到过。那句话是防止重复对switch语句一直重复执行
回复

使用道具 举报

11#
ID:222772 发表于 2017-8-8 11:40 | 只看该作者
浮云骑士 发表于 2017-8-8 10:01
红外信号按着不松也在发信号,但,不是按键信号,至于具体是什么信号我还没查到,以前用示波器看到过。那 ...

即使红外发射不是按键信号,重复执行switch语句,但是不等于 0x0c这些键值,也不会执行led1=0这句代码啊?所以不明白。
回复

使用道具 举报

12#
ID:72796 发表于 2018-10-25 10:32 | 只看该作者
学习一下,正在找这方面的资料.
回复

使用道具 举报

13#
ID:89515 发表于 2018-10-25 16:38 来自手机 | 只看该作者
stc0079 发表于 2017-8-8 09:48
可以了,谢谢。。。
这个是大概是什么原因? 红外信号没有清除吗?

标志不清除,怎么判定按键次数
回复

使用道具 举报

14#
ID:80372 发表于 2019-8-7 15:04 | 只看该作者
谢谢 楼主
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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