📄 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 + -