完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
最近公司需要开发一款红外万能学习模块,利用手机app控制,红外模块需要带有红外接收模块,和发射模块。刚开始我用普遍的红外四字节时序成功的学习到数据和发射,但后来发现空调的编码字节数是不一样的,公司要求只需要学习到空调的码就可以,不需要像空调一样,一个按键多次按发射不同的编码。于是我想到的通过记录波形的高低电平和波形的宽度,发射时还原发送就可以。
单片机使用外部中断来记录红外信号,红外信号发射开始是引导码,当红外接收器到低电平时就可以触发到外部中断开始,并用定时器记录好时间。下面是例程: void Int0() interrupt 0 { uint i; uint timeL,timeH; EX0 = 0;//关闭中断不再接上其他的数据 for(i=0;i<170;i++)//定义了512个字节的数值(每个波形需要有高低电平的标志位,宽度分为两个字节存储) { if(JS==0) { timeL = GetLowTime();//读取低电平的宽度时间 if(timeL>30000)//如果超过时间就退出学习,防止程序卡死 break; xie[i*3] = 0x00;//低电平标志位 xie[i*3+1] = timeL>>8;//波形宽度低电平 xie[i*3+2] = timeL;//波形宽度高电平 } else if(JS==1) { timeH = GetHighTime();//读取高电平宽度时间 if(timeH>30000)//如果超过时间就退出学习,防止程序卡死 break; xie[i*3] = 0xff;//低电平标志位 xie[i*3+1] = timeH>>8;//波形宽度低电平 xie[i*3+2] = timeH;//波形宽度高电平 } } IE0 = 0;//清除中断标记位 } |
|
|
|
只有小组成员才能发言,加入小组>>
2497 浏览 0 评论
1062浏览 2评论
681浏览 1评论
443浏览 0评论
177浏览 0评论
296浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-11 01:46 , Processed in 1.784306 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号