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

📄 hong_jie.c

📁 红外38k发射和接受代码
💻 C
字号:
#include"reg51.h"                              
#include"intrins.h"
//
#define uchar unsigned char
#define uint unsigned int
#define disout P1  //显示输出
//
//
uchar IRCOM[7];
uchar key;
uchar kk,temp;//矩阵按键
uint i,n;
uint s=1;
//


/////////////////////////////
//////////////////////////////
uchar code Photo1[] ={
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0x00,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0xFF,0x1C,0x7C,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0xE3,0x9C,0x7C,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0xC7,0x9E,0xFC,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0F,0x07,0x9E,0xF9,0xF3,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0x67,0x9C,0x59,0xE1,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3C,0xF3,0xC0,0x1B,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x79,0xF0,0xFF,0xFB,0xE3,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,
0x00,0xF1,0xF3,0xFF,0xFF,0x67,0xBC,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,
0x01,0xE3,0xCF,0xE0,0x1F,0xDF,0x9E,0x00,0x00,0x01,0xE0,0x00,0x00,0x1F,0xF0,0x00,
0x01,0xD1,0xDF,0x80,0x07,0xE2,0x0E,0x00,0x00,0x01,0xE0,0x00,0x00,0x1F,0xF0,0x00,
0x03,0xF8,0x3E,0x00,0x01,0xF2,0x07,0x00,0x00,0x01,0xE0,0x80,0x00,0x0F,0xF0,0x00,
0x03,0xFE,0x78,0x00,0xC0,0x79,0xF7,0x00,0x00,0x01,0xE3,0xE0,0x00,0x07,0xC0,0x00,
0x07,0x3E,0xF0,0x00,0xE0,0x3D,0xFF,0x80,0x00,0x01,0xE7,0xE0,0x00,0x07,0x80,0x00,
0x07,0x3D,0xE0,0x00,0xF0,0xFE,0x7B,0x80,0x00,0x03,0xE7,0xE0,0x02,0x07,0x80,0x00,
0x0E,0x3F,0xC0,0x71,0xF9,0xEF,0xF9,0xC0,0x00,0x03,0xE7,0xC0,0x07,0x07,0xFF,0xC0,
0x0E,0x3F,0x80,0x7D,0xFF,0xE7,0xE1,0xC0,0x00,0x03,0xE7,0x80,0x07,0x0F,0xFF,0xC0,
0x0C,0x03,0x80,0x7F,0xFF,0xE7,0x01,0xC0,0x00,0x03,0xF6,0x00,0x07,0x1F,0xFF,0xC0,
0x1C,0x67,0x00,0x7F,0xFF,0xE3,0x98,0xE0,0x00,0x03,0xF0,0xE0,0x0F,0xFF,0x81,0xC0,
0x1C,0x67,0x00,0xFF,0xFF,0xE3,0x88,0xE0,0x00,0x03,0xF3,0xF0,0x0F,0xFF,0x80,0x00,
0x1C,0x06,0x00,0xFF,0xFF,0xE1,0x80,0xE0,0x00,0x07,0xFF,0xF8,0x1F,0xFF,0x80,0x00,
0x19,0xEE,0x00,0x1F,0xFF,0xE1,0xDE,0xE0,0x00,0x0F,0xEF,0xF8,0x1F,0xF7,0xC0,0x00,
0x18,0xEE,0x00,0x7F,0xFF,0xE1,0xDE,0x60,0x00,0x1F,0xFF,0xF0,0x1F,0xCF,0xF0,0x00,
0x19,0xEE,0x07,0xFB,0xFF,0xE1,0xD8,0x60,0x00,0x7F,0xEF,0xE0,0x1F,0x8F,0xF0,0x00,
0x19,0x6E,0x0F,0x83,0xFF,0xC1,0xD0,0x60,0x00,0xFF,0xE7,0xC0,0x1F,0x8F,0xF0,0x00,
0x19,0xEE,0x1E,0x01,0xFF,0xC1,0xDE,0x60,0x03,0xFF,0xEF,0xC0,0x1F,0x06,0x60,0x00,
0x19,0xEE,0x3C,0x01,0xFF,0x81,0xD0,0x60,0x07,0xF7,0xEF,0xE0,0x0F,0x03,0xF0,0x00,
0x19,0x8E,0x7C,0x01,0xFF,0x01,0xDA,0x60,0x07,0xE7,0xFF,0xF0,0x00,0x0F,0xFE,0x00,
0x19,0xEE,0x78,0x01,0xFE,0x01,0xDE,0x60,0x07,0xCF,0xFE,0xFF,0x00,0xFF,0xFE,0x00,
0x1D,0xEE,0x78,0x03,0xFC,0x05,0xDE,0xE0,0x00,0x1F,0xFE,0x7F,0x01,0xE7,0xFE,0x00,
0x1D,0xE7,0x7C,0x07,0xF8,0x0F,0xBE,0xE0,0x00,0x1F,0xFC,0x7F,0x03,0xE7,0xFE,0x00,
0x1C,0xF7,0x7C,0x0F,0xE0,0x1B,0xBE,0xE0,0x00,0x3F,0xF8,0x3F,0x03,0xF7,0xFC,0x00,
0x1C,0xF7,0x7E,0x3F,0x80,0x3B,0x84,0xE0,0x00,0x7F,0xC0,0x00,0x01,0xF7,0xF8,0x00,
0x0E,0xF3,0xFF,0x78,0x00,0xF7,0x7D,0xC0,0x00,0x7B,0xC0,0x00,0x01,0xFF,0xF0,0x00,
0x0E,0xFB,0xFF,0xC0,0x07,0xEF,0x79,0xC0,0x00,0x77,0xC0,0x00,0x01,0xFF,0xE0,0x00,
0x0E,0x7D,0xFF,0xFF,0xFF,0xCE,0xF9,0xC0,0x00,0x07,0xC0,0x00,0x00,0xFF,0xE0,0x00,
0x07,0x7D,0xEF,0xFF,0xFF,0x1E,0xFB,0x80,0x00,0x07,0xC0,0x00,0x00,0xFF,0xC0,0x00,
0x07,0x6E,0xF7,0xFF,0xFC,0x3D,0xFB,0x80,0x00,0x07,0xC0,0x00,0x00,0x7B,0xFF,0x00,
0x03,0xBF,0x79,0xFF,0xE0,0x78,0xF7,0x00,0x00,0x07,0xC0,0x00,0x00,0x01,0xFF,0x00,
0x03,0xDF,0x3E,0x00,0x01,0xF3,0xEF,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xFF,0x00,
0x01,0xCF,0x9F,0x80,0x07,0xE7,0xEE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,
0x01,0xE7,0xC7,0xF0,0x3F,0x8F,0x9E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,
0x00,0xF7,0xE1,0xFF,0xFE,0x3F,0xBC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7B,0xF8,0x7F,0xF8,0x7F,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3C,0xFB,0x00,0x01,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0xF7,0xE0,0x0C,0xF9,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0F,0x07,0xEF,0xFC,0xE3,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0xC7,0xFF,0xB6,0x2F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0xF2,0xFF,0xBE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFC,0x36,0xF8,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0x80,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
sbit IRIN = P3^2;         //红外接收器数据线
/*12864 pins define*/ 
sbit CS=P1^0; 
sbit SID=P1^1; 
sbit SCLK=P1^2; 

uchar IRCOM[7];

//全局变量
uchar   key;


void delay0(uchar x)    //x*0.14MS	  
{
  uchar i;
  while(x--)
 {
  for (i = 0; i<13; i++) {}
 }
}




void delay(uint x) 
{ 
uint j; 
uchar i; 
for(j=0;j<x;j++) 
{ 
for(i=0;i<120;i++); 
} 
}

 void lcd_delay(int ms)
{
    while(ms--)
	{
      uchar i;
	  for(i=0;i<250;i++)  
	   {
	    _nop_();			   
		_nop_();
		_nop_();
		_nop_();
	   }
	}
}



void send_command(uchar command_data) 
{ 
uchar i; 
uchar i_data,temp_data1,temp_data2; 
i_data=0xf8; 
//delay(10); 
CS=1; 
SCLK=0; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
i_data=command_data; 
i_data&=0xf0; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
i_data=command_data; 
temp_data1=i_data&0xf0; 
temp_data2=i_data&0x0f; 
temp_data1>>=4; 
temp_data2<<=4; 
i_data=temp_data1|temp_data2; 
i_data&=0xf0; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
CS=0; 
} 

void send_data(uchar command_data) 
{ 
uchar i; 
uchar i_data,temp_data1,temp_data2; 
i_data=0xfa; 
//delay(10); //原来是delay(10)
CS=1; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
i_data=command_data; 
i_data&=0xf0; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
i_data=command_data; 
temp_data1=i_data&0xf0; 
temp_data2=i_data&0x0f; 
temp_data1>>=4; 
temp_data2<<=4; 
i_data=temp_data1|temp_data2; 
i_data&=0xf0; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
CS=0; 
}

void lcd_init() 
{ 
uchar command_data; 
delay(100); 
command_data=0x30; 
send_command(command_data); /*功能设置:一次送8位数据,基本指令集*/ 
command_data=0x04; 
send_command(command_data); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/ 
command_data=0x0c; 
send_command(command_data); /*显示设定:开显示,显示光标,当前显示位反白闪动*/ 
command_data=0x01; 
send_command(command_data); /*清DDRAM*/ 
command_data=0x02; 
send_command(command_data); /*DDRAM地址归位*/ 
command_data=0x80; 
send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/ 
}






 /*********************************************************/
/*                                                       */
/* 设定显示位置                                          */
/*                                                       */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{                          
   uchar  pos;
   if (X==1)
     {X=0x80;}
   else if (X==2)
     {X=0x90;}
   else if (X==3)
     {X=0x88;}
   else if (X==4)
     {X=0x98;}
   pos = X+Y ; 
 
   send_command(pos);     //显示地址
}

/*********************************************************
*                                                        *
* 图形显示                                               *
*                                                        *
*********************************************************/
void photodisplay(uchar *bmp)	
{ 
  uchar i,j;

  send_command(0x34);        //写数据时,关闭图形显示

  for(i=0;i<32;i++)
  {
    send_command(0x80+i);    //先写入水平坐标值
    send_command(0x80);      //写入垂直坐标值
    for(j=0;j<16;j++)   //再写入两个8位元的数据    
    send_data(*bmp++);     
   // delay(1);
  }

  for(i=0;i<32;i++)
  { 
    send_command(0x80+i);
    send_command(0x88);
    for(j=0;j<16;j++)         
	send_data(*bmp++);    
//	delay(1);
  }
  send_command(0x36);       //写完数据,开图形显示 
}


/*****************1ms延时程序****************/
delay1ms(uint t)
{
	for(i=0;i<t;i++)
		for(n=0;n<120;n++)
			;
}
//
/************100us延时程序********************/
delay_jingque(uint m)
{
	TMOD=0x22;
	TR0=1;
	while(m!=0)
	{
		TH0=0x9b;
		TL0=0x9b;
		while(TF0!=1);
		TF0=0;
		m--;
	}
	TR0=0;
}
//
/*****************初始化函数******************/

/********************主函数**************************/
/*main()
{
	IE = 0x81;                 //允许总中断中断,使能 INT0 外部中断
    TCON = 0x01;               //触发方式为脉冲负边沿触发
	clearmen();
	while(1);
}	 */
/****************外部中断0中断服务程序*********************/
void IR_IN() interrupt 0 using 0
{
	unsigned char j,k,N=0;
    EX0 = 0;   
	delay_jingque(15);
	if (IRIN==1) 
    { 
		EX0 =1;
	    return;
	} 
                           //确认IR信号出现
	while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
    {delay_jingque(1);}

 	for (j=0;j<4;j++)         //收集四组数据
    { 
    	for (k=0;k<8;k++)        //每组数据有8位
    	{
         	while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
         	{delay_jingque(1);}
         	while (!IRIN)          //等 IR 变为高电平
         	{delay_jingque(1);}
         	while (IRIN)           //计算IR高电平时长
         	{
    	    	delay_jingque(1);
                N++;           
                if (N>=28)
	            { 
					EX0=1;
	                return;
				}                  //0.1ms计数过长自动离开(超过2.8ms)。
            }                        //高电平计数完毕                
            IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
            if (N>=12) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
            N=0;                                  //1.2ms~2.8ms算作"1"
		}//end for k
	}//end for j
    if (IRCOM[2]!=~IRCOM[3])
    { 
		EX0=1;
        return;
	}
    IRCOM[5]=IRCOM[2] & 0x0F;     //取键码的低四位
    IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位变为低四位
    if(IRCOM[6]==8)
    {
		key=IRCOM[5]+1;
    }  //解码后判断的键值1~16
	if(IRCOM[6]==9)
	{ 
		key=IRCOM[5]+17;
	} //解码后判断的键值17~32

	 lcd_pos(2,2);	
	send_data(0x30+key/10);
	send_data(0x30+key%10) ;

	EX0=1;
}

 //矩阵按键程序
void keyscan()
{
	P0=0xfe;
	temp=P0;
	temp&=0xf0;
	if(temp!=0xf0)
	{
		delay(20);
		switch(temp)
		{
			case 0xe0: kk=0;break;
			case 0xd0: kk=1;break;
			case 0xb0: kk=2;break;
			case 0x70: kk=3;break;

		} 		
	}
	P0=0xfd;
	temp=P0;
	temp&=0xf0;
	if(temp!=0xf0)
	{
		delay(20);
		switch(temp)
		{
			case 0xe0: kk=4;break;
			case 0xd0: kk=5;break;
			case 0xb0: kk=6;break;
			case 0x70: kk=7;break;

		} 		
	}
    P0=0xfb;
	temp=P0;
	temp&=0xf0;
	if(temp!=0xf0)
	{
		delay(20);
		switch(temp)
		{
			case 0xe0: kk=8;break;
			case 0xd0: kk=9;break;
			case 0xb0: kk=10;break;
			case 0x70: kk=11;break;

		} 		
	}
	P0=0xf7;
	temp=P0;
	temp&=0xf0;
	if(temp!=0xf0)
	{
		delay(20);
		switch(temp)
		{
			case 0xe0: kk=12;break;
			case 0xd0: kk=13;break;
			case 0xb0: kk=14;break;
			case 0x70: kk=15;break;

		} 		
	}
	 



}
 main() 
{ 
	uchar command_data; 
	uchar i;
   EA=1;
   EX0=1;
   IT0=1;
   IRIN=1;                    //I/O口初始化         	
   lcd_init(); 
   send_command(0x01);
  //photodisplay(Photo1);     //显示图片1
  //lcdflag();
  //send_command(0x80);
  //send_data(0xa1);
  //send_data(0xf8); 
  //delay(1000);
  //send_command(0x80);
 // send_command(0x00); 
 	while(1)
 	{
	keyscan();
	 	//lcd_pos(2,2);	
	 //	send_data(0x30+key/10);
	//	send_data(0x30+key%10) ;
	
		
	}
  

	  
  
  
    
}

//
//
/**********************************END************************************/

⌨️ 快捷键说明

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