/*-------------本程序由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的波形仿真的 我感觉用这个做波形的实验和好使