从网上找到一个单片机led流星雨的程序,将其修改为8个led流星雨后出现小问题:当点亮最后一个led7时,led7并不是从亮到暗慢慢调节下来,而是很快熄灭.......百思不得其解,求大侠!(程序看上去很长,其实是很多重复的) 
 
 
[mw_shl_code=c,true]#include<reg52.h>//MCU头文件
#define uchar unsigned char//字浮型宏定义
#define uint unsigned int//整型宏定义
#define shudu 10 //流水速度
uchar pwm0 =3; 	//亮度级别
uchar pwm1 =8;	//
uchar pwm2 =14;	//
uchar pwm3 =21;	//
uchar pwm4 =29;	//
uchar pwm5 =38;	//
uchar pwm6 =48;	//
uchar pwm7 =64;	//
sbit led0=P1^0;//16个IO口
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
sbit led4=P1^4;
sbit led5=P1^5;
sbit led6=P1^6;
sbit led7=P1^7;
//sbit led8=P2^0;
//sbit led9=P2^1;
//sbit led10=P2^2;
//sbit led11=P2^3;
//sbit led12=P2^4;
//sbit led13=P2^5;
//sbit led14=P2^6;
//sbit led15=P2^7;
uchar d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15;//各IO口变量
/***************************************************/
/**********************延时子程序*******************/
/***************************************************/
void delay(uint z)
{
 uint x,y;//局部变量定义
 for(x=0;x<3;x++)//延时外循环
 for(y=0;y<z;y++);//延时内循环
}
/**********************************************/
/**********PWM控制红绿兰3种灯亮灭时间**********/
/**********************************************/   //,uchar d8,uchar d9,uchar d10,uchar 
d11,uchar d12,uchar d13,uchar d14
void RGBpwm(uchar d0,uchar d1,uchar d2,uchar d3,uchar d4,uchar d5,uchar d6,uchar d7)//3个局部
变量,些部分为带参数函数
{
 if(d0!=0)
 {
 led0=0;	//点亮led
 delay(d0);                    
 led0=1;//1
 }
 if(d1!=0)
 {
 led1=0;
 delay(d1);                    
 led1=1;//1
 }
 if(d2!=0)
 {
 led2=0;
 delay(d2); //2                   
 led2=1;
 }
 if(d3!=0)
 {
 led3=0;
 delay(d3);                    
 led3=1;//3
 }
 if(d4!=0)
 {
 led4=0;
 delay(d4);                    
 led4=1;//4
 }
 if(d5!=0)
 {
 led5=0;
 delay(d5);                    
 led5=1;//5
 }
 if(d6!=0)
 {
 led6=0;
 delay(d6);                    
 led6=1;//6
 }
 if(d7!=0)
 {
 led7=0;
 delay(d7);                    
 led7=1;//7
 }
// if(d8!=0)
// {
// led8=0;
// delay(d8);                    
// led8=1;//8
// }
// if(d9!=0)
// {
// led9=0;
// delay(d9);                    
// led9=1;//9
// }
// if(d10!=0)
// {
// led10=0;
// delay(d10); //10                   
// led10=1;
// }
// if(d11!=0)
// {
// led11=0;
// delay(d11);                    
// led11=1;//11
// }
// if(d12!=0)
// {
// led12=0;
// delay(d12);                    
// led12=1;//12
// }
// if(d13!=0)
// {
// led13=0;
// delay(d13); //13                   
// led13=1;
// }
// if(d14!=0)//14
// {
// led14=0;
// delay(d14);                    
// led14=1;
// }
// if(d15!=0)//15
// {
// led15=0;
// delay(d15);                    
// led15=1;
// }
}
  
/***********************************************/
/********************主程序*********************/
/***********************************************/
void main()
{
 TMOD=0x01;
 EA=1;
 ET0=1;
 TR0=1;
 TH0=(65536-1100)/256;
 TL0=(65536-1100)%256;
 P3=0;
 while(1)//程序主循环
 {						// ,d8,d9,d10,d11,d12,d13,d14
  RGBpwm(d0,d1,d2,d3,d4,d5,d6,d7);//调用RGBpwm子程序
 }
}
/*************************************************/
/*中断服务子程序(控制LED红绿兰亮灭时间占空比例)*/
/*************************************************/
void zhong() interrupt 1//中断向量位为1
{
 uint num;//定时器计数变量
 uint ji;//亮度等级控制变量 
 TH0=(65536-1100)/256;//给定时器高8位赋值
 TL0=(65536-1100)%256;//给定时器低8位赋值
 num++;//将定时计数变自动增加1
 if(num==shudu)//如果速度变量等于定时计数器变量就执行下面大括号语句
 {
  num=0;//将计数器清0
  ji++;//将亮度等级控制变量加1
if((ji>0)&&(ji<10))//  if(ji<10)//12345678 移位移动 流水.....
  {
	 d0=pwm7;	 //点亮LED0且pwm值最大
	 d1=0;
	 d2=0;
	 d3=0;
	 d4=0;
	 d5=0;
	 d6=0;
	 d7=0;
//	 d8=0;
//	 d9=0;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
if((ji>10)&&(ji<20))//   if(ji<20)//23456789
  {
	 d0=pwm6;	 //点亮LED0、LED1,且pwm依次为次之、最大值
	 d1=pwm7;	 
	 d2=0;
	 d3=0;
	 d4=0;
	 d5=0;
	 d6=0;
	 d7=0;
//	 d8=0;
//	 d9=0;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
if((ji>20)&&(ji<30))// else if(ji<30)//345678910
  {
	 d0=pwm5;
	 d1=pwm6;
	 d2=pwm7;
	 d3=0;
	 d4=0;
	 d5=0;
	 d6=0;
	 d7=0;
//	 d8=0;
//	 d9=0;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
if((ji>30)&&(ji<40))// else if(ji<40)//4567891011
  {
	 d0=pwm4;
	 d1=pwm5;
	 d2=pwm6;
	 d3=pwm7;
	 d4=0;
	 d5=0;
	 d6=0;
	 d7=0;
//	 d8=0;
//	 d9=0;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
 
 
if((ji>40)&&(ji<50))//  else if(ji<50)//12345678
  {
	 d0=pwm3;
	 d1=pwm4;
	 d2=pwm5;
	 d3=pwm6;
	 d4=pwm7;
	 d5=0;
	 d6=0;
	 d7=0;
//	 d8=0;
//	 d9=0;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
if((ji>50)&&(ji<60))//  else if(ji<60)//23456789
  {
	 d0=pwm2;
	 d1=pwm3;
	 d2=pwm4;
	 d3=pwm5;
	 d4=pwm6;
	 d5=pwm7;
	 d6=0;
	 d7=0;
//	 d8=0;
//	 d9=0;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
if((ji>60)&&(ji<70))// else if(ji<70)//345678910
  {
	 d0=pwm1;
	 d1=pwm2;
	 d2=pwm3;
	 d3=pwm4;
	 d4=pwm5;
	 d5=pwm6;
	 d6=pwm7;
	 d7=0;
//	 d8=0;
//	 d9=0;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
if((ji>70)&&(ji<80))// else if(ji<80)//4567891011
  {
	 d0=pwm0;
	 d1=pwm1;
	 d2=pwm2;
	 d3=pwm3;
	 d4=pwm4;
	 d5=pwm5;
	 d6=pwm6;
	 d7=pwm7;
//	 d8=0;
//	 d9=0;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
 
 
if((ji>80)&&(ji<90))//  else if(ji<90)//12345678
  {
	 d0=0;
	 d1=pwm0;
	 d2=pwm1;
	 d3=pwm2;
	 d4=pwm3;
	 d5=pwm4;
	 d6=pwm5;
	 d7=pwm6;
//	 d8=pwm7;
//	 d9=0;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
 
if((ji>90)&&(ji<100))//else if(ji<100)//345678910
  {	 
	 d0=0;
	 d1=0;
	 d2=pwm0;
	 d3=pwm1;
	 d4=pwm2;
	 d5=pwm3;
	 d6=pwm4;
	 d7=pwm5;
//	 d8=pwm6;
//	 d9=pwm7;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
if((ji>100)&&(ji<110))// else if(ji<110)//345678910
  {
	 d0=0;
	 d1=0;
	 d2=0;
	 d3=pwm0;
	 d4=pwm1;
	 d5=pwm2;
	 d6=pwm3;
	 d7=pwm4;
//	 d8=pwm5;
//	 d9=pwm6;
//	 d10=pwm7;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
if((ji>110)&&(ji<120))// else if(ji<120)//4567891011
  {	  
  	 d0=0;
	 d1=0;
	 d2=0;
	 d3=0;
	 d4=pwm0;
	 d5=pwm1;
	 d6=pwm2;
	 d7=pwm3;
//	 d8=pwm4;
//	 d9=pwm5;
//	 d10=pwm6;
//	 d11=pwm7;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
if((ji>120)&&(ji<130))// else if(ji<130)//56789101112
  {
	 d0=0;
	 d1=0;
	 d2=0;
	 d3=0;
	 d4=0;
	 d5=pwm0;
	 d6=pwm1;
	 d7=pwm2;
//	 d8=pwm3;
//	 d9=pwm4;
//	 d10=pwm5;
//	 d11=pwm6;
//	 d12=pwm7;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
if((ji>130)&&(ji<140))// else if(ji<140)//678910111213
  {
	 d0=0;
	 d1=0;
	 d2=0;
	 d3=0;
	 d4=0;
	 d5=0;	 
	 d6=pwm0;
	 d7=pwm1;
//	 d8=pwm2;
//	 d9=pwm3;
//	 d10=pwm4;
//	 d11=pwm5;
//	 d12=pwm6;
//	 d13=pwm7;
//	 d14=0;
//	 d15=0;
  }
if((ji>140)&&(ji<150))// else if(ji<150)//
  {
	 d0=0;
	 d1=0;
	 d2=0;
	 d3=0;
	 d4=0;
	 d5=0;
	 d6=0;	 
	 d7=pwm0;
//	 d8=pwm1;
//	 d9=pwm2;
//	 d10=pwm3;
//	 d11=pwm4;
//	 d12=pwm5;
//	 d13=pwm6;
//	 d14=pwm7;
//	 d15=0;
  }
if((ji>150)&&(ji<160))// else if(ji<160)//
  {
	 d0=0;
	 d1=0;
	 d2=0;
	 d3=0;
	 d4=0;
	 d5=0;
	 d6=0;
	 d7=0;
//	 d8=pwm0;
//	 d9=pwm1;
//	 d10=pwm2;
//	 d11=pwm3;
//	 d12=pwm4;
//	 d13=pwm5;
//	 d14=pwm6;
//	 d15=pwm7;	 
  }
if((ji>160)&&(ji<450))//  else if(ji<450)//450控制流水周期
  {
	 d0=0;
	 d1=0;
	 d2=0;
	 d3=0;
	 d4=0;
	 d5=0;
	 d6=0;
	 d7=0;
//	 d8=0;
//	 d9=0;
//	 d10=0;
//	 d11=0;
//	 d12=0;
//	 d13=0;
//	 d14=0;
//	 d15=0;
  }
 
 if(ji>450)ji=0;//  else ji=0;
 }
}
[/mw_shl_code]
 
 
  |