为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

25 红外线解码

2011-05-29 9页 pdf 404KB 34阅读

用户头像

is_722995

暂无简介

举报
25 红外线解码 慧净电子----做人人都买得起的 PICPICPICPIC单片机开发板------------真诚为你服务,基于 HL-K18HL-K18HL-K18HL-K18 开发板 慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/ 手把手教你学 PIC 单片机 C语言教程 第 25 课...
25 红外线解码
慧净电子----做人人都买得起的 PICPICPICPIC单片机开发板------------真诚为你服务,基于 HL-K18HL-K18HL-K18HL-K18 开发板 慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/ 手把手教你学 PIC 单片机 C语言教程 第 25 课 (红外线解码实验) 参考例程所在位置:HL-K18 配套光盘\ 12 IR LED 1、红外遥控编码 红外遥控编码常用的格式有两种:NEC 和 RC5,由于市场上大多数遥控器(包括 我们配套的红外遥控器)都是 NEC 的,所以我们这里只分析 NEC: NEC 格式的特征: 1:使用 38 kHz 载波频率 2:引导码间隔是 9 ms + 4.5 ms 3:使用 16 位客户代码 4:使用 8 位数据代码和 8 位取反的数据代码 下 面 的 波 形 是 从 红 外 接 收 头 上 得 到 的 波 形 :( 调 制 信 号 转 变 成 高 低 电 平 了 ) 不过需要将波形反转一下才方便分析: 慧净电子----做人人都买得起的 PICPICPICPIC单片机开发板------------真诚为你服务,基于 HL-K18HL-K18HL-K18HL-K18 开发板 慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/ NEC 协议通过脉冲串之间的时间间隔来实现信号的调制(英文简写 PPM)。逻辑 “0”是由 0.56ms 的 38KHZ 载波和 0.560ms 的无 载波间隔组成;逻辑“1” 是由 0.56ms 的 38KHZ 载波和 1.68ms 的无载波间隔组成;结束位是 0.56ms 的 38K 载波。 下面实例是某种遥控器的波形(注意:不是我们配套遥控器的波形,不同遥控器 的主要区别是客户码不一样): 遥控器的识别码是 Address=0xDD20;键值是 Command=0x0E; 慧净电子----做人人都买得起的 PICPICPICPIC单片机开发板------------真诚为你服务,基于 HL-K18HL-K18HL-K18HL-K18 开发板 慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/ 注意波形先是发低位地址再发高位地址。所以 0000,0100,1011,1011 反转过来 就是 1101,1101,0010,000 十六进制的 DD20; 键值波形如下: 也是要将 0111,0000 反转成 0000,1110 得到十六进制的 0E;另外注意 8 位的 键值代码是取反后再发一次的,如图 0111,0000 取反后为 1000,1111。 最后一位是一个逻辑“1”。 2、配套红外遥控器参数 尺寸: 8.5*4.0*0.5cm 键数: 21 键 慧净电子----做人人都买得起的 PICPICPICPIC单片机开发板------------真诚为你服务,基于 HL-K18HL-K18HL-K18HL-K18 开发板 慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/ 按键: PET 薄膜开关 电源: DC3.0V 电池: 1*CR2025 发射/编码: NEC 各键客户码:统一为 BF 00 各键数据码如下: 第 1 行从左到右:00,01,02 第 2 行从左到右:04,05,06 第 3 行从左到右:08,09,0A 第 4 行从左到右:0C,0D,0E 第 5 行从左到右:10,11,12 第 6 行从左到右:14,15,16 第 7 行从左到右:18,19,1A 配套遥控器照片如下,使用前必须将下端的塑料片抽掉: 3、编程和实验结果 在数码管显示解码结果的红外遥控解码程序如下: 解码值在 IR_buff[2]中,当 IrOK=1 时解码有效。 用遥控器对准红外接收头,按下遥控器按键,在数码管后两位上就会显示对应按 键的编码。 开发板设置:S2 的 4 位全部上拨,其余采用出厂默认设置。 实验程序 /******************************************************************** * * * main.c * ********************************************************************* * 描 述: 红外遥控解码程序(数码管显示) * 解码值在 IR_buff[2]中,当 IrOK=1 时解码有效。 * 用遥控器对准红外接收头,按下遥控器按键,在数码管后两位上就会显示对 应按键的编码 * 开发板设置:S2 的 4 位全部上拨,其余采用出厂默认设置。 * 开发平台: HL-K18 开发板+C18 ********************************************************************/ #include /*18F 系列单片机头文件*/ #include "k18.h"/*TOPPIC 开发板头文件*/ #include "delay.h"/*包含延时函数头文件*/ /*此处为晶振为 10 时的取值,如用其它频率的晶振时,要改变相应的取值。*/ 慧净电子----做人人都买得起的 PICPICPICPIC单片机开发板------------真诚为你服务,基于 HL-K18HL-K18HL-K18HL-K18 开发板 慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/ #define Imax 18988 #define Imin 10850 #define Inum1 1967 #define Inum2 949 #define Inum3 4069 unsigned char IR_buff[4]={0x00,0x00,0x00,0x00};/*客户码低 8 位,客户码 高 8位,数据码,数据反码*/ unsigned char show[2]={0,0}; unsigned char flag_start;/*找到启动码标志*/ unsigned long m,Tc; unsigned char IrOK; /*0-F 共阴字形码表*/ const rom unsigned char sz[]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71 }; void display(void); void PIC18F_High_isr(void);/*中断服务函数声明*/ void PIC18F_Low_isr(void); #pragma code high_vector_section=0x8 /*高优先级中断响应时,会自动跳转到 0x8 处*/ /*利用预处理器指令#pragma code 来指定后面的程序在 ROM 中的起始地址为 0x08,*/ /*它是告诉连接器定位到特定的代码段,HIGH_INTERRUPT_VECTOR 是该特定代码 段的段名*/ void high_vector (void) { _asm goto PIC18F_High_isr _endasm/*通过一条跳转指令(汇编指令),跳 转到中断服务函数(中断服务程序)处*/ } #pragma code low_vector_section=0x18 /*低优先级中断响应时,会自动跳转到 0x18 处*/ void low_vector (void) { _asm goto PIC18F_Low_isr _endasm } #pragma code /*这条语句不是多余的,它是告诉连接器回到默认的代码段,*/ 慧净电子----做人人都买得起的 PICPICPICPIC单片机开发板------------真诚为你服务,基于 HL-K18HL-K18HL-K18HL-K18 开发板 慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/ /*如果不加的话,连接器就会傻傻地把后面的代码紧跟着上面的代码一直放下 去。*/ /*而 18f4520.lkr 文件里定义了向量区地址最多到 0x29,所以如果没加此句通 常会报错*/ /*---高优先级中断服务程序---*/ #pragma interrupt PIC18F_High_isr /*利用预处理器指令#pragma interrupt 来声明后面的函数是低优先级中断服务 函数(中断服务程序),*/ /*注意:关键字是 interrupt,和低优先级中断时不同*/ /*一旦指定后面的函数是低优先级中断服务程序,系统在进入该函数时,会自动 保护现场,退出前自动恢复现场,*/ /*同时中断服务程序执行完毕后,会自动返回断点,*/ /*中断服务函数前必须加该语句*/ void PIC18F_High_isr (void) { /*INT1 解码程序*/ /*提取中断时间间隔时长。TMR0 读:先读低字节,后读高字节*/ Tc=TMR0L; Tc=TMR0H*256+Tc; TMR0H=0;/*TMR0 置初值,先写高字节,后写低字节*/ TMR0L=0; INTCON3bits.INT1IF=0;/*INT1 溢出标志清零*/ /*寻找启始码*/ if((Tc>Imin)&&(TcInum1&&Tc>1|0x80; m++;/*取码 1*/ } if(Tc>Inum2&&Tc>1; m++;/*取码 0*/ 慧净电子----做人人都买得起的 PICPICPICPIC单片机开发板------------真诚为你服务,基于 HL-K18HL-K18HL-K18HL-K18 开发板 慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/ } /*取码完成后判断码是否正确*/ if(m==32) { m=0; flag_start=0; if(IR_buff[2]==~IR_buff[3]) { IrOK=1; } else IrOK=0; } } } /*---低优先级中断服务程序---*/ #pragma interruptlow PIC18F_Low_isr /*注意:关键字是 interruptlow,和高优先级中断时不同*/ void PIC18F_Low_isr (void) { } void main(void)/*主程序*/ { RCONbits.IPEN=1; /*使能中断优先级*/ k18_init();/*HL-K18 开发板初始化*/ m=0; flag_start=0; T0CON=0b00000000;/*TMR0 设置:停止运行、16 位定时,预分频 1:2*/ TMR0H=0;/*TMR0 置初值,先写高字节,后写低字节*/ TMR0L=0; T0CONbits.TMR0ON=1;/*启动 TMR0*/ INTCON2bits.INTEDG1=0;/*设定外部中断 1触发边沿(下降沿)*/ INTCON3bits.INT1IP=1;/*设置外部中断 1为高优先级*/ INTCON3bits.INT1IE=1;/*INT1 中断使能*/ INTCONbits.GIE=1;/*全局中断允许*/ while(1) { if(IrOK==1) { 慧净电子----做人人都买得起的 PICPICPICPIC单片机开发板------------真诚为你服务,基于 HL-K18HL-K18HL-K18HL-K18 开发板 慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/ show[0]=IR_buff[2] & 0x0F;//取键码的低四位 show[1]=IR_buff[2] >> 4; //取键码的高四位 IrOK=0; } display();/*在数码管后两位上就会显示对应按键的编码*/ } } /*在数码管后两位上更新数据码*/ void display(void)/*显示函数*/ { unsigned char wwm=0; COL4=0;/*取消千位的位选*/ PORTD=sz[show[0]];/*送出个位的字形码*/ COL1=1;/*个位的位选*/ delayms(2);/*延时*/ wwm=show[0]; PORTD=sz[wwm]; PORTD=sz[0]; PORTD=sz[show[0]];/*送出个位的字形码*/ COL1=1;/*个位的位选*/ delayms(2);/*延时*/ COL1=0;/*取消个位的位选*/ PORTD=sz[show[1]];/*送出十位的字形码*/ COL2=1;/*十位的位选*/ delayms(2);/*延时*/ COL2=0;/*取消十位的位选*/ PORTD=0x00;/*送出百位的字形码*/ COL3=1;/*百位的位选*/ delayms(2);/*延时*/ COL3=0;/*取消百位的位选*/ PORTD=0x00;/*送出千位的字形码*/ COL4=1;/*千位的位选*/ delayms(2);/*延时*/ } 慧净电子----做人人都买得起的 PICPICPICPIC单片机开发板------------真诚为你服务,基于 HL-K18HL-K18HL-K18HL-K18 开发板 慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/ 版权声明:(部分资料图片来源网络) 1、本教程为慧净电子会员整理修改,欢迎网上下载、转载、传播、免费共享给 各位单片机爱好者! 2、该教程可能会存在错误或不当之处,欢迎朋友们指正。 3、未经协商便做出不负责任的恶意评价(中评,差评),视为自动放弃一切售后服 务的权利! 4、我们的产品收入一部分是赠送给慈善机构的,以免影响到你的善心.大家好, 才是真的好(双方好评)。 下面是有缘人看的,谢谢理解 善有善报,恶有恶报,不是不报,时候未到。 从古至今,阴司放过谁,大家得多行善。 行善积德,爱护动物,哪怕小蚂蚁也是生命。 可改变命运,可心想事成,有利保佑子孙后代更昌盛。 学习弟子规,教我们如何做人,看和谐拯救危机,教我们看宇宙。 看为什么不能吃它们,教我们慈悲心,看因果轮回纪录,教我们懂得因果报应。 切勿造恶,种瓜得瓜种豆得豆,一切都有过程,待成熟之时,福德或果报自来找 你。 慧净 2008 年 8 月 8 日
/
本文档为【25 红外线解码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索