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

📄 led.c

📁 资料为主从控制的LED七彩灯
💻 C
字号:
  #include<AT89X52.h>
#define  PWM_DELAY   40
#define  OFF_DELAY   40
unsigned  char count;count1,count2;
sbit  led_red=P3^3;
sbit  led_BL=P3^4;
sbit  led_GR=P3^5;
unsigned  char data PWMR;PWMB;PWMG;

//-------初始化函数------------------
void init_serialcomm( void ) 
{ 
     SCON = 0x50 ;
     TMOD=0x01; 
     TMOD |= 0x20 ; 
     TH1=0XFD;
     TL1=0XFD; 
     TR1 = 1 ; 
     TH0=0Xff;TL0=0X06;
     IE=0X82;
     TR0=1;
	  P1=0XFF;
     PWMR=0;
     PWMB=0;
     PWMG=0;
} 

//----------延时函数-----------------
 void DELAY(unsigned int MS) 
{ 
    unsigned char us,usn; 
     while(MS!=0) 
     {  
        usn = 2;   //在12M晶振下接近1ms 
         while(usn!=0) 
          { 
             us=0xf9; 
             while (us!=0){us--;}; 
              usn--; 
            } 
        MS--; 
       } 
   } 


//----------中断函数----------------------
void timeint(void) interrupt 1
{   TH0=0XFF;
    TL0=0XF9;
    TR0=1;
    count++;
    if(count==100)
   {
	   if(PWMR!=0)
      led_red=1;
      else 
      led_red=0;
      if(PWMB!=0)
       led_BL=1;
       else 
       led_BL=0;
       if(PWMG!=0)
       led_GR=1;
       else 
       led_GR=0;
       count=0;
      }
    else
   {
       if (count==PWMR)
       led_red=0;
       if (count==PWMB)
       led_BL=0;
       if (count==PWMG)
	    led_GR=0;
    }
}	
														 
main()
{
    unsigned char i;
    unsigned char DIP_P1;
    init_serialcomm(); //初始化串口 
    while(1)
     { 
	     DIP_P1=P1&0X0F;
        if(DIP_P1==0)
         {		  
            if(RI)   //接收串口数据
               {
				      RI=0;
                  i=SBUF;
                   if(i>0X7F)
                     {
							    count2=0;
                          PWMR=i-128;
								  
						     }
                     else
                         {
								     count2++;
                             if(count2==1)
                                PWMB=i;
                               else
                               PWMG=i;
                           }
                   }
              }
        else
          {			 
		       DIP_P1=P1&0X0F;
              switch(DIP_P1)
               {
					case  1:PWMR=100; //红色
                       PWMB=0;
                       PWMG=0;     	 
                        break;
                case  2: PWMR=100; ////红色+绿色  
                         PWMG=100;
                         PWMB=0;    	  
                          break;
                case  3: PWMR=0; ///+绿色  
                         PWMG=100;
                         PWMB=0;    
                         break;
                case  4: PWMR=0; /////蓝色+绿色
                         PWMG=100;
                         PWMB=100;     	 
                          break;
                 case  5: PWMR=0; /////蓝色
                          PWMG=0;
                          PWMB=100;    
                           break;
                  case  6: PWMR=100; ////红色+蓝色 
                           PWMG=0;
                           PWMB=100;  	 
                           break;
                  case  7: PWMR=100; ////红色+蓝色+绿色 
                           PWMG=100;
                           PWMB=100;
                           break;
                   case  8:
                           PWMG=0;
                           PWMB=0;
                           PWMR=0;
                           for(PWMR=0;PWMR<=100;PWMR++) //红色
                            DELAY( PWM_DELAY );
	                        DIP_P1=P1&0X0F;
                           if(DIP_P1!=8)
                           break;
                           DELAY( 12000);
                           for(PWMR=100;PWMR>0;PWMR--) 
                           DELAY( PWM_DELAY );    
		                     DELAY( OFF_DELAY);
                           PWMG=0;
                           PWMB=0;
                           PWMR=0;
                           for(PWMR=0;PWMR<=100;PWMR++, PWMG++) //红色+绿色      
                           DELAY(  PWM_DELAY );
      	                  DIP_P1=P1&0X0F;
                           if(DIP_P1!=8)
                           break;
                           DELAY( 12000);
                           for(PWMR=100;PWMR>0;PWMR--, PWMG--)     
                           DELAY(  PWM_DELAY );    
		                     DELAY( OFF_DELAY);
                           PWMG=0;
                           PWMB=0;
                           PWMR=0;
                           for(PWMG=0;PWMG<=100;PWMG++) //绿色
                           DELAY(  PWM_DELAY );
      	                  DIP_P1=P1&0X0F;
                           if(DIP_P1!=8)
                           break;
                           DELAY( 12000);
                           for(PWMG=100;PWMG>0;PWMG--) 
                           DELAY(  PWM_DELAY );   
		                     DELAY( OFF_DELAY);
                           PWMG=0;
                           PWMB=0;
                           PWMR=0;
                           for(PWMG=0;PWMG<=100;PWMG++,PWMB++) //蓝色+绿色                                               
                           DELAY(  PWM_DELAY );
 	  	                     DIP_P1=P1&0X0F;
                           if(DIP_P1!=8)
                           break;
                           DELAY( 12000);
                           for(PWMG=100;PWMG>0;PWMG--,  PWMB--) 
                           DELAY(  PWM_DELAY );      
                           DELAY( OFF_DELAY);
                           PWMG=0;
                           PWMB=0;
                           PWMR=0;
                           for(PWMB=0;PWMB<=100;PWMB++) //蓝色
                           DELAY(  PWM_DELAY );
       	                  DIP_P1=P1&0X0F;
                           if(DIP_P1!=8)
                           break;
                           DELAY( 12000);
                           for(PWMB=100;PWMB>0;PWMB--) 
                           DELAY( PWM_DELAY );
                           DELAY( OFF_DELAY);
                           PWMG=0;
                           PWMB=0;
                           PWMR=0;
                           for(PWMR=0;PWMR<=100;PWMR++, PWMB++) //红色+蓝色 
                           DELAY(  PWM_DELAY );
    	                     DIP_P1=P1&0X0F;
                           if(DIP_P1!=8)
                           break;
                           DELAY( 12000);
                           for(PWMR=100;PWMR>0;PWMR--, PWMB--)     
                            DELAY(  PWM_DELAY );      
		                      DELAY( OFF_DELAY);
                            PWMG=0;
                            PWMB=0;
                            PWMR=0;
                            for(PWMR=0;PWMR<=100;PWMR++,PWMB++,PWMG++) //红色+绿色+蓝色     
                            DELAY( PWM_DELAY );
                        	DIP_P1=P1&0X0F;
                           if(DIP_P1!=8)
                           break;
                            DELAY( 12000);
                            for(PWMR=100;PWMR>0;PWMR--,PWMG--,PWMB--)           
                            DELAY( PWM_DELAY );
      		                DELAY( OFF_DELAY);       
                             break;
                            default: PWMG=0;
                            PWMB=0;
                             PWMR=0;
                            break;

                     }
                }

        }
}


⌨️ 快捷键说明

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