以下这个控制LED渐明渐暗的程序,现在的现象是:第一个灯渐明渐暗后,紧接着第二个灯开始渐明渐暗了,而我想要的效果是:当第一个灯亮完熄灭后,停留数秒一段时间,才渐渐点亮第二个灯,我尝试在几个位置加上delay延时,但没效果,有时还会出现闪烁,请高手支招啊,谢谢!!!
#include <reg51.h>
void pwmkeyr(void); void pwmkeyg(void); void pwmkeyb(void);
void delay (void); sbit ledr=P2^0; //红灯 sbit ledg=P2^1; //绿灯 sbit ledb=P2^2; //蓝灯
void main(void) { while(1) { pwmkeyr(); pwmkeyg(); pwmkeyb(); } }
void pwmkeyr(void) //红灯渐亮渐灭 { long i ,j ,m; for (j=0;j<100;j++) { for(i=0;i<j;i++) {delay(); ledr=0; } m=100-j; for(i=0;i<m;i++) {delay(); ledr=1; } } for (j=100;j>0;j--) { for(i=0;i<j;i++) {delay() ; ledr=0; } m=100-j; for(i=0;i<m;i++) {delay() ; ledr=1; } } }
void pwmkeyg(void) //绿灯渐亮渐灭 { long i ,j ,m; for (j=0;j<100;j++) { for(i=0;i<j;i++) {delay(); ledg=0; } m=100-j; for(i=0;i<m;i++) {delay(); ledg=1; } } for (j=100;j>0;j--) { for(i=0;i<j;i++) {delay() ; ledg=0; } m=100-j; for(i=0;i<m;i++) {delay() ; ledg=1; } } }
void pwmkeyb(void) //蓝灯渐亮渐灭 { long i ,j ,m; for (j=0;j<100;j++) { for(i=0;i<j;i++) {delay(); ledb=0; } m=100-j; for(i=0;i<m;i++) {delay(); ledb=1; } } for (j=100;j>0;j--) { for(i=0;i<j;i++) {delay() ; ledb=0; } m=100-j; for(i=0;i<m;i++) {delay() ; ledb=1; } } }
void delay() //延时函数 { long e; for( e=50;e>0 ;e--) ;}
|