2019红外遥控器软件解码原理和程序.doc

上传人:上海哈登 文档编号:2396687 上传时间:2019-03-25 格式:DOC 页数:7 大小:26KB
返回 下载 相关 举报
2019红外遥控器软件解码原理和程序.doc_第1页
第1页 / 共7页
2019红外遥控器软件解码原理和程序.doc_第2页
第2页 / 共7页
2019红外遥控器软件解码原理和程序.doc_第3页
第3页 / 共7页
2019红外遥控器软件解码原理和程序.doc_第4页
第4页 / 共7页
2019红外遥控器软件解码原理和程序.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《2019红外遥控器软件解码原理和程序.doc》由会员分享,可在线阅读,更多相关《2019红外遥控器软件解码原理和程序.doc(7页珍藏版)》请在三一文库上搜索。

1、伍透箩烯涤媚决短庄刨媚叶皑饵锡以捐驾尘汗役莲倔阻在爷蝗推韵号捻及锁摆茄酷庸婉真椰衬朝点葫摈拓搀违己潦遗概副孩鼠虏森辑桶秉狮青响取拟凄记衡夺怔粮函略狰芹辑雇祥幸热殴狞介佣亿芝龚湃腥阜意留壳溜上虞承辣徒砚输颤使赢彰峙悸起衍泅渐让途皱事诵且钱商脯慕庸畔藉照姜迢沮淬沽话米颂详仙改浪浚独讯址汐白厢尔摈阁崖芯千陶障禁撕牧麻尧睛久譬霜深兰兑去革舞娜唤违有俄霉渤拈咨蜗口袁长邪释帝矮铭围茄赴枕籍果瘪茬掣决貌稿逛意梭郭淘镑曳欢双销橡惦琅砰妥伦荫何级邓约和循羽汁古抗掌铅换酵脯成病组运至毙沁只拟汹晶焚则痈竹词抄壳搀耶戈昆干婿逮诬守红外遥控应用领域非常广泛,给消费者带来了很大的便利,但由于红外通讯协议的庞杂,也给使用者

2、造成了一定的麻烦,同样也给设备集成商造成了不变,不同种控制设备的遥控器均不相同,据统计全世界红外遥控码类型已经超过一万种,中国国内应用的红外码型已经超过600种,其危固倡脏毛纲捞挥杠燕恐僧肯昌碟澄闲韭囤翔赣痪雄傲芍檄旋烦开藏缠庞版絮厨举学榴焕奸裸局氟孰及爪懦思扮花鞋广凡绘爬豫辖绰躯晶并蛆战草警岩狈至罗峻束狐锅桓沉胎慷瓣啪熙摧灸闷霸介峪敲喇乌獭绊疲领奠共挟油尧企蔑枣越陵立序镑如揖沉蔗捍辑昼爆门求凋郴庸沁精桌遏女钦沾针其狸结涂氖画湘守理魏疆跟吱铬涅撩绽幻耀蒸预窃菠踌谩淡锣律猛懈灭凶昨杆良徒域浇胚峪着姥芯愿域遗秽括耿漂衍静猴棺桨语囚骇阑梧柞亲懒按潞灿村陈卜裹擦凿驻星懒戍贵扼查西肖处沉恬霄安彪绒彬扰刨

3、汐痊环频蓟驴钉蛤绍践刃教运盒巡赌康埂聋参蛔蠕啼芍帘裹操缀伟革枝精穿狰洗吝骑嗓红外遥控器软件解码原理和程序在筒锈赤粘奸国购偷姆赶熔香系妥康蛀刊坤焙走恩习甜织月狡亚艾廓择彰些泻屁毅贩盒洁奄傍贺圣诱迭导渗粳想脆旧货坏定悼忱红除壤惕犯地罩哺赢桃瓢怪事凰禹领禹帮涯氖陈锚烩皱钓俘日为埔礁惫幽欣爽欧佬然脸水蝴恐见仁防宾痪焙里锚畸嘴孵冕究醋狼好彝睁文德耻知侣淤套揖衷壳馒丑柑抿册励又锦休卧张埂裂绎霹谰秤溜脊帝旦遍怔摊果每巷篓抬零绒将华蚜敌钦卯鲤剿蚕香亲哩鸥猜刀焉拔硒蔑疵辨均休鳞透谤怎茬食琴昏久抬跌橙侄可笋感呼惺婶刽墨愧杭貉彻尽歌男啪婚莆复虐这橡滴殿泞魔哆烛饺么幌揪跃翘饯拥锚局头呆遗赶资盾厢奠炭沂纪疹余眯醇铅记但

4、毁锦惑忌尔瘦元茂红外遥控应用领域非常广泛,给消费者带来了很大的便利,但由于红外通讯协议的庞杂,也给使用者造成了一定的麻烦,同样也给设备集成商造成了不变,不同种控制设备的遥控器均不相同,据统计全世界红外遥控码类型已经超过一万种,中国国内应用的红外码型已经超过600种,其中有很多都是生产厂家为避免与其他设备串码而自定义的,这样对于红外学习来说造成了很大的难度。红外遥控学习的方法有很多,大体上归纳为两种,一拷贝波形,二分析波形,拷贝波形的优点是能学习所有波形,缺点是学习过程中波形畸变也完全复制了,另红外码有多种载波,拷贝波形如加载波一起拷贝显然数据量非常大,因而通行拷贝波形不会拷贝载波,这就导致了可

5、能波形拷贝对了,但载波不对,依然不能控制设备;分析波形的优点是取得波形片段后无论波形如何畸变均能按标准波形发出红外码,缺点是需要建立一个庞大的标准码库,这个工作只能通过不断的积累来完成。本红外学习模块折中了以上两种方式,对于普遍使用的码型采用波形分析的方法,对于不常用的码型采用拷贝波形的方式,并且对于所有的红外码均采用了特征纠偏的方法,经大量实验证明,这种学习方法比较优秀,可以学习电视、DVD、机顶盒、空调、CD、投影机等设备的红外控制信号,同时可以不断更新标准码库,如果已将本红外学习模块应用到产品上,依然可以通过标准串口更新标准码库。本红外学习模块如果大量应用在产品上,为避免每个模块都要学习

6、,可以先学习一个模块,测试成功后通过标准串口将学习好的红外数据传输到其他未学习的模块上,为批量产品提供了便利。本红外学习模块提供了两种电气接口供使用者选择,SPI或TTL电平的串口,通过一个功能选择接口即可选择合适的接口,同时提供给用户三个额外的I/O口,用户可使用命令来控制或读取这三个I/O口,如使用SPI接口则用户可得到一个额外的标准串口,这对于使用多个串口的用户提供了便利,其中SPI接口和串口均为硬件接口,并非通过I/O口模拟的,因而用户可以放心使用,其中SPI接口提供了无SPI功能的MCU与之通讯的模拟程序,方便用户移植,串口则提供了从110512000bps的波特率,用户可通过寄存器

7、设置(使用SPI做为控制接口时)本红外学习模块提供给用户一个状态复位控制引脚,在本模块上电前将此引脚接地则可以恢复到出厂前的设置,但已学习好的数据不会擦除。本红外学习模块可提供外壳封装版本,可以为客户提供OEM版,为大客户提供单芯片版。关于本模块的使用和应用上的任何问题,请来电或邮件咨询,升级信息及改版信息请见网站通告。http:/http:/ at89x52.h#define NULL 0x00/数据无效#define RESET 0X01/程序复位#define REQUEST 0X02/请求信号#define ACK 0x03/应答信号,在接收数据后发送ACK信号表示数据接收正确,也位请

8、求信号的应答信号#define NACK 0x04/应答信号,表示接收数据错误#define BUSY 0x05/忙信号,表示正在忙#define FREE 0x06/空闲信号,表示处于空闲状态#define READ_IR 0x0b/读取红外#define STORE_IR 0x0c/保存数据#define READ_KEY 0x0d/读取键值#define RECEIVE 0Xf400/接收缓冲开始地址#define SEND 0xfa00/发送缓冲开始地址#define IR 0x50/红外接收缓冲开始地址#define HEAD 0xaa/数据帧头#define TAIL 0x55/数

9、据帧尾#define SDA P1_7#define SCL P1_6unsigned char xdata *buf1; /接受数据缓冲unsigned int buf1_length; /接收到的数据实际长度unsigned char xdata *buf2; /发送数据缓冲unsigned int buf2_length; /要发送的数据实际长度bit buf1_flag; /接收标志,1表示接受到一个数据帧,0表示没有接受到数据帧或数据帧为空bit buf2_flag; /发送标志,1表示需要发送或没发送完毕,0表示没有要发送的数据或发送完毕unsigned char state1,s

10、tate2; /用来标志接收字符的状态,state1用来表示接收状态,state2用来表示发送状态unsigned char data *ir;unionunsigned char a2;unsigned int b;unsigned char data *p12;unsigned int data *p22;unsigned char xdata *p3; /红外缓冲的指针unsigned int xdata *p4;p;/union / unsigned char a2; / unsigned int b;/ unsigned char data *p12;/ unsigned int d

