/*******************************
程序名稱(chēng):七彩LED漸變程序
編寫(xiě)者:ZH YU
MCU:51/2051
晶振:12MHz
/*********************************/
#include <AT892051.H>
sbit g1=P1^6; //綠色
sbit r1=P1^7; //紅
sbit b1=P1^5; //蘭
sbit key1=P3^3;
/*********************************/
unsigned char i;
unsigned char mode;
/*********************************/
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++){
for(j=0;j<121;j++)
{;}}
}
/*********************************/
void interint1() interrupt 2 //using **
//外部中斷1處理
{
EA=0;
if(key1==0)
{
delay(20);
key1=1;
if(key1==0)
{
mode++;
if(mode==4)mode=0;
}
while(key1==0);
}
key1=1;
EA=1;
}
/*********************************/
timer(unsigned char t)
{unsigned char b;
for(b=0;b<t;b++)
{; }
}
/*********************************/
ledout(unsigned char g,r,b)
{unsigned char a;
for(a=0;a<10;a++)
{if(g!=0)
{g1=1;timer(g);g1=0;}
if(r!=0)
{r1=1;timer(r);r1=0;}
if(b!=0)
{b1=1;timer(b);b1=0;}
}
}
/*********************************/
/*********************************/
main()
{
unsigned char g,r,b;
r1=0;
g1=0;
b1=0;
EA=1;
EX1=1;
delay(1);
while(1)
{
if(mode==0)
{
{if(g!=0&&b==0)
{g--;r++;}
if(r!=0&&g==0)
{r--;b++;}
if(b!=0&&r==0)
{b--;g++;}
if(g+r+b!=100)
{g=100;r=0;b=0;}
ledout(g,r,b);
}
}
if(mode==1)
{
i++;
if(i==7)i=0;
switch(i)
{
case 0 : r1=1;g1=0;b1=0;delay(100); r1=0;g1=0;b1=0; delay(100); break;
case 1 : r1=0;g1=1;b1=0;delay(100); r1=0;g1=0;b1=0; delay(100); break;
case 2 : r1=0;g1=0;b1=1;delay(100); r1=0;g1=0;b1=0; delay(100); break;
case 3 : r1=1;g1=1;b1=0;delay(100); r1=0;g1=0;b1=0; delay(100); break;
case 4 : r1=1;g1=0;b1=1;delay(100); r1=0;g1=0;b1=0; delay(100); break;
case 5 : r1=0;g1=1;b1=1;delay(100); r1=0;g1=0;b1=0; delay(100); break;
case 6 : r1=1;g1=1;b1=1;delay(100); r1=0;g1=0;b1=0; delay(100); break;
default : break;
}
}
if(mode==2)
{
i++;
if(i==7)i=0;
switch(i)
{
case 0 : r1=1;g1=0;b1=0;delay(300); r1=0;g1=0;b1=0; delay(300); break;
case 1 : r1=0;g1=1;b1=0;delay(300); r1=0;g1=0;b1=0; delay(300); break;
case 2 : r1=0;g1=0;b1=1;delay(300); r1=0;g1=0;b1=0; delay(300); break;
case 3 : r1=1;g1=1;b1=0;delay(300); r1=0;g1=0;b1=0; delay(300); break;
case 4 : r1=1;g1=0;b1=1;delay(300); r1=0;g1=0;b1=0; delay(300); break;
case 5 : r1=0;g1=1;b1=1;delay(300); r1=0;g1=0;b1=0; delay(300); break;
case 6 : r1=1;g1=1;b1=1;delay(300); r1=0;g1=0;b1=0; delay(300); break;
default : break;
}
}
if(mode==3)
{
i++;
if(i==7)i=0;
switch(i)
{
case 0 : r1=1;g1=0;b1=0;delay(300); break;
case 1 : r1=0;g1=1;b1=0;delay(300); break;
case 2 : r1=0;g1=0;b1=1;delay(300); break;
case 3 : r1=1;g1=1;b1=0;delay(300); break;
case 4 : r1=1;g1=0;b1=1;delay(300); break;
case 5 : r1=0;g1=1;b1=1;delay(300); break;
case 6 : r1=1;g1=1;b1=1;delay(300); break;
default : break;
}
}
}
}