红外遥控学习机的设计

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

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

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

3 、系统硬件设计

使用 89C 52 单片机 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 )向 24c 02 中写数据

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

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

( 4 )读 24c 02 中写数据

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

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

( 5 )延时程序

用于键盘的消抖操作

5 、主程序

// 主函数

void main()

{

clearmen();// 初始化

while(1)

{

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

}

}

学习按键是外部中断 0

发射编码的时候用的是定时 0 中断


哎呀,环球小编暂时没收集到学习机相关的品牌排行,可以看看右侧信息,有很多与《红外遥控学习机的设计》相关的资讯