📄 decode.bak
字号:
/*12MHz晶振*/
#include "at89x52.h"
#define uchar unsigned char
#define uint unsigned int
sbit beep=P3^7;
sbit inf=P3^3;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;
sbit led9=P0^0;
unsigned char rec=0;
unsigned char data1[110]={0};
unsigned char k=0,n=0;
uchar key_code=0;/*key_code:遥控*/
uint buf_key_code=0;/*键值暂存对应功能看主函数*/
uchar key_bit_count=0;/*键编码脉冲计数*/
uint count_T=0,buf_CT=0;/*count_T:定时器中断次数计数,buf_CT用来截获某一时间的count_T值以供判断*/
uchar common_code_count=0;/*前导码脉冲计数*/
uchar inf_status=0;/*inf_status:脉冲接收器所处的状态,0:无信号,1:前导码接收区,2:数据编码接收区*/
uchar startkey=0; //the number of startkey;
uchar codedata[12];
uchar n;
uchar frag=1;
void UART_START(void)
{
EA=0;
ES=1;
ET1=0;
SCON=0X50;
TMOD|=0X20;
PCON=0X80;
TL1=0xf3;
TH1=0Xf3;
TR1=1;
EA=1;
}
void uart_int(void) interrupt SIO_VECTOR
{
RI=0;
rec=SBUF;
}
void Putchar(a)
{
SBUF=a;
while(!TI);
TI=0;
}
void delay10us(uint t)
{
while(t--);
}
void delayms(uint t)
{
uint i;
uchar j;
for(i=0;i<t;i++)
for(j=125;j>0;j--);
}
void main()
{
EA=1; //开全局中断
ET0=1; //开定时器0中断
TMOD=0x02;//T0设置为8位自动装载模式
TH0=0xCE; //自动装载值为202,中断间隔为50us
TL0=0xCE; //初值为202
IT1=1; //INT1为下降沿触发
EX1=1; //开外部中断
// TR0=1; //启动定时器计数
UART_START();
count_T=0;
while(1)
{
}
}
void Time0(void) interrupt 1
{
count_T++;//周期累加
//如果外部中断处于无信号区,则滤除前导宽脉冲中间的跳变毛刺
/* if(inf_status==0&&count_T<160)
{
EX1=0;
}
//如果外部中断处于信号区,则滤除宽脉冲中间的跳变毛刺
else if(inf_status==1&&count_T<12)
{
EX1=0;
}
//渡过上升沿后重新开放外部中断
else
{
EX1=1;
}*/
//超过25ms,则锁定count_T值,等待下一次信号脉冲下降沿来解开
if(count_T>1000)
{
inf_status=0;
count_T=0;
}
}
/***************************************************************
外部中断1,用于捕获红外脉冲信号
****************************************************************/
void int_1(void) interrupt 2
{ unsigned char i;
// led1=~led1;
buf_CT=count_T;
TR0=1;
count_T=0;
if((buf_CT>15)&&(buf_CT<120))//若收到的信号合法,则再进行以下的信号分析
{
if(inf_status==0)//若当前信号接收系统处于空闲状态,则标志进入前导码接收区
{
if((buf_CT>60)&&(buf_CT<120))
{
startkey++;
if(startkey>=3)
{// led3=0 ;
inf_status=1;//标志进入数据接收区
buf_key_code=0;
key_bit_count=0;
buf_CT=0;
startkey=0;
}
if( ( (buf_CT>15)&&(buf_CT<25) ) || ( (buf_CT>32)&&(buf_CT<45) ) )
startkey=0;
}
}
else if(inf_status==1)//数据接收区
{
if((buf_CT>70)&&(buf_CT<90))
{
key_bit_count=0;
}
if((buf_CT>15)&&(buf_CT<25))
{// led3=0;
codedata[key_bit_count]=0;
key_bit_count++;//数据脉冲数累加,一共有8
}
else if((buf_CT>32)&&(buf_CT<45))
{
codedata[key_bit_count]=1;
key_bit_count++;//数据脉冲数累加,一共有8
}
if(key_bit_count==12&&codedata[0]==0&&codedata[1]==1&&codedata[2]==0&&codedata[3]==1)
{
for(i=4;i<12;i++)
{ buf_key_code>>=1;
buf_key_code=buf_key_code | (codedata[i]<<7);
}
led9=0;
data1[k]=buf_key_code ;
k++;
if(k>=100)
{
for(n=0;i<100;n++)
{
Putchar(data1[n]);
}
}
inf_status=0;//标志接收系统返回空闲状态
key_bit_count=0;
key_code=buf_key_code;
buf_key_code=0;
TR0=0;
}
/* else if(inf_status==1)//数据接收区
{
if((buf_CT>15)&&(buf_CT<25))//窄脉冲接收
{
buf_key_code>>=1;//接收0
key_bit_count++;
}
else if((buf_CT>32)&&(buf_CT<45))//宽脉冲接收
{
buf_key_code>>=1;
buf_key_code|=0x80;//接收1
key_bit_count++;//数据脉冲数累加,一共有8个
}
if(key_bit_count>7)//若收完8位个数据脉冲,则进行以下的处理
{
P1=buf_key_code;
led9=0;
inf_status=0;//标志接收系统返回空闲状态
key_bit_count=0;
key_code=buf_key_code;
buf_key_code=0;
TR0=0;
} */
}
buf_CT=0;
}
EA=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -