红外遥控器发送数据时,是将二进制数据调制成一系列的脉冲信号红外发射管发射出去,红外载波为频率38khz的方波,红外接收端在收到38khz的载波信号时,会输出低电平,否则输出高电平,从而可以将“时断时续”的红外光信号解调成一定周期的连续方波信号,再经过1838一体化红外接收头解调便可以恢复出原数据信号。如图1所示
图1
红外接收头解调过程如图2所示
图2
解调后的“0”和“1”波形及单片机编码图3、图4所示
图3
图4
图5
了解了红外接收头解调及遥控编码下面就可以对照图5编写编码程序了,图5是遥控按键1的一段实际编码,由9ms低电平4.5ms高电平的启始码,26位系统码,及8位数据码、8位数据反码、23ms高电平及结束码组成。
电路图
实物图
********以下是遥控完整程序********
/********
**项目: 自制红外电视遥控器(ee01学习板演示程序)
**作者:一线工人
**网站:电子工程师之家 www.eehome.cn
**转贴请保持代码的完整性
********/
#include 《reg52.h》
#define uint unsigned int
#define uchar unsigned char
bit irout;//红外管状态
sbit ir=p1^7;//红外发射管控制脚
uint count, set_count;//中断计数,设定中断次数
bit flag,keyflag;//红外发送标志,按键标志位
uchar irsys[4]={0x1a,0xa1,0xdc,0x03};//26位系统码,最后一个字节只用2位
uchar ircode,irdata;
/**********************************************
延时1ms
***********************************************/
void delay(uint z)//延时1ms,晶振22.1184m
{
uint x,y;
for(x=z;x》0;x--)
for(y=225;y》0;y--);
}
/**********************************************
按键扫描
**********************************************/
void keyscan(void)
{
uchar keytemp;
p3=0xff;
keytemp=p3&0x0f;
if(keytemp!=0x0f)
{
delay(20);
keytemp=p3&0x0f;
if(keytemp!=0x0f)
keyflag=1;//有按键标志
switch(keytemp)
{
case 0x0e:irdata=27;break;//按键1对应该遥控器p+的键值
case 0x0d:irdata=26;break;//按键2对应该遥控器p-的键值
case 0x0b:irdata=31;break;//按键3对应该遥控器vol+的键值
case 0x07:irdata=30;break;//按键4对应该遥控器vol-的键值
}
}
}
/*******************************************
发送8位红外数据
*******************************************/
void sendcode_8(void)
{
uchar i;
for(i=0;i《8;i++)
{
set_count=28;//发送0.56ms 38k红外波(编码中的0.56ms低电平)
flag=1;
count=0;
tr0=1;
while(count《set_count);
tr0=0;
if(ircode&0x01)//判断红外编码最低位,1宽的高电平,0窄的高电平
{
set_count=120;
}
else
{
set_count=38;
}
flag=0;
count=0;
tr0=1;
while(count《set_count);
tr0=0;
ircode=ircode》》1;
}
}
/*******************************************
发送2位红外数据
*******************************************/
void sendcode_2(void)//前26位系统码最后两位
{
uchar i;
for(i=0;i《2;i++)
{
set_count=28;
flag=1;
count=0;
tr0=1;
while(count《set_count);
tr0=0;
if(ircode&0x01)
{
set_count=120;
}
else
{
set_count=38;
}
flag=0;
count=0;
tr0=1;
while(count《set_count);
tr0=0;
ircode=ircode》》1;
}
}
/*******************************************
发送红外数据
*******************************************/
void sendcode(void)
{
set_count=575;//发送9ms 38k红外光
flag=1;
count=0;
tr0=1;
while(count《set_count);
tr0=0;
set_count=320;//间隔4.5ms
flag=0;
count=0;
tr0=1;
while(count《set_count);
tr0=0;
ircode=irsys[0];//发送26位系统码的前1-8位
sendcode_8();
ircode=irsys[1];//发送26位系统码的前9-16位
sendcode_8();
ircode=irsys[2];//发送26位系统码的前17-24位
sendcode_8();
ircode=irsys[3];//发送26位系统码的前24-26位
sendcode_2();
ircode=irdata;//发送8位数据码
sendcode_8();
ircode=~irdata; //发送8位数据反码
sendcode_8();
set_count=28;//发送0.56ms 38k红外波(编码中的0.56ms低电平)
flag=1;
count=0;
tr0=1;
while(count《set_count);
tr0=0;
ir=1;
delay(23);//延时23ms(编码中的23ms高电平)
set_count=575;//发送9ms 38k红外波
flag=1;
count=0;
tr0=1;
while(count《set_count);
tr0=0;
set_count=330;//间隔4.5ms
flag=0;
count=0;
tr0=1;
while(count《set_count);
tr0=0;
set_count=30;//发送0.56ms 38k红外波(编码中的0.56ms低电平)
flag=1;
count=0;
tr0=1;
while(count《set_count);
tr0=0;
ir=1;
}
/*******************************************
定时器初始化
*******************************************/
void init_timer()
{
ea=1;
tmod=0x02;//8位自动重载模式
et0=1;
th0=0xe8;//定时13us,38k红外波,晶振22.1184
tl0=0xe8;
}
/*******************************************
主函数
*******************************************/
void main(void)
{
init_timer();
count=0;
flag=0;
irout=1;
while(1)
{
keyscan();
if(keyflag)//若有新按键
{
delay(10);
sendcode();//发送红外编码
delay(500);
keyflag=0;//按键标志清零
}
}
}
/*******************************************
定时器中断
*******************************************/
void timer0(void) interrupt 1
{
count++;
if(flag==1)
{
irout=~irout;
}
else
{
irout=1;
}
ir=irout;
}
***************************************************************************************************
法国“电子2030”计划在意法半导体Crolles工厂举办
英特尔CPU缺货趋缓 MOSFET首季营运将淡季不淡
天线的操作特性和评估技术及设计时需考虑哪些考虑因素
ITD3020: Low-IF tuner IC for
自动驾驶在汽车智能化备受关注,国产AI芯片公司如何乘风破浪?
用AT89S52自制红外电视遥控器
国辰机器人与您相约第二届电力人工智能大会
行业方案|数商云电力设备行业SRM供应商管理解决方案
2009年成都电子展会
助力百度DMA语音功能 Synaptics携手百度带来蓝牙语音升级体验
印度拟调查40家中国光伏企业
黑鲨游戏手机2评测 它就是玩家心中的那台十分纯粹的手游利器
有图为证!iPhone 5已被宣告破解
环形计数器的种类、工作原理及应用特性
为什么说小米是实干家而乐视却是冒险家?
华灿光电宣布改名:中文名称变更为京东方华灿光电
激光焊接与电子束焊接的区别
九阳豆浆机的使用方法_九阳豆浆机常见故障_九阳豆浆机维修电路图
小夜灯解决方案,基于九齐单片机开发
设计可靠性--产品设计的开始