网站大量收购独家精品文档,联系QQ:2885784924

NEC协议的红外遥控器驱动程序.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
是不是觉得红外遥控+51单片机是绝妙组合?但是在编程时才发现超级纠结?其实也没那么纠结,自己摸索摸索,总能找出办法来的。 本程序占用了51单片机的定时器0以及中断1两个资源,为的是使单片机能接收到每一个红外脉冲信号,一个都不能少。如果舍不得用这两个资源,还有另一种查询的办法,就是不一定每个信号都能收到,可自己琢磨一下。 需要全套NEC协议红外遥控器资料的,到网上找,到处都有,而且很全。 另外,对着资料写程序如果实在写不出,可以找个示波器,把波形录下来好好研究研究。毕竟有些时候资料会过时,只要里面有一点东西变化了,程序就完全不一样了。这种弯路,尽量少走。 本程序只是头文件,具体到应用上还要各位自己动脑筋了,希望对大家有所帮助。共同学习,共同进步! /****************************************************************** INF_NEC.h 用于NEC协议的遥控器,主控器为51单片机。用户码8位,分布于2-17个脉冲; 按键码8位,分布于18-33个脉冲。皆为前8原码,后8反码。 注意:本驱动占用51单片机的外部中断1以及定时器0两个资源,编程时注意 不要再乱动这两个资源。 *******************************************************************/ #includereg52.h #define uchar unsigned char #define uint unsigned int uchar nec_flag=0;//nec_flag:遥控码的标志位。0:无信号;1、2:信号采集;3、可用信号 uchar nec_num=0;//nec_num:红外码的序号 uint nec_time=0;//nec_time:定时器的计时次数nec_time*250us uchar nec_cod[2]={0,1};//遥控器的编号,编号0为原码,编号1为反码 uchar nec_dat[2]={0,1};//遥控器的数据,数据0为原码,数据1为反码 #ifndef __INF_NEC__ #define __INF_NEC__ extern void nec_init(); extern void nec_act(); #endif void nec_init() //外中断1及定时器0的初始化函数 { TMOD=(TMOD0xf0)|0x02; //定时器0模式2,8位自动重装 TH0=0x19; TL0=0x19; //11.0592MHz晶振,计数230次,大概时间250us ET0=1;TR0=0; //定时器0使能,先关着 IT1=1;EX1=1; //外部中断1使能,用来接收红外信号 EA=1; //开总中断 } void nec_act()//按键功能程序 { if((nec_dat[0]==~nec_dat[1])(nec_flag==3)) { switch(nec_dat[0]) { case 69: break; case 70: break; case 71: break; case 68:break; case 64:break; case 67:break; case 7:break; case 21:break; case 9:break; case 22:break; case 25:break; case 13:break; case 12:break; case 24:break; case 94:break; case 8:break; case 28:break; case 90:break; case 66:break; case 82:break; case 74:break; } } } void timer0(void) interrupt 1 { nec_time++; if(nec_time1000)//长时间无红外遥控信号时关定时器 { nec_time=0;nec_num=0;nec_flag=0;TR0=0; } } void exint1(void) interrupt 2 { uint intime=0;//intime:为了不打扰计时器工作,所以用intime把nec_time提出来 intime=nec_time;nec_time=0;//nec_time置0,准备计数 i

文档评论(0)

zsmfjy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档