版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、利用AVR(M8)的输入捕获(ICP)对万能红外线遥控器进行解码本实例程序为自创,若转载请注明出处,谢谢! 小弟不久前买了一个科朗公司出版的万能电视遥控器RM-2008,用作对设备的红外遥控,折腾了几天,今天终于弄清楚了如何对该遥控器进行解码,很开心,所以把成果与各位大虾分享,有什么错误的地方请指正。万能遥控器在使用前一般要进行设置,针对RM-2008这款万能遥控,设置方法如下:先按住“设置”键不放,再按下“电源”(“开/关”)键,工作指示灯亮起,然后释放两键,在此时进入代码输入状态,依次键入 0 0 0 指示灯熄灭,设置成功!说明一下:0 0
2、0 编码是日立公司初期的红外编码方式,也就是网上到处都通用的红外编码方式(如下图),另外本程序只能对此编码进行解码本程序通过使用输入捕获功能(ICP)捕捉红外信号的高电平脉宽,达到解码的目的;如果捕获到的脉宽是4.5ms 则表示此信号为同步码,如果捕获到的脉宽是1.685ms 的话则表示 “1” 否则表示“0”测试电路如下:使用DNW 串口调试软件时的效果#include <avr/io.h>#include <avr/signal.h>#include <avr/interrupt.h>#include <avr/wdt.h>#include
3、<util/delay.h>#include <stdio.h>/*-遥控操作值-*/ key code (hex)#define Key_1 0x01#define Key_2 0x02#define Key_3 &
4、#160; 0x03#define Key_4 0x04#define Key_5 0x05#define Key_6 0x06#define Key_7 0x07#define Key_8 0x08#define Key_9&
5、#160; 0x09#define Key_0 0x00#define Menu 0x5c / 菜单#define Menu_up 0x56 / 菜单上#define Menu_down 0x57
6、60; / 菜单下#define Menu_left 0x5f / 菜单左#define Menu_right 0x5b / 菜单右#define Menu_ok 0x16 / 菜单确认#define Channel_up 0x1b
7、0; / 频道+#define Channel_down 0x1f / 频道-#define Sound_up 0x1e / 音量+#define Sound_down 0x1a / 音量-#define Open_Close 0x12
8、160; / 开/关#define Mute 0x10 / 静音#define Pic_in_pic 0x51 /画中画#define Standard 0x58 / 制式#define Return
9、160; 0x52 / 返回#define Times 0x0b / 倍数#define Screen 0x16 / 屏幕#define Audio
10、0; 0x1d / 伴音#define NICAM 0x13 / 丽音#define TV_Vedio 0x0f / 电视/视频#define Sleep 0x0e /睡眠/*-常
11、用参数定义-*/#define P0 0#define P1 1#define P2 2#define P3 3#define P4 4#define P5 5#define P6 6#define P7 7#define FREQ 8 /定义单片机工作频率为 8M#define uint unsigned int#define uchar unsigned char#define Start_T1 TCCR1B|=_BV(CS11);TCNT1=0/复位预计分频器并开启定时器T1#define Stop_T1 TCCR1B&=_BV(CS11) /关闭定时器T1/*-IR信号指示灯操
12、作函数-*/#define EN_IR_LED DDRB|=_BV(P1)#define CLR_IR_LED PORTB&=_BV(P1)#define SET_IR_LED PORTB|=_BV(P1)/*-某些端口操作-*/volatile unsigned char i,j,k;volatile unsigned long IRcode; /定义一个长度为4字节的无符号long类型变量来存储代码vol
13、atile unsigned char *IRcodePointer ; /定义一个无符号的单字节指针变量, /用此地址变量来分别读取IRCode的 /4个字节 其中操作码为 IRcodePointer2
14、0; /用户码为 IRcodePointer0volatile unsigned char IRReceiveEffective=0; /IR信号接收有效 当程序响应接收以后请马上清零 这样才会继续接收下一IR码volatile unsigned char IRReceiveCurrentBit=0; /IR信号当前接收位 0时表示第0位即同步码(4.5ms高电平)volatile unsigned int Pulse_length=0;&
15、#160; /捕获的脉冲宽度volatile unsigned char ICP_Parity=0; /捕获中断奇偶次计数 1时为偶次 并在此时判断脉宽volatile unsigned char Received_Key_Temp; /红外接收操作键缓存const unsigned char String="Y
16、ou Have Press Key : "/*-串口定义-*/unsigned char SetPrintfConvertMode=0; /使用printf作其他转换,并非输出到UARTvoid Uart_Init(void);int System_putchar(char c, FILE *stream);int System_getchar(FILE *stream);FILE mystd = FDEV_SETUP_STREAM(System_putchar, System_getchar,_FDEV_SETUP_RW);/*-常用函数定义-*/void delay_nms(un
17、signed int ms) /N ms延时函数for(i=0;i<ms;i+) _delay_loop_2(FREQ*250);/*-系统初始化函数定义-*/void IO_INIT(void)PORTB|=_BV(P0); /设置ICP引脚内部上拉 经过试验验证,上拉会提高红外接收灵敏度ISR(TIMER1_COMPA_vect) IRReceiv
18、eCurrentBit=0;/重置IR接收位为第0位,为下次接收做准备TIMSK&=_BV(OCIE1A); /关闭溢出中断TCCR1B|=_BV(ICES1); /设置输入捕获 上升沿有效ICP_Parity=0; Stop_T1; CLR_IR_LED;ISR(TIMER1_CAPT_vect)if(!IRReceiveEffective) if(ICP_Parity=0) IC
19、P_Parity+; TIMSK|=_BV(OCIE1A); TCCR1B&=_BV(ICES1); /设置输入捕获 下降沿有效 Start_T1 ; else Stop_T1;ICP_Parity=0; TCCR1B|=_BV(
20、ICES1);/设置输入捕获 上升沿有效 Pulse_length=ICR1; if(IRReceiveCurrentBit=0) if(Pulse_length>=3500&&Pulse_length<5500)/ 如果是引导码 (4.5ms) 进入下一个bit的读取
21、 IRReceiveCurrentBit+; else if(IRReceiveCurrentBit<33) /接收32位数据 IRcode>>=1; if(Pulse_length<1900&&Pulse_length>1
22、400) /判断是否为 1 ( 1.685 ms) IRcode|=0x80000000; IRReceiveCurrentBit+; if(IRReceiveCurrentBit=33)
23、IRReceiveCurrentBit=0; /重置IR接收位为第0位,为下次接收做准备 if(IRcodePointer0=(unsigned char)(IRcodePointer1)&&IRcodePointer2=(unsigned char)(IRcodePointer3)
24、; SET_IR_LED; /开启IR信号指示灯 IRReceiveEffective=1; /数据有效 delay_nms(5); /因为32位数据后面还有一个信号上跳变,所以要适当延时,延时0.65ms以上即可
25、 /int main(void) wdt_disable();IO_INIT();Uart_Init();TCCR1B=_BV(WGM12)|_BV(CS11);/采用8分频 这样的话 TCNT1的计数时基为 1usOCR1A=8000; /TCNT1 计数上限 设置IR接收超时 这里设置 8msTIMSK|=_BV(TICIE1);/开启输入捕获中断TCCR1B|=_BV(ICES1);/输入捕获 上升沿有效E
26、N_IR_LED; /IR信号指示灯允许CLR_IR_LED; /关闭IR信号指示灯IRcodePointer=&IRcode; sei(); while(1) if(IRReceiveEffective) Received_Key_Temp=IRcodePointer2;/把接收到的操作键放入缓存 IRReceiveEffective=0; /允许下一次接收 switch(Rece
27、ived_Key_Temp) case Key_1 : printf("n%sKey_1",String);break; case Key_2 : printf("n%sKey_2",String);break;
28、; case Key_3 : printf("n%sKey_3",String);break; case Key_4 : printf("n%sKey_4",String);break; case Key_5
29、160; : printf("n%sKey_5",String);break; case Key_6 : printf("n%sKey_6",String);break; case Key_7 : printf("n%sKey_7",String);break;&
30、#160; case Key_8 : printf("n%sKey_8",String);break; case Key_9 : printf("n%sKey_9",String);break; case Key_0
31、0; : printf("n%sKey_0",String);break; case Menu : printf("n%sMenu",String);break; case Menu_up : printf("n%sMenu_up",String);b
32、reak; case Menu_down : printf("n%sMenu_down",String);break; case Menu_left : printf("n%sMenu_left",String);break; case Menu_right : printf("n%sMenu_right",String)
33、;break; case Menu_ok : printf("n%sMenu_ok",String);break; case Channel_up : printf("n%sChannel+",String);break; case Channel_down : printf(&qu
34、ot;n%sChannel-",String);break; case Sound_up : printf("n%sSound+",String);break; case Sound_down : printf("n%sSound-",String);break;
35、; case Open_Close : printf("n%sOpen_Close",String);break; case Mute : printf("n%sMute",String);break; case Standard : printf("n%sStandard",String);bre
36、ak; case Return : printf("n%sReturn",String);break; case Times : printf("n%sTimes",String);break; /case Screen : printf("n%sScreen",String);break;/Screen 与 menu_ok 值相同 case Audio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 9《生活离不开他们 感谢他们的劳动》说课教学设计-2023-2024学年道德与法治四年级下册统编版
- 小学语文二年级上册课件第二单元识字2 树之歌
- 人教版九年级化学上册课题 2 如何正确书写化学方程式第1课时教案()
- 不购买社保合同模板
- 企业合营合同模板
- 高考语文专项写作提升课堂:“学写读书报告”技法指导与写作训练
- 商品检测合同模板
- 厦门婚庆酒店合同模板
- 园林古建售卖合同模板
- 合伙建厂协议合同模板
- 第一次月考 (1-2单元)(月考)- 2024-2025学年六年级上册数学苏教版
- 2024至2030年中国复合软管行业市场行情动态及发展趋向分析报告
- 2024年全国职业院校技能大赛高职组(智能节水系统设计与安装赛项)考试题库-下(多选、判断题)
- 2024年农业经理人职业技能竞赛考试题库500题(含答案)
- 职业技能大赛-鸿蒙移动应用开发(计算机程序设计员)理论知识题库(附参考答案)
- 人教版(2024)七年级上册数学第一次月考测试卷(含答案)
- 部编版五年级上册第三单元大单元教学设计
- 2024-2030年中国砷化镓行业行情监测与应用需求前景分析研究报告
- 回款协议合同范本(2024版)
- DB11T 1273-2024 LED交通诱导显示屏技术要求
- 东莞2024年广东东莞市统计局招聘工作人员 笔试历年典型考题寄考点剖析含答案附详解
评论
0/150
提交评论