我在上面改了一下,这样能实现七彩渐变吗?
#include<at89x52.h> #define red P1_2 #define green P1_3 #define blue P1_4
#define a 1 //漸變速度控制; #define b 300 #define c 256
#define uchar unsigned char #define uint unsigned int uchar percent,light,times;//percent,times:占空比控制;light:控制漸亮漸滅 uint i,j,k,p1;
bit flag; void red_light(); void yellow_light(); void green_light(); void cyan_light(); void blue_light(); void purple_light(); void white_light(); void white_red(); void delay();//延時函數 void change(); void delay500ms();
void pulse() interrupt 1 using 0 //計時器0中斷服務程式 { TH0 = -b/c; TL0 = -b%c; if(times++<100) {flag=1;} else{ flag=0;} } void main() { times = 0; percent = 100; light = 1; flag=1; TMOD = 0x01; //計時器0工作在方式1; TH0 = -b/c; //賦初值,不同的TH0和TL0值對應不同的調製頻率,而上面已說過,調製頻率不能太高,否則 TL0 = -b%c; //會達不到調節效果。 EA = 1; ET0 = 1; TR0 = 1; red_light(); do { yellow_light(); green_light(); cyan_light(); blue_light(); purple_light(); white_light(); white_red(); } while(1); }
void red_light() { if(flag==1) { red=1; green=0; blue=0; delay(); //LED渐渐点亮 percent = percent+a;//調節percent值可以改變占空比,通過不同的占空比,輸出不同的電
red=0; green=0; blue=0; delay(); } else{ red=1; green=0; blue=0; delay500ms(); times=0; } }
void yellow_light() { if(flag==1) { red=1; green=1; blue=0; delay(); //LED渐渐点亮 percent = percent+a;//調節percent值可以改變占空比,通過不同的占空比,輸出不同的電
red=1; green=0; blue=0; delay(); } else{ red=1; green=1; blue=0; delay500ms(); times=0; }
}
void green_light() { if(flag==1) { red=1; green=1; blue=0; delay(); //LED渐渐灭 percent = percent-a;//調節percent值可以改變占空比,通過不同的占空比,輸出不同的電
red=0; green=1; blue=0; delay(); } else{ red=0; green=1; blue=0; delay500ms(); times=0; } }
void cyan_light() { if(flag==1) { red=0; green=1; blue=1; delay(); //LED渐渐点亮 percent = percent+a;//調節percent值可以改變占空比,通過不同的占空比,輸出不同的電
red=0; green=1; blue=0; delay(); } else{ red=0; green=1; blue=1; delay500ms(); times=0; } }
void blue_light() { if(flag==1) { red=0; green=1; blue=1; delay(); //LED渐渐点亮 percent = percent-a;//調節percent值可以改變占空比,通過不同的占空比,輸出不同的電
red=0; green=1; blue=1; delay(); } else{ red=0; green=0; blue=1; delay500ms(); times=0; } }
void purple_light() { if(flag==1) { red=1; green=0; blue=1; delay(); //LED渐渐点亮 percent = percent+a;//調節percent值可以改變占空比,通過不同的占空比,輸出不同的電
red=0; green=0; blue=1; delay(); } else{ red=1; green=0; blue=1; delay500ms(); times=0; } }
void white_light() { if(flag==1) { red=1; green=1; blue=1; delay(); //LED渐渐点亮 percent = percent+a;//調節percent值可以改變占空比,通過不同的占空比,輸出不同的電
red=1; green=0; blue=1; delay(); } else{ red=1; green=1; blue=1; delay500ms(); times=0; } }
void white_red() { if(flag==1) { red=1; green=1; blue=1; delay(); //LED渐渐灭 percent = percent-a;//調節percent值可以改變占空比,通過不同的占空比,輸出不同的電
red=1; green=0; blue=0; delay(); } else{ red=1; green=0; blue=0; delay500ms(); times=0; } }
void delay() { for(i = 0;i<6576;i++); }
void delay500ms(void)
{
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
烧进去试了一下,实现不了七彩渐变,请帮忙看看为什么不行呀?
|
|