找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

求指导,单片机红外遥控实现LED闪烁程序及PWM调光

查看数: 2909 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-8-26 15:13

正文摘要:

求指导,想要实现按键4按下LED4延时0.5秒闪烁,按其他键或者再按一下熄灭;按键2按下LED2稍暗,按其他键或者再按一下熄灭,按键3按下LED2稍亮,按其他键或者再按一下熄灭,程序应该怎么修改呢?程序及按键编码值如下 ...

回复

ID:147710 发表于 2020-8-27 12:53
截个图看看,你完成的单个功能。
你这个需求由于有红外编码,对时序要求比较严,先把单个功能高质量完成才行,别一开始就搞组合功能,到时不能工作都不知道如何查起。
比如先做一个简单功能,把这个功能封装成函数,有了封装换一个不同的遥控器就不至于全部推倒重来。
别想着只用几行代码就能解决所有问题,要舍得多声明变量,多声明函数,思维要有层次,不要眉毛胡子一把抓,结果啥都没抓到。
我给你的代码有你所缺乏的编程思维,认真做一遍后,你目前的很多问题都可迎刃而解。
千万不要小瞧按键点灯程序,你试着完成下面需求:
1,单击按键在按下时马上点亮
2,单击按键在抬起后才点亮
3,双击点亮,
4,长按3秒点亮
5,连续按3次点亮
6,按住按键不放,1秒后,LED每秒钟闪烁3次,松开手后,LED熄灭

ID:147710 发表于 2020-8-26 22:02
你上次不是提过类似问题么,我给的参考程序有没有敲一遍?首先在IO口加几个按键代替红外接收,把LED按照需求点亮,
然后再单独调通红外接收。
最后组合在一起。
别急,花点时间把这些吃透,以后就轻松了。
做项目其实都是大同小异。
你这个我以前玩过。







ID:626891 发表于 2020-8-26 18:07
XTXB 发表于 2020-8-26 16:30
你这个程序功能代码互相交叉,牵一发动全身,没有修改价值,先按照之前的按键控制LED的例子先做一遍,各功 ...

这个程序搞了好久,把各个功能模块分出来,然后再组合,对于我们初学者来说很难的,不知道从何入手
ID:230118 发表于 2020-8-26 17:44
用个小状态机描述比较清晰:
idle state :   ledOff();
                  if (capture(Key4))
                  {
                        shine(LED4);
                        goto  state  1;
                   }

                  if (capture(Key2))
                  {
                        darken(LED2)
                        goto  state  2;
                   }

                   if (capture(Key3))
                  {
                        brighten(LED2)
                        goto  state  3;
                   }

state 1、state2、state3:
                   if (capture(anykey))
                   {
                         goto state idle;
                   }

伪代码,自己实现函数
ID:147710 发表于 2020-8-26 16:30
你这个程序功能代码互相交叉,牵一发动全身,没有修改价值,先按照之前的按键控制LED的例子先做一遍,各功能模块要独立出来:LED显示,蜂鸣器驱动,键值解析,红外接收,单独封装成一个函数,先把这些一个个调试正常,然后一个个组合起来。另外,定时中断中再用delay很不妥。

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

Powered by 单片机教程网

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