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

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

ID:38582218

大小:124.00 KB

页数:4页

时间:2019-06-15

NEC协议的红外遥控器驱动程序_第1页
NEC协议的红外遥控器驱动程序_第2页
NEC协议的红外遥控器驱动程序_第3页
NEC协议的红外遥控器驱动程序_第4页
资源描述:

《NEC协议的红外遥控器驱动程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、是不是觉得红外遥控+51单片机是绝妙组合?但是在编程时才发现超级纠结?其实也没那么纠结,自己摸索摸索,总能找出办法来的。本程序占用了51单片机的定时器0以及中断1两个资源,为的是使单片机能接收到每一个红外脉冲信号,一个都不能少。如果舍不得用这两个资源,还有另一种查询的办法,就是不一定每个信号都能收到,可自己琢磨一下。需要全套NEC协议红外遥控器资料的,到网上找,到处都有,而且很全。另外,对着资料写程序如果实在写不出,可以找个示波器,把波形录下来好好研究研究。毕竟有些时候资料会过时,只要里面有一点东西变化了,程序就完全不一样了。这种弯路

2、,尽量少走。本程序只是头文件,具体到应用上还要各位自己动脑筋了,希望对大家有所帮助。共同学习,共同进步!/******************************************************************INF_NEC.h用于NEC协议的遥控器,主控器为51单片机。用户码8位,分布于2-17个脉冲;按键码8位,分布于18-33个脉冲。皆为前8原码,后8反码。注意:本驱动占用51单片机的外部中断1以及定时器0两个资源,编程时注意不要再乱动这两个资源。***************************

3、****************************************/#include#defineucharunsignedchar#defineuintunsignedintucharnec_flag=0;//nec_flag:遥控码的标志位。0:无信号;1、2:信号采集;3、可用信号ucharnec_num=0;//nec_num:红外码的序号uintnec_time=0;//nec_time:定时器的计时次数nec_time*250usucharnec_cod[2]={0,1};//遥控器的编号,

4、编号0为原码,编号1为反码ucharnec_dat[2]={0,1};//遥控器的数据,数据0为原码,数据1为反码#ifndef__INF_NEC__#define__INF_NEC__externvoidnec_init();externvoidnec_act();#endifvoidnec_init()//外中断1及定时器0的初始化函数{TMOD=(TMOD&0xf0)

5、0x02;//定时器0模式2,8位自动重装TH0=0x19;TL0=0x19;//11.0592MHz晶振,计数230次,大概时间250usET0=1;TR0=0

6、;//定时器0使能,先关着IT1=1;EX1=1;//外部中断1使能,用来接收红外信号EA=1;//开总中断}voidnec_act()//按键功能程序{if((nec_dat[0]==~nec_dat[1])&&(nec_flag==3)){switch(nec_dat[0]){case69:break;case70:break;case71:break;case68:break;case64:break;case67:break;case7:break;case21:break;case9:break;case22:break;c

7、ase25:break;case13:break;case12:break;case24:break;case94:break;case8:break;case28:break;case90:break;case66:break;case82:break;case74:break;}}}voidtimer0(void)interrupt1{nec_time++;if(nec_time>1000)//长时间无红外遥控信号时关定时器{nec_time=0;nec_num=0;nec_flag=0;TR0=0;}}voidexint1(vo

8、id)interrupt2{uintintime=0;//intime:为了不打扰计时器工作,所以用intime把nec_time提出来intime=nec_time;nec_time=0;//nec_time置0,准备计数if(nec_num==0)TR0=1;//开定时器,开始计数if(nec_num==1){if((intime>50)&&(intime<60))nec_flag=1;}if(nec_num==2){if((intime>2)&&(intime<11))nec_flag=2;}if(nec_flag==2){if

9、((nec_num>=2)&&(nec_num<=9)){if((intime>2)&&(intime<6))nec_cod[0]=nec_cod[0]&~(0x01<<(nec_num-2));elseif((inti

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。