📄 yaokong.c
字号:
#include <REGX51.H>
#define Uchar unsigned char
sbit IR_P=P3^2; //遥控器中断入口
Uchar Code_Dat[4]={0,0,0,0};
Uchar temp=0x00;
void Code_Delay(void) //基准
{
unsigned char i=50;
while(--i);
}
//外部中断0
void INT_0() interrupt 0 using 2
{
Uchar i,j=32,k=0;
EX0=0;
//检测低电平
i=100;
while(i--) //测量是否为起始信号
{
Code_Delay();
k++;
if(IR_P) break; //如果出现高电平,则退出
}
if(k<0x22) {EX0=1; return ;} //一般为0x23,为了保险取0x22,非起始信号,退出解码
//检测高电平
k=0;i=100;
while(i--)
{
Code_Delay();
k++;
if(!IR_P) break; //如果出现低电平,则退出
}
if(k<0x22) {EX0=1; return ;} //一般为0x22,小于0x22则是非起始信号,退出解码
//进行32位解码
for(j=0;j<32;j++)
{
Code_Delay();
temp>>=1;
k=0;i=100;
while(!IR_P); //低电平,等待
while(i--) //测量高电平
{
Code_Delay();
k++;
if(!IR_P) break; //如果出现低电平则退出
}
if(k>0x0E) {EX0=1; return ;} //非正常编码,则退出解码
if(k>0x05) temp|=0x80;
if(j==7) {Code_Dat[0]=temp;temp=0x00;}
if(j==15) {Code_Dat[1]=temp;temp=0x00;}
if(j==23) {Code_Dat[2]=temp;temp=0x00;}
if(j==31) {Code_Dat[3]=temp;temp=0x00;}
}
P2=Code_Dat[2];
P0=Code_Dat[3];
//解码完毕
EX0=1;return;
}
main()
{
EA=1; //打开CPU总中断请求
IT0=1; //设定INT0的触发方式为脉冲负边沿触发
EX0=1; //打开INT0中断请求
P0=0xFF;
P1=0xFF;
P2=0xFF;
P3=0xFF;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -