📄 wang(c).c
字号:
#include <at89x51.h>
void delay0() //精确延时898微妙
{int i,j;
for(i=0;i<9;i++)
for(j=0;j<11;j++)
{;}
}
void delay1() //精确延时4822微妙
{int i,j;
for(i=0;i<45;i++)
for(j=0;j<12;j++)
{;}
}
void delay2() //精确延时970微妙
{int i,j;
for(i=0;i<9;i++)
for(j=0;j<12;j++)
{;}
}
void interrupt0() interrupt 0 using 2
{ int i,j;bit flag;unsigned char data1=0x00,data2=0x00;//存放数据码
unsigned int code1=0x00,code2=0x00; //存放系统码
EA=0 ; //暂时关闭CPU的所有中断请求
for(i=0;i<9;i++)
{delay0(); //;调用882微秒延时子程序
if(P3_2==1) //;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
goto exit;}
//重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
//;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
while(!P3_2);//毫秒低电平引导脉冲
delay1();//4.74毫秒避开4.5毫秒的结果码
for(j=0;j<26;j++)//;忽略前26位系统识别码
{while(!P3_2);//等待地址码第一位的高电平信号
delay0();//高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
flag=P3_2;//将P3.2引脚此时的电平状态0或1存入C中
if(flag==1)
delay2();//检测到高电平1的话延时1毫秒等待脉冲高电平结束
if(j<=12)
{code1=code1>>1;
if(flag)
code1=code1+0x1000;}
else
{code2=code2>>1;
if(flag)
code2=code2+0x1000;}
}
if((code1!=0x0119)||(code2!=0x1ee6))//识别系统码
goto exit;
for(j=0;j<2;j++)
for(i=0;i<8;i++)
{while(!P3_2);
delay0();
flag=P3_2;
if(flag==1)
delay2();//检测到高电平1的话延时1毫秒等待脉冲高电平结束
if(j==0)
{data1=data1>>1;
if(flag)
data1=data1+0x80;}
else
{data2=data2>>1;
if(flag)
data2=data2+0x80;}
}
if((data1^data2)!=0xff)
goto exit;
P2=data1;//;将按键的键值通过P1口的8个LED显示出来!
P1_0=1;//;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
delay1();
delay1();
delay1();
P1_0=0;//;蜂鸣器停止
exit: EA =1;//允许中断
}
void main()
{ EA=1 ;//打开CPU总中断请求
IT0=1 ;//设定INT0的触发方式为脉冲负边沿触发
EX0=1 ;//打开INT0中断请求
// ;以下对单片机的所有引脚进行初始化,全部设置成高电平
P1=0xfe;
P2=0xff;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -