⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yaokong.c

📁 红外解码的一个程序
💻 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 + -