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

📄 main.c

📁 HS50560-001SP红外线单片机解码程序。。。希望对大家有用
💻 C
字号:
#include <reg52.h>
#include <lcd1602.h>

void DelayA(void);
void DelayB(void);

sbit P32=P3^2;

sbit P00=P0^0;
void main(void)
{
 unsigned int TempCyc;
 InitLCD();
 Write_Instruction(0x01);
// Write_Instruction(0x81);
// Write_Data(0x30);
// InitCom();//初始化串口
 EA=1;//允许CPU中断
 IT0=1;//INT0下降沿有效
 EX0=1;//开INT0中断
 do
 {
  for(TempCyc=0;TempCyc<35000;TempCyc++);
  for(TempCyc=0;TempCyc<30000;TempCyc++);
 }
 while(1);
}

//INT0中断
void INT0FUN(void)interrupt 0 using 2
{
 unsigned char IRCode[2],IROK;
 unsigned int TempCyc,TempCycB,TempCycA;
 EX0=0;//关闭中断0
 IROK=0;
 DelayA();//延时等待引导码的前半部结束
 DelayA();
 if(!P32)//检验前半部是否过早结束,仿干扰
 {
  for(TempCycA=0;TempCycA<2;TempCycA++)
  {
   DelayA();
   if(P32)//检验前半部是否过早,防干扰
   {
	for(TempCyc=0;TempCyc<300;TempCyc++)
	if(!P32)break;//等待第一个位
	if(TempCyc<300)//超时检验
	{
	 for(TempCyc=0;TempCyc<8;TempCyc++)
	 {
	  while(!P32);//等待P32拉高,开始位的下部分
	  DelayB();//这里没社超时,实际应用在多功能的设计时应设超时
	  IRCode[TempCycA]=IRCode[TempCycA]>>1;
	  if(P32)//当延时750us后P32仍为高则当前位为1
	  {
	   IRCode[TempCycA]=IRCode[TempCycA]|0x80;
	   for(TempCycB=0;TempCycB<100;TempCycB++)
	   if(!P32)break;
	   if(TempCycB>99)
	   goto endchk;
	  }
	 }
	}
	else
	  goto endchk;
   }
   else
      goto endchk;
	  IROK++;
  }
 }
 endchk:
   if(IROK==2)
   {
   	 if(IRCode[1]==0x10)//1号键
	 {
//	  P00=~P00;
//	  InitLCD();	 
//	 Write_Instruction(0x01);
//	 Write_Instruction(0x81);
//	 Write_Data(0x30);
	  InitLCD();
 Write_Instruction(0x01);
 Write_Instruction(0x81);
 Write_Data(0x30);
	 }
/*
	 if(IRCode[1]==0x11)//2
//	 P00=~P00;
	 if(IRCode[1]==0x12)//3
//	 P12=~P12;
	 if(IRCode[1]==0x13)//4
//	 P13=~P13;
	 if(IRCode[1]==0x14)//5
//	 P14=~P14;
	 if(IRCode[1]==0x15)//6
//	 P15=~P15;
	 if(IRCode[1]==0x16)//7
//	 P16=~P16;
	 if(IRCode[1]==0x17)//8
//	 P17=~P17;
	 if(IRCode[1]==0x0e)//8
//	 P1=~P1;
				 */
	 for(TempCyc=0;TempCyc<300;TempCyc++)
	 DelayA();
   }
	 EX0=1;
}

void DelayA(void)
{
 unsigned int TempCyc;
 for(TempCyc=0;TempCyc<650;TempCyc++);//3.5
}

void DelayB(void)
{
 unsigned int TempCyc;
 for (TempCyc=0;TempCyc<93;TempCyc++);//0.75ms
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -