虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

您现在的位置是:虫虫下载站 > 资源下载 > 嵌入式综合 > 红外遥控RGB

红外遥控RGB

  • 资源大小:10 K
  • 上传时间: 2016-07-02
  • 上传用户:184890962
  • 资源积分:2 下载积分
  • 标      签: RGB 红外遥控

资 源 简 介

#include "STC90.h"
#include < intrins.h >
#define uchar unsigned char
#define uint  unsigned int
#define led_port P1

sbit IR_RE = P3^2;
sbit led_r = P1^3;
sbit led_g = P1^4;
sbit led_b = P1^5;
sbit led_wd = P1^7;


sbit  K1 =P3^0 ;                           //增加键
sbit  K2 =P3^1 ;                           //减少键
sbit  BEEP =P3^7 ;                         //蜂鸣器
uchar temp,temp1;
bit k=0;                                   //红外解码判断标志位,为0则为有效信号,为1则为无效
bit Flag2;
uchar date[4]={0,0,0,0};                   //date数组为存放地址原码,反码,数据原码,反码
uint lade_1,lade_2,lade_3,lade_4;
uint num;
uchar date_ram,ee_temp,ee_temp1;
uchar WDT_NUM=0;

uchar const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值01234567
uchar code seg[]={7,6,5,4,3,2,1,0};//分别对应相应的数码管点亮,即位码
unsigned long disp_date;


void fade();
void fade1();
/*************************** 看门狗子程序*************************/
void watchdog_timer()
{
 if(WDT_NUM==5)
 	{
	 WDT_NUM=0;
	 led_wd=!led_wd;  
	}
	WDT_NUM++;
	WDT_CONTR=0x3f; 
}
/******************************************************************/
void delay(unsigned int cnt) 
{ 
while(--cnt); 
} 

/*--------------------------延时1ms程子程序-----------------------*/
void delay_1ms(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
 	for(y=126;y>0;y--);
}

/*--------------------------延时1ms程子程序-----------------------*/
delay1000()             
{
	uchar i,j;
	i=5;
	do{j=95;
		do{j--;}
		while(j);
		i--;
	  }
	while(i);
}
/*---------------------------延时882us子程序-----------------------*/
delay882()
{
uchar i,j;
i=6;
do{j=71;
  do{j--;}
  while(j);
  i--;
  }while(i);
}
/*--------------------------延时2400us程子程序-----------------------*/
delay2400()                                          
{
uchar i,j;
i=5;
do{j=237;
  do{j--;}
  while(j);
  i--;
  }while(i);
}

/**********************************************************************/
/*
void display()
{
 uchar i;
 for(i=0;i<8;i++)
 	{
	 P0=dofly[disp_date%10];//取显示数据,段码
     P2=seg[i];  //取位码
	 delay_1ms(1);
	 disp_date/=10;
	}
}
*/
/*********************************************************************/

uchar EEPROM_read(uint addr)//EEPROM字节读
{
       ISP_CONTR=0x83;		   //系统时钟<12M时,对ISP_CONTR寄存器设置的值,本电路为11.0592M
       ISP_CMD=1;			   //字节读
	   ISP_ADDRH=(addr&0xff00)>>8;
       ISP_ADDRL=addr&0x00ff;
       ISP_TRIG=0x46;
       ISP_TRIG=0xb9;	   
       _nop_();
       _nop_();

       return ISP_DATA;
}
//--------------------------------------------------------------------
void EEPROM_write(uint addr,uchar dat)//EEPROM字节写
{
       ISP_CONTR=0x83;		  //系统时钟<12M时,对ISP_CONTR寄存器设置的值,本电路为11.0592M
       ISP_CMD=2;			  //字节编程 
       ISP_ADDRH=(addr&0xff00)>>8;
       ISP_ADDRL=addr&0x00ff;
	   ISP_DATA=dat;
       ISP_TRIG=0x46;
       ISP_TRIG=0xb9;
	   _nop_();
	   _nop_();
}
//--------------------------------------------------------------------

