新闻  |   论坛  |   博客  |   在线研讨会
红外遥控学习机的设计
bpshui | 2013-04-23 20:23:48    阅读:1881   发布文章

作者:宇帆 cfanlwn

 

项目中要用到红外遥控,要先学习遥控器的编码,然后在发出去,也就是万能遥控器的功能,想着很麻烦,就在淘宝上买了个万能遥控器,想回来改装,买回来了,发现一改装,咋看咋不专业,客户肯定不满意,跟拼凑别人的产品似的,算了,还是自己整吧,嘿嘿,不说废话了,还是看我咋做的红外遥控学习机的吧

1 、功能:利用单键学习型遥控器可以学习任何遥控器的某种按键功能,编码保存在 24C02 中,保证掉电之后,编码不丢失

2 、使用方法:按下学习键,学习灯亮,用遥控器对准红外遥控接收头,学习完成之后,学习灯熄灭,状态等亮,说明可以发射了,按发射键,就可以发射学习到的编码

3 、系统硬件设计

使用 89C52 单片机 12M晶振

sbit studylamp=P2^7;    // 学习指示灯       

sbit lamp=P2^6;         // 状态指示灯          

sbit studykey=P3^2;     // 学习键      (外部中断)   

sbit remotein=P1^1;      // 信号输入       

sbit remoteout=P1^0;     // 信号输出      

sbit txkey=P0^0;          // 发射键            

4 、软件设计

( 1 )初始化

studylamp=1;   // 学习灯不亮                

   lamp=1;        // 发射灯不亮                 

   remoteout=0;   // 关遥控输出                    

   remotein=1;        // 输入位

       IE=0x00;// 关闭中断

       IP=0x01;// 设定优先级 外部中断优先级高

       TMOD=0x22; // 定时器控制寄存器设置串口工作方式   模式 2 自动装入计数器

       TH0=0xf3; // 设定定时器 1 初值        40KHZ 初值

       TL0=0xf3;

       PCON=0x00;// 设定串口 波特率不加倍

       IT0=1;// 外部中断   脉冲触发 边沿触发

       EX0=1;// 允许外部中断 0

       EA=1; // 打开总中断

  ( 2 )学习功能

学习功能的程序可以完成遥控编码的起始位识别、遥控码的宽度计数功能、结束位的识别功能,遥控码的帧间歇位宽度在 10MS 以上,起始位码宽度在 100us----20ms 之间,编码位在 100us-------5ms 之间

确定起始位:高电平宽度超过 5.355ms ,接着是低电平码,就是起始位

读遥控编码:对高电平或者低电平进行脉宽计数,点评掉变的时候计数计数,将计数值保存,确定结束位:在高电平计数,如果超过 5.355ms ,则判断为结束帧位,写入 0x00 作为结束标志

( 3 )编码发射

遥控码发送处理程序利用计数器计数中断功能,实现 40KHz 载波的发送,利用接收的电平时间,控制载波的发送时间

( 4 )向 24c02 中写数据

void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)

参数:要写入的数据、要写入的地址、要写入的数据的个数

( 4 )读 24c02 中写数据

void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)

参数:读出来的数据要存放的地址、要读的地址、要读的数据的个数

( 5 )延时程序

用于键盘的消抖操作

5 、主程序

// 主函数

void main()

{

     clearmen();// 初始化

       while(1)

       {

              key_tx();      // 发射按键扫描

       }

}

学习按键是外部中断 0      发射编码的时候用的是定时 0 中断

 

全文完(转载)!

 

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
电子设计应用群(181263624)
推荐文章
最近访客