找回密码
 注册会员
搜索附件  
MCU资讯论坛 附件中心 单片机论坛 51单片机论坛 5_69259_fb9b1ae3d013ffc.gif

5_69259_fb9b1ae3d013ffc.gif

 

自制红外遥控器(2):
/*-------------本程序由GAQ制作-----------24m晶振---*/
/*----------------QQ472666316---------------------*/
/*--------------saa3010和sc3010飞利浦解码---------*/
/*-----------------------------------------------*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit ir=P1^7; //红外端
sbit ledcs=P1^6; // led的片选
sbit bm=P1^4;
sbit wm=P1^5;
bit irout;
bit wflage;
bit flage,keyflage;
uchar irdate,count,set_count=62;//时间是62~~65时间设置的越长灵敏低


void delayms(uchar gaq) //延时10ms
{
uchar j,k,a;
for(a=gaq;a>0;a--)
for(j=200;j>0;j--)
for(k=255;k>0;k--);
}


void init_time0()
{
TMOD=0x02;
TH0=0xE6;
TL0=0xE6;
ET0=1;
EA=1;
}


/*----------------------------------------------*/
/*------------------saa3010的位0-----------------*/
/*----------------------------------------------*/

void bit0()
{
flage=1;
count=0;
TL0=TH0;
TR0=1;
while(count<set_count);
TR0=0;
flage=~flage;
count=0;
TL0=TH0;
TR0=1;
while(count<set_count);
TR0=0;
}
/*----------------------------------------------*/
/*------------------saa3010的位1-----------------*/
/*----------------------------------------------*/
void bit1()
{
flage=0;
count=0;
TL0=TH0;
TR0=1;
while(count<set_count);
TR0=0;
flage=~flage;
count=0;
TL0=TH0;
TR0=1;
while(count<set_count);
TR0=0;
}

/*----------------------------------------------*/
/*------------------saa3010的起始位2个----------*/
/*----------------------------------------------*/


void start_2()
{
bit1();
bit1();

}

/*----------------------------------------------*/
/*------------------saa3010的控制位 1位---------*/
/*----------------------------------------------*/

void control_1()
{
wflage=~wflage;
if(wflage)
bit1();
else
bit0();
}

/*----------------------------------------------*/
/*------------------系统码5位全是0--------------*/
/*----------------------------------------------*/
void system_5()
{
uchar i;
for(i=0;i<5;i++)
{
bit0();
}

}


/*----------------------------------------------*/
/*------------------指令码6位-----------------*/
/*----------------------------------------------*/
void command_6()
{
uchar i;
irdate<<=2;
for(i=0;i<6;i++)
{
if(irdate&0x80)
{
bit1();
}
else
{
bit0();
}
irdate<<=1;
}
ir=1;
}

/*----------------------------------------------*/
/*------------------按键扫描程序-----------------*/
/*----------------------------------------------*/
void keyscan()
{
uchar keytemp;
P3=0xff;
keytemp=P3&0x0f;
if(keytemp!=0x0f)
{
delayms(2); //延时10ms
keytemp=P3&0x0f;
if(keytemp!=0x0f)
keyflage=1; //有按键标志
switch(keytemp)
{
case 0x0e:irdate=32;P0=1;break;//按键1对应该遥控器P+的键值
case 0x0d:irdate=33;P0=2;break;//按键2对应该遥控器P-的键值
case 0x0b:irdate=16;P0=3;break;//按键3对应该遥控器VOL+的键值
case 0x07:irdate=17;P0=4;break;//按键4对应该遥控器VOL-的键值
}
}
}


void main()
{
ledcs=1;
bm=0;
wm=0;
irout=1;
init_time0(); //设置定时器产生38khz
while(1)
{
keyscan();
if(keyflage==1)
{
start_2();
control_1();
system_5();
command_6();
keyflage=0;
}
}

}

/*----------------------------------------------*/
/*----------------产生38khz的载波频率-----------*/
/*----------------------------------------------*/
void time0() interrupt 1 using 1
{
count++;
if(flage==1)
irout=~irout;
else
irout=1;
ir=irout;
}

我这是用keil3的波形仿真的 我感觉用这个做波形的实验和好使




5_69259_fb9b1ae3d013ffc.gif

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-31 06:34 , Processed in 0.038700 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部