void EEPROM_ERASE(uint addr)//EEPROM扇区擦除
{
      
       ISP_CONTR=0x83;			//系统时钟<12M时,对ISP_CONTR寄存器设置的值,本电路为11.0592M
       ISP_CMD=3;			    //扇区擦除 
	   ISP_ADDRH=(addr&0xff00)>>8;
       ISP_ADDRL=addr&0x00ff;
       ISP_TRIG=0x46;
       ISP_TRIG=0xb9;
	   _nop_();
	   _nop_();
}

//**************************************************************
/*----------------------------------------------------------*/
/*-----------------------红外解码程序(核心)-----------------*/
/*----------------------------------------------------------*/
void IR_decode()
{
      uchar i,j;
      while(IR_RE==0);
      delay2400();
      if(IR_RE==1)                                       //延时2.4ms后如果是高电平则是新码
      {
          delay1000();
          delay1000();

      for(i=0;i<4;i++)
      {
        for(j=0;j<8;j++)
        {
               while(IR_RE==0);                            //等待地址码第1位高电平到来
               delay882();                                 //延时882us判断此时引脚电平
         ///CY=IR_RE;
               if(IR_RE==0)
               {       
         date[i]>>=1;
         date[i]=date[i]|0x00;     
               }
               else if(IR_RE==1)
         {
         delay1000();
         date[i]>>=1;
         date[i]=date[i]|0x80;
         }
      }                                                  //1位数据接收结束
         }                                               //32位二进制码接收结束
       } 
}

/*
void LED_PWM()
{
	 lade_2=num;   //384
	 lade_4=num;   //384
	 while(lade_2!=0&Flag2==1)
	 	{ 
		 for(lade_3=512;lade_3>lade_4;lade_3--)		
		          //512
		 	{
			 led_port=0x00;
			 delay(1);	 
			 }
			 lade_3=512;   //512
			 lade_4--;
	
		 for(lade_1=0;lade_1<lade_2;lade_1++)
		 	{
			 led_port=0x38;	 //c7
			 delay(1);	 
			 }
			 lade_1=0;
			 lade_2--;
			 
			 if(temp!=0x0c&Flag2==1)
				 	{
					 lade_2=0;
					}
			  

	 lade_2=num;	  //384
	 lade_4=num;	  //384
	}
}
*/
void calc()
{
	EEPROM_read(0x2000);
 	ee_temp1=ISP_DATA;

 	ee_temp=ee_temp1&0x0f;

//*************************************  1
/*
 	if(date[3]==0xff&Flag2==1)
		{
		 if(num>=20)
		 	{
			 num=num-80;
			}
		 //else num=1;
		 LED_PWM();
		} 
		 			 
	if(date[3]==0xfe&Flag2==1)
		{
		 if(num<=500)
		 	{
			 num=num+80;
			}
		// else num=511;
		 LED_PWM();
		}

	if(ee_temp1==0xfd)
		{
	 	 led_port=0x00;
		 watchdog_timer();
		 }
	if(ee_temp1==0xfc)
		{
	 	 led_port=0x00;
		 led_r=1;
		 led_g=1;
		 led_b=1;
		 watchdog_timer();
		}
*/

//**********************************************  2


	if(ee_temp1==0xfb)
		{
	 	 led_port=0x00;
		 led_r=1;
		 watchdog_timer();
		 }

	if(ee_temp1==0xfa)
		{
	 	 led_port=0x00;
		 led_g=1;
		 watchdog_timer();
		 }

	if(ee_temp1==0xf9)
		{
	 	 led_port=0x00;
		 led_b=1;
		 watchdog_timer();
		 }

	if(ee_temp1==0xf8)
		{
	 	 led_port=0x00;
		 led_r=1;
		 led_g=1;
		 led_b=1;
		 watchdog_timer();
		 }

//**************************************	   3

	if(ee_temp1==0xf7)
		{
		 uint fade_1,fade_2,fade_3,fade_4;
 
		 fade_2=448;   //384
		 fade_4=448;   //384
		 while(fade_2!=0&ee_temp==0x07)
		 	{ 
			 for(fade_3=512;fade_3>fade_4;fade_3--)		
			          //512
			 	{
				 led_port=0x10;
				 delay(1);

				 }
				 fade_3=512;   //512
				 fade_4--;
				 watchdog_timer();
			 for(fade_1=0;fade_1<fade_2;fade_1++)
			 	{
				 led_port=0x08;
				 delay(1);
 
				 }
				 fade_1=0;
				 fade_2--;
				 if(ee_temp!=0x07)
					 	{
						 fade_2=0;
						}
		 watchdog_timer();
		 fade_2=448;	  //384
		 fade_4=448;	  //384
			}
		}
	 	
	if(ee_temp1==0xf6)
		{
		 uint fade_1,fade_2,fade_3,fade_4;
 
		 fade_2=448;   //384
		 fade_4=448;   //384
		 while(fade_2!=0&ee_temp==0x06)
		 	{ 
			 for(fade_3=512;fade_3>fade_4;fade_3--)		
			          //512
			 	{
				 led_port=0x20;
				 delay(1);
	 
				 }
				 fade_3=512;   //512
				 fade_4--;
				 watchdog_timer();
			 for(fade_1=0;fade_1<fade_2;fade_1++)
			 	{
				 led_port=0x10;
				 delay(1);

				 }
				 fade_1=0;
				 fade_2--;
				 if(ee_temp!=0x06)
					 	{
						 fade_2=0;
						}
		 watchdog_timer();
		 fade_2=448;	  //384
		 fade_4=448;	  //384
			}
		}

	if(ee_temp1==0xf5)
	 	{
		 uint fade_1,fade_2,fade_3,fade_4;
 
		 fade_2=448;   //384
		 fade_4=448;   //384
		 while(fade_2!=0&ee_temp==0x05)
		 	{ 
			 for(fade_3=512;fade_3>fade_4;fade_3--)		
			          //512
			 	{
				 led_port=0x08;
				 delay(1);
				 	 
				 }
				 fade_3=512;   //512
				 fade_4--;
				 watchdog_timer();
			 for(fade_1=0;fade_1<fade_2;fade_1++)
			 	{
				 led_port=0x20;
				 delay(1);
					 
				 }
				 fade_1=0;
				 fade_2--;
				 if(ee_temp!=0x05)
					 	{
						 fade_2=0;
						}
		 watchdog_timer();
		 fade_2=448;	  //384
		 fade_4=448;	  //384
			}
		}

	if(ee_temp1==0xf4)		
		{
		 while(ee_temp==4)
		 	{
			 led_port=0x00;
			 led_r=1;
			 delay_1ms(200);

			 led_port=0x00;
			 led_r=1;
			 led_g=1;
			 delay_1ms(200);
			
			 led_port=0x00;
			 led_g=1;
			 delay_1ms(200);
			 watchdog_timer();
			 led_port=0x00;
			 led_g=1;
			 led_b=1;
			 delay_1ms(200);

			 led_port=0x00;
			 led_b=1;
			 delay_1ms(200);

			 led_port=0x00;
			 led_b=1;
			 led_r=1;
			 delay_1ms(200);

			 watchdog_timer();
			} 	
		}

//**************************************	  4
	
	if(ee_temp1==0xf3)
		{
		 	uint fade_1,fade_2,fade_3,fade_4;
 
			 fade_2=416;   //384
			 fade_4=416;   //384
			 while(fade_2!=0&ee_temp==0x03)
			 	{ 
				 for(fade_3=512;fade_3>fade_4;fade_3--)		
				          //512
				 	{
					 led_port=0x10;
					 delay(1);	 
					 }
					 fade_3=512;   //512
					 fade_4--;
				 watchdog_timer();
				 for(fade_1=0;fade_1<fade_2;fade_1++)
				 	{
					 led_port=0x08;
					 delay(1);	 
					 }
					 fade_1=0;
					 fade_2--;
					 if(ee_temp!=0x03)
						 	{
							 fade_2=0;
							}
			 watchdog_timer();
			 fade_2=416;	  //384
			 fade_4=416;	  //384
			}
		}
	if(ee_temp1==0xf2)
	 	{
		 uint fade_1,fade_2,fade_3,fade_4;
 
		 fade_2=384;   //384
		 fade_4=384;   //384
		 while(fade_2!=0&ee_temp==0x02)
		 	{ 
			 for(fade_3=512;fade_3>fade_4;fade_3--)		
			          //512
			 	{
				 led_port=0x20;
				 delay(1);	 
				 }
				 fade_3=512;   //512
				 fade_4--;
			 watchdog_timer();
			 for(fade_1=0;fade_1<fade_2;fade_1++)
			 	{
				 led_port=0x10;
				 delay(1);	 
				 }
				 fade_1=0;
				 fade_2--;
				 if(ee_temp!=0x02)
					 	{
						 fade_2=0;
						}
		 watchdog_timer();
		 fade_2=384;	  //384
		 fade_4=384;	  //384
			}
		}
	if(ee_temp1==0xf1)
	 	{
 		 uint fade_1,fade_2,fade_3,fade_4;
 
		 fade_2=348;   //384
		 fade_4=348;   //384
		 while(fade_2!=0&ee_temp==0x01)
		 	{ 
			 for(fade_3=512;fade_3>fade_4;fade_3--)		
			          //512
			 	{
				 led_port=0x08;
				 delay(1);	 
				 }
				 fade_3=512;   //512
				 fade_4--;
			 watchdog_timer();
			 for(fade_1=0;fade_1<fade_2;fade_1++)
			 	{
				 led_port=0x20;
				 delay(1);	 
				 }
				 fade_1=0;
				 fade_2--;
				 if(ee_temp!=0x01)
					 	{
						 fade_2=0;
						}
		 watchdog_timer();
		 fade_2=348;	  //384
		 fade_4=348;	  //384
			}
		}

	if(ee_temp1==0xf0)
	 	{
		 while(ee_temp==0)
		 	{
			 led_port=0x00;
			 led_r=1;
			 delay_1ms(500);

			 watchdog_timer();
			 led_port=0x00;
			 led_g=1;
			 delay_1ms(500);
			 
			 led_port=0x00;
			 led_b=1;
			 delay_1ms(500);
			 watchdog_timer();
			}
		}


//********************************************	  5
	if(ee_temp1==0xef)
		{
		 	uint fade_1,fade_2,fade_3,fade_4;
 
			 fade_2=384;   //384
			 fade_4=384;   //384
			 while(fade_2!=0&ee_temp==0x0f)
			 	{ 
				 for(fade_3=512;fade_3>fade_4;fade_3--)		
				          //512
				 	{
					 led_port=0x10;
					 delay(1);	 
					 }
					 fade_3=512;   //512
					 fade_4--;
				 watchdog_timer();
				 for(fade_1=0;fade_1<fade_2;fade_1++)
				 	{
					 led_port=0x08;
					 delay(1);	 
					 }
					 fade_1=0;
					 fade_2--;
					 if(ee_temp!=0x0f)
						 	{
							 fade_2=0;
							}
			 watchdog_timer();
			 fade_2=384;	  //384
			 fade_4=384;	  //384
			}
		}
	if(ee_temp1==0xee)
	 	{
		 uint fade_1,fade_2,fade_3,fade_4;
 
		 fade_2=320;   //384
		 fade_4=320;   //384
		 while(fade_2!=0&ee_temp==0x0e)
		 	{ 
			 for(fade_3=512;fade_3>fade_4;fade_3--)		
			          //512
			 	{
				 led_port=0x20;
				 delay(1);	 
				 }
				 fade_3=512;   //512
				 fade_4--;
			 watchdog_timer();
			 for(fade_1=0;fade_1<fade_2;fade_1++)
			 	{
				 led_port=0x10;
				 delay(1);	 
				 }
				 fade_1=0;
				 fade_2--;
				 if(ee_temp!=0x0e)
					 	{
						 fade_2=0;
						}
		 watchdog_timer();
		 fade_2=320;	  //384
		 fade_4=320;	  //384
			}
		}
	if(ee_temp1==0xed)
	 	{
		 uint fade_1,fade_2,fade_3,fade_4;
 
		 fade_2=320;   //384
		 fade_4=320;   //384
		 while(fade_2!=0&ee_temp==0x0d)
		 	{ 
			 for(fade_3=512;fade_3>fade_4;fade_3--)		
			          //512
			 	{
				 led_port=0x08;
				 delay(1);	 
				 }
				 fade_3=512;   //512
				 fade_4--;
			 watchdog_timer();
			 for(fade_1=0;fade_1<fade_2;fade_1++)
			 	{
				 led_port=0x20;
				 delay(1);	 
				 }
				 fade_1=0;
				 fade_2--;
				 if(ee_temp!=0x0d)
					 	{
						 fade_2=0;
						}
		 watchdog_timer();
		 fade_2=320;	  //384
		 fade_4=320;	  //384
			}
		}
	if(ee_temp1==0xec)
	 	fade();
//*******************************************	   6
	if(ee_temp1==0xeb)
	 	 {
		  led_port=0x00;
		  led_r=1;
		  led_g=1;
		 watchdog_timer();
		 }
	if(ee_temp1==0xea)
	 	{
	 	 led_port=0x00;
		 //led_r=0;
		 led_g=1;
		 led_b=1;
		 watchdog_timer();
		 }
	if(ee_temp1==0xe9)
	 	{
	 	 led_port=0x00;
		 led_r=1;
		 //led_g=0;
		 led_b=1;
		 watchdog_timer();
		 }
	if(ee_temp1==0xe8)
	 	fade1();
}

void fade()
{
// uchar i;
 uint fade_1,fade_2,fade_3,fade_4;
 
 fade_2=512;
 fade_4=511;
 while(fade_2!=0&ee_temp==0x0c)
 	{
	 
	 for(fade_3=512;fade_3>fade_4;fade_3--)
	 	{
		 led_port=0x10;
		 delay(1);

		 }
		 fade_3=512;
		 fade_4--;
	 watchdog_timer();
	 for(fade_1=0;fade_1<fade_2;fade_1++)
	 	{
		 led_port=0x08;
		 delay(1);
	
		 }
		 fade_1=0;
		 fade_2--;
		 if(ee_temp!=0x0c)
			 	{
				 fade_2=0;
				}
	}
	 watchdog_timer();
	 fade_2=512;
	 fade_4=511;
	 while(fade_2!=0&ee_temp==0x0c)
	 	{
		 if(ee_temp!=0x0c)
			 	{
				 fade_2=0;
				}
		 for(fade_3=512;fade_3>fade_4;fade_3--)
		 	{
			 led_port=0x20;
			 delay(1);
		// watchdog_timer();
			 }
			 fade_3=512;
			 fade_4--;
		 watchdog_timer();
		 for(fade_1=0;fade_1<fade_2;fade_1++)
		 	{
			 led_port=0x10;
			 delay(1);
		//	 watchdog_timer();
			 }
			 fade_1=0;
			 fade_2--;
		}
	 watchdog_timer();
     fade_2=512;
	 fade_4=511;
	 while(fade_2!=0&ee_temp==0x0c)
	 	{
		 if(ee_temp!=0x0c)
			 	{
				 fade_2=0;
				}
		 for(fade_3=512;fade_3>fade_4;fade_3--)
		 	{
			 led_port=0x08;
			 delay(1);
			 watchdog_timer();
			 }
			 fade_3=512;
			 fade_4--;
		 watchdog_timer();
		 for(fade_1=0;fade_1<fade_2;fade_1++)
		 	{
			 led_port=0x20;
			 delay(1);
			 watchdog_timer();
			 }
			 fade_1=0;
			 fade_2--;			 
		}
		watchdog_timer();
}

void fade1()
{
// uchar i;
 uint fade_1,fade_2,fade_3,fade_4;
 
 fade_2=128;
 fade_4=127;
 while(fade_2!=0&ee_temp==0x08)
 	{
	 
	 for(fade_3=128;fade_3>fade_4;fade_3--)
	 	{
		 led_port=0x10;
		 delay(1);
		 
		 }
		 fade_3=128;
		 fade_4--;

	 for(fade_1=0;fade_1<fade_2;fade_1++)
	 	{
		 led_port=0x08;
		 delay(1);
		 
		 }
		 fade_1=0;
		 fade_2--;
		 if(ee_temp!=0x08)
			 	{
				 fade_2=0;
				}
	}
	 watchdog_timer();
	 fade_2=128;
	 fade_4=127;
	 while(fade_2!=0&ee_temp==0x08)
	 	{
		 if(ee_temp!=0x08)
			 	{
				 fade_2=0;
				}
		 for(fade_3=128;fade_3>fade_4;fade_3--)
		 	{
			 led_port=0x20;
			 delay(1);
			 
			 }
			 fade_3=128;
			 fade_4--;
	
		 for(fade_1=0;fade_1<fade_2;fade_1++)
		 	{
			 led_port=0x10;
			 delay(1);
			 
			 }
			 fade_1=0;
			 fade_2--;
		}
	 watchdog_timer();
     fade_2=128;
	 fade_4=127;
	 while(fade_2!=0&ee_temp==0x08)
	 	{
		 if(ee_temp!=0x08)
			 	{
				 fade_2=0;
				}
		 for(fade_3=128;fade_3>fade_4;fade_3--)
		 	{
			 led_port=0x08;
			 delay(1);
			 
			 }
			 fade_3=128;
			 fade_4--;
	
		 for(fade_1=0;fade_1<fade_2;fade_1++)
		 	{
			 led_port=0x20;
			 delay(1);
			 
			 }
			 fade_1=0;
			 fade_2--;			 
		}
		watchdog_timer();
}

void init()
{
 led_port=0x00;
 /*
 led_r=1;
 delay_1ms(500);

 led_port=0x00;
 led_g=1;
 delay_1ms(500);
 
 led_port=0x00;
 led_b=1;
 delay_1ms(500);
 led_port=0x00;
 */
 delay_1ms(2);
 WDT_CONTR=0x3f;
 delay_1ms(500);
}

//********************************
void main()
{
  init();
  Flag2=0;

  SP=0x60;                                        //堆栈指针
  EX0=1;                                          //允许外部中断0,用于检测红外遥控器按键
  EA=1;
  num=255;

  while(1)
  	{
	 calc(); 
	}
}

//********************************************************************
/*------------------------外部中断0程序-------------------------*/
/*------------------主要用于处理红外遥控键值--------------------*/
void int0() interrupt 0
{ 
   uchar i;
   Flag2=0;		  ///////
   k=0;
   EX0=0;                                        //检测到有效信号关中断,防止干扰
   for(i=0;i<4;i++)
   { 
     delay1000();
     if(IR_RE==1){k=1;}                          //刚开始为9ms的引导码.
   }
   led_port=0x00;
   if(k==0)
   { 
   IR_decode();                                  //如果接收到的是有效信号,则调用解码程序

   if(date[3]>=0xe8)
   	{
	 if(date[3]<=0xfb)
	 	{
		  
	 	  temp1=date[3];

		  EEPROM_ERASE(0x2000);				     //STC_EEROM_0X2000 temp1
 		  EEPROM_write(0x2000,temp1);

		  EEPROM_read(0x2000);
 		  ee_temp1=ISP_DATA;
		  ee_temp=ee_temp1&0x0f;
			/*	  
		  temp=date[3]&0x0f;
		  EEPROM_ERASE(0x2004);				     //STC_EEROM_0X2004 temp
 		  EEPROM_write(0x2004,temp);
			*/
		}
	else
		{
		 EEPROM_read(0x2000);
		 ee_temp1=ISP_DATA;
         ee_temp=ee_temp1&0x0f;
		}

			
	}
   

   delay2400();
   delay2400();
   delay2400();
   delay_1ms(500);
  }
   EX0=1;                                       //开外部中断,允许新的遥控按键
}

相 关 资 源