亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現在的位置是:蟲蟲下載站 > 資源下載 > 嵌入式綜合 > 紅外遙控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;                                       //開外部中斷,允許新的遙控按鍵
}

相 關 資 源

主站蜘蛛池模板: 宜黄县| 公主岭市| 临江市| 通化县| 祁东县| 若尔盖县| 神农架林区| 台安县| 巴彦县| 山丹县| 响水县| 宝应县| 共和县| 磐石市| 固安县| 阿图什市| 东至县| 温宿县| 东辽县| 烟台市| 油尖旺区| 南昌县| 汉寿县| 湖北省| 龙江县| 苏州市| 榆树市| 丹凤县| 会理县| 柳州市| 兰溪市| 鄢陵县| 长岭县| 桂阳县| 金乡县| 林口县| 平阴县| 义乌市| 福安市| 桐梓县| 湖南省|