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

📄 hwx.c

📁 51的红外线解码程序
💻 C
字号:
/*---------------------------
/*TITLE:   uPD6121
/*AUTHOR:  i-core 
/*DATE:   2004-9-18
/*  

/*---------------------------*/

#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int 

unsigned char datamatrix[32];
unsigned char knum=0;
void delay(void);
void delay1(void);  //882微秒
void delay2(void);  //延时4740微秒
void delay3(void);  //延时1000微秒

void delay(void)
{
	unsigned char i,j,tk;
  for(tk=0;tk<100;tk++)
  {
	for(i=0;i<27;i++)
	for(j=0;j<10;j++)
	{}        
  }
}



void delay1(void)
{
	unsigned char i,j;
	for(i=0;i<24;i++)
	for(j=0;j<10;j++)
	{}
}

void delay2(void)
{
	unsigned char i,j;
	for(i=0;i<72;i++)
	for(j=0;j<20;j++)
	{}
}

void delay3(void)
{
	unsigned char i,j;
	for(i=0;i<27;i++)
	for(j=0;j<10;j++)
	{}
}

void sendcom(uchar a)
{
	SBUF=a;
	while(TI==0);
	TI=0;
}

void outInterrupt(void) interrupt 0  //P3.2脚外部中断子程序,也就是解码程序
{
	unsigned char isdata=1;
	unsigned char i,j,m;

	m=0;
	EA=0;
	for(i=0;i<10&&isdata;i++)     //9000ms初始低电平判断
	{
		delay1();
	/*	#pragma asm
		MOV R4,#20 
		D1: MOV R5,#20
        DJNZ R5,$
        DJNZ R4,D1 
		#pragma endasm*/
		if(P3_2==1) 
		isdata=0;       //
	}
	if(isdata==1)
	{
	while(P3_2==0)      //等待高电平避开9ms低电平引导脉冲
	{}
	delay2();    //4.5ms 
	

	for(i=0;i<4;i++)
		for(j=0;j<8;j++)
	               {
	               	while(P3_2==0)
				              {
				              }
	                        delay1(); 
	                        if(P3_2==1)   //true is 1 else 0
	                                {
	                                datamatrix[m++]=P3_2;                         
	                        	delay3();
	                        	}
	                        	else
	                         	datamatrix[m++]=P3_2;
	                         					
	               }		
         datamatrix[22]=datamatrix[22]<<1; 
         datamatrix[21]=datamatrix[21]<<2;
         datamatrix[20]=datamatrix[20]<<3;
         datamatrix[19]=datamatrix[19]<<4;
         datamatrix[18]=datamatrix[18]<<5; 
         datamatrix[17]=datamatrix[17]<<6;
         datamatrix[16]=datamatrix[16]<<7; 
         datamatrix[16]=datamatrix[16]|datamatrix[17]|datamatrix[18]|datamatrix[19]|datamatrix[20]|datamatrix[21]|datamatrix[22]|datamatrix[23]; 
         if(datamatrix[16]==0x01)
         {
             sendcom(knum);//k1键解码成功!
         }else     

         if(datamatrix[16]==0x81)
         {
             sendcom(knum);//k2
         }else

         if(datamatrix[16]==0x41)
         {
             sendcom(knum);//k3键解码成功!
         }else     
         if(datamatrix[16]==0xC1)
         {
             sendcom(knum);//k4
         }else
         if(datamatrix[16]==0x21)
         {
             sendcom(knum);//k5
         }else 
         if(datamatrix[16]==0xA1)
         {
             sendcom(knum);//k6
         }else                
         
         if(datamatrix[16]==0x61)
         {
             sendcom(knum);//k7键解码成功!
         }else     
         if(datamatrix[16]==0xE1)
         {
             sendcom(knum);//k8
         }else
         if(datamatrix[16]==0x11)
         {
             sendcom(knum);//k9
         }else
         if(datamatrix[16]==0x91)
         {
             sendcom(knum);//k10键解码成功!
         }else     
         if(datamatrix[16]==0x51)
         {
             sendcom(knum);//k11
         }else
         if(datamatrix[16]==0xD1)
         {
             sendcom(knum);//k12
         }else
         if(datamatrix[16]==0x31)
         {
             sendcom(knum);//k13键解码成功!
         }else     
         if(datamatrix[16]==0xB1)
         {
             sendcom(knum);//k14
         }else
         if(datamatrix[16]==0x71)
         {
             sendcom(knum);//k15
         }else
         if(datamatrix[16]==0xF1)
         {
             sendcom(knum);//k16键解码成功!
         }else     
         if(datamatrix[16]==0x09)
         {
             sendcom(knum);//k17
         }else
         if(datamatrix[16]==0x89)
         {
             sendcom(knum);//k18
         }else
         if(datamatrix[16]==0x49)
         {
             sendcom(knum);//k19键解码成功!
         }else     
         if(datamatrix[16]==0xC9)
         {
             sendcom(knum);//k20
         }else
         if(datamatrix[16]==0x29)
         {
             sendcom(knum);//21
         }else
   
         if(datamatrix[16]==0xA9)
         {
             sendcom(knum);//k22
         }else
         if(datamatrix[16]==0x69)
         {
             sendcom(knum);//k23键解码成功!
         }else     
         if(datamatrix[16]==0xE9)
         {
             sendcom(knum);//k24
         }else
         if(datamatrix[16]==0x19)
         {
             sendcom(knum);//k25
         }else
 
         if(datamatrix[16]==0x99)
         {
             sendcom(knum);//k26
         }else
         if(datamatrix[16]==0x59)
         {
             sendcom(knum);//k27键解码成功!
         }else     
         if(datamatrix[16]==0xD9)
         {
             sendcom(knum);//k28
         }else
         if(datamatrix[16]==0x39)
         {
             sendcom(knum);//k29
         }else    
         if(datamatrix[16]==0xB9)
         {
             sendcom(knum);//k30键解码成功!
         }else     
         if(datamatrix[16]==0x79)
         {
             sendcom(knum);//k31
         }else
         if(datamatrix[16]==0xF9)
         {
             sendcom(knum);//k32
         }                
         
         
         
         
         }

	EA=1;  //打开CPU总中断请求
	IT0=1;  //设定INT0的触发方式为脉冲负边沿触发
	EX0=1;   
   	   
}

void main(void)
{
	unsigned char ww;
	//
	TMOD=0x20;
	TL1=0xfd;TH1=0xfd;
	SCON=0xd8;PCON=0x00;
	TR1=1;
	//
 	while(1)
   {	
	P0_2=1;
	knum=0;
	for(ww=0;ww<255;ww++)
	{}
	while(P0_2==1)
	{}
	P0_0=1;
	P0_1=1;
	EA=1;  //打开CPU总中断请求
	IT0=1;  //设定INT0的触发方式为脉冲负边沿触发
	EX0=1; // 打开INT0中断请求
        
        
        P1=0;
        P2=0;
        delay2();
 

   P1=0;
   P2=0;
   delay2();

	
}
}

⌨️ 快捷键说明

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