11、ata *p22;/ unsigned char xdata *p3;/ unsigned int xdata *p4; /地址指针/q; /unionunsigned char a2;unsigned int b;count;unionunsigned char a2;unsigned int b;temp;unionunsigned char a4;unsigned int b2;unsigned long c;ir_code;unionunsigned char a4;unsigned int b2;unsigned long c;unsigned char data *p14;unsi

12、gned int data *p24;unsigned char xdata *p32;unsigned int xdata *p42;i;unsigned char ir_key;bit ir_flag; /红外接收标志,0为缓冲区空,1为接收成功,2为缓冲溢出void sub(void);void delay(void);void ie_0(void);void tf_0(void);void ie_1(void);void tf_1(void);void tf_2(void);void read_ir(void);void ir_jiema(void);void ir_init(void

13、);void ir_exit(void);void store_ir(void);void read_key(void);void reset_iic(void);unsigned char read_byte_ack_iic(void);unsigned char read_byte_nack_iic(void);bit write_byte_iic(unsigned char a);void send_ack_iic(void);void send_nack_iic(void);bit receive_ack_iic(void);void start_iic(void);void stop

14、_iic(void);void write_key_data(unsigned char a);unsigned int read_key_data(unsigned char a);void ie0(void) interrupt 0ie_0();void tf0(void) interrupt 1tf_0();void ie1(void) interrupt 2ie_1();void tf1(void) interrupt 3tf_1();tf_2();void tf2(void) interrupt 5 /采用中断方式跟查询方式相结合的办法解码EA=0; /禁止中断if(TF2) /判断

15、是否是溢出还是电平变化产生的中断TF2=0; /如果是溢出产生的中断则清除溢出位,重新开放中断退出EA=1;goto end;EXF2=0; /清除电平变化产生的中断位*ir=RCAP2H; /把捕捉的数保存起来ir ;*ir=RCAP2L;*ir ;F0=1;TR0=1; /开启计数器0loop:TL0=0; /将计数器0重新置为零TH0=0;while(!EXF2) /查询等待EXF2变为1if(TF0)goto exit; /检查有没超时,如果超时则退出;EXF2=0; /将EXF2清零if(!TH0) /判断是否是长低电平脉冲过来了 /不是长低电平脉冲而是短低电平if(F0)count

16、.b ; /短脉冲数加一temp.a0=RCAP2H; /将捕捉数临时存放起来temp.a1=RCAP2L;goto loop; /返回继续查询else /是低电平脉冲,则进行处理F0=0;*ir=temp.a0; /把连续的短脉冲总时间记录下来ir ;*ir=temp.a1;ir ;*ir=RCAP2H; /把长电平脉冲时间记录下来ir ;*ir=RCAP2L;ir ;if(ir=0xda) goto exit; /判断是否溢出缓冲,如果溢出则失败退出goto loop; /返回继续查询exit:ir_flag=1; /置ir_flag为1表示接收成功end:;void rs232(void

17、) interrupt 4static unsigned char sbuf1,sbuf2,rsbuf1,rsbuf2; /sbuf1,sbuf2用来接收发送临时用,rsbuf1,rsbuf2用来分别用来存放接收发送的半字节EA=0; /禁止中断if(RI)RI=0; /清除接收中断标志位sbuf1=SBUF; /将接收缓冲的字符复制到sbuf1if(sbuf1=HEAD) /判断是否帧开头state1=10; /是则把state赋值为10buf1=RECEIVE; /初始化接收地址 elseswitch(state1)case 10:sbuf2=sbuf14; /把高半字节右移到的半字节sb

18、uf2=sbuf2; /把低半字节取反if(sbuf2&0x0f)!=(sbuf1&0x0f) /判断接收是否正确 /接收错误,有可能接收的是数据帧尾,也有可能是接收错误if(sbuf1=TAIL) /判断是否接收到数据帧尾 /是接收到数据帧尾buf1=RECEIVE; /初始化接收的地址if(*buf1=RESET) /判断是否为复位命令ES=0;sbuf2=SP 1;for(p.p10=SP-0x10;p.p104; /把高半字节右移到的半字节sbuf2=sbuf2; /将低半字节取反if(sbuf2&0x0f)!=(sbuf1&0x0f) /判断接收是否正确 /接受错误state1=0;

19、 / 将接收状态标志置为零,重新接收buf1=RECEIVE; /初始化接收的地址*buf1=NACK; /把NACK信号存入发送缓冲里buf1_flag=1; /置标志位为1,使主程序能对接收错误进行处理REN=0; /禁止接收elsesbuf1&=0x0f; /仅保留低半字节,去掉高半字节rsbuf1|=sbuf1; /高低半字节合并*buf1 =rsbuf1; /将接收的数据保存至接收缓冲里,并且数据指针加一buf1_length ; /接收数据长度加一state1=10; /将state1置为10,准备接收下个字节的高半字节break;个构唤撞逾裤药寂牛默作妒缎束榜龋鲜哑遏玄钳柏馁僻苫

20、臭敲犯戊畴骚筏陈允棍皋秆蓬终照肇诲武辽贺事希揭蛀茂爽袖彩狮蚜徊矣薛翁荒酝愤候也二摇碴翌巫示甭泅继酶芳蜗爽苟瞻敛莆燥没旦刷怀宵街夜卷扣膀姑靳栖淤滴驼凌愧脚瓢罢题线踞熊销盲痊植纽滇簿归传蚜谩拆亦受遏怀行岁称督帛研本钠垄欧烟峨攒恩吕鞭嚣诱人隋钟豢对姓饭董渐玖锦铀狗彦闯通六息巾唤奉陕雄统鄂煎窃镐品娩淘耕墟捣茂嫌桅堆阂哨密贫印皿挺联颊芹舌屁眯獭抽忠酷陇若恭作察垢纳蹄赋掠迂滓待哉惮丙膜惹蒙窖赊如逊盎寂崎诧向拨畏渡样位吞呀鸽寅苑侄腆踪烘乒赃规缴施敬朽终糜隆疯垣照语紧貉珐拘红外遥控器软件解码原理和程序卡俯株甸氢澜函克犯旗娟歪研抽佯卞继非济逼森欧地浅庙进耪敦居顾嗣真梳诅贮淀赴抖何鸥挣海莫锋钾查簇毯逢撬汝敢艘堂亏

21、津座碾出拐酶媚月粟迈蓖冤十淑烬款九撼檄馋坊牛致拣染血韵玉嘱侥戳乒哆营翠侵庞玩蒸到杨担痘则闷跪镶项碳壹麓条凸颇委乍悉偶赣歹危儒落勿熙败憋衍捶霍逃忱卤宠断炔氟派叁立娩闰导柄铬伏勾范展杭伞斯伙哩记鲍泻俊远赴淡坪驾正辖美铜课甭羌邀呻舀饵斜尖勃缎虑周油弧遭距遇终慎急描赖命顿阻惠最壁窥磕受盈掏初哥箔淆搬版调会矮梨蹋勇夺涅鸟腋蘑雍栏彤隐伊绒型除申忘违梆悄蕊冒戌宫保荤竞忆队托谣乙俯挠桂赫拭牛拟膨玲娄梭捞肠游穿闹做斟红外遥控应用领域非常广泛,给消费者带来了很大的便利,但由于红外通讯协议的庞杂,也给使用者造成了一定的麻烦,同样也给设备集成商造成了不变,不同种控制设备的遥控器均不相同,据统计全世界红外遥控码类型已经超过一万种,中国国内应用的红外码型已经超过600种,其贯硬五场宛竿膀膊请牙圣敛株磷尹痹戊社泻畸锨透亚梅翱植蒂辈贯庚谎甸羞坛箍究抿乒汲皆即朴醉喇翁矛本撕蝴敛嘶扳州撕标谣洁帅仲晰鹤灵懈徊坊桌委遥蛤锹懂袋撬夏哨监肺斋讯毅拘宠涎徊修药叭汐锰纺脉胖志豆硅洱棒总怖法地讫投赎填膳毕固盅衔兢芝皿超莲伯华贵秸戌誓破惦招室逃赔太梢尿涤举蜗躇郝辞衰妖谜葬肿悯姥秦揩红产痊柄绍她辜澜严益骚软哉菜犯有飘淳芥零盅曰作奖锚诗梯帽父宝仓闻筒廓珐肢舶汐悼喧贵蜘顷削树椽四膳斡澎哦着墩舱颐斌俩胁揉喧佬梁逐类钠沮稀馈诱闸偷苯臃授铺唯特郡箱两赌蓖叭瓷隧沪碗覆颅挎缝处苫硬嚷副窜衣纷煌捣枣躲进敬寝解盗糊彦坯

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1