#include <reg51.h>
#include <stdlib.h>
#include <intrins.h>
#define DELAY_LED 100
#define DELAY_BUTTON 5
#define DELAY_BUTTON_LONG 20
#define PWM_Module_Num 16
#define LED1 P0
#define LED2 P2
unsigned char i = 1;
unsigned int Timer_Count=0;
unsigned int PWM_ON = 0;
unsigned int PWM_FRE = 200;
unsigned int PWM_COUNT;
unsigned int a=0xfe;
unsigned int b=0xfe;
sbit KEY1 = P3^2;
sbit KEY2 = P3^3;
sbit KEY3 = P3^4;
sbit KEY4 = P3^5;
unsigned char i_Mode=0;
unsigned char Flow_Mode;
unsigned int LED_Temp[PWM_Module_Num]={0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,
0x8000,0x0080,0x0040,0x0020,0x0010,0x0008,0x0004,0x0002,0x0001};
sbit LED17=P3^6;
unsigned int temp = 0;
unsigned int key_state = 0;
unsigned int key_timer = 0;
void Delay(unsigned int Num)
{
unsigned int i,j;
for(i=0;i<Num;i++)
for(j=0;j<110;j++)
;
}
void CloseAll()
{
LED1 = 0xFFFF;
LED2 = 0xFFFF;
LED17 = 1;
}
unsigned int random(unsigned int n)
{
unsigned int value = rand()%n;
return value;
}
void ringt_4()
{
P0=0x0f;
Delay(500);
P2=0x0f;
Delay(500);
}
void lift_4()
{
P0=0xf0;
Delay(500);
P2=0xf0;
Delay(500);
}
void move_2()
{
P0=0xf0;
P0=P0<<1;
Delay(500);
P2=0xf0;
P2=P2<<1;
Delay(500);
}
void ji()
{
P0=0x55;
Delay(200);
P0=0xff;
Delay(200);
P2=0x55;
Delay(200);
P2=0xff;
Delay(200);
}
void ou()
{
P0=0xaa;
Delay(200);
P0=0xff;
Delay(200);
P2=0xaa;
Delay(200);
P2=0xff;
Delay(200);
}
void KEY_Scan(void)
{
if(key_timer > 5)
{
key_timer = 0;
key_state = 0;
}
if(key_state != 0 && key_timer > 0)
{
if(KEY1 == 0)
{
Delay(DELAY_BUTTON);
if(KEY1 == 0)
{
Flow_Mode = 5;
while(!KEY1);
}
}
if(KEY2 == 0)
{
Delay(DELAY_BUTTON);
if(KEY2 == 0)
{
Flow_Mode = 6;
while(!KEY2);
}
}
if(KEY3 == 0)
{
Delay(DELAY_BUTTON);
if(KEY3 == 0)
{
Flow_Mode = 7;
while(!KEY3);
}
}
if(KEY4 == 0)
{
Delay(DELAY_BUTTON);
if(KEY4 == 0)
{
Flow_Mode = 8;
while(!KEY4);
}
}
}
if(KEY1 == 0)
{
Delay(DELAY_BUTTON);
if(KEY1 ==0)
{
Delay(DELAY_BUTTON);
if(KEY2 == 0)
{
Flow_Mode = 9;
while(!KEY2);
}
else if(KEY3 == 0)
{
Flow_Mode = 10;
while(!KEY3);
}
else if(KEY4 == 0)
{
Flow_Mode = 11;
while(!KEY4);
}
else
{
key_timer++;
key_state ++;
Flow_Mode = 1;
while(!KEY1);
}
}
}
if(KEY2 == 0)
{
Delay(DELAY_BUTTON);
if(KEY2 ==0)
{
Delay(DELAY_BUTTON);
if(KEY3 == 0)
{
Flow_Mode = 12;
while(!KEY3);
}
else if(KEY4 == 0)
{
Flow_Mode = 13;
while(!KEY4);
}
else
{
key_timer++;
key_state ++;
Flow_Mode = 2;
while(!KEY2);
}
}
}
if(KEY3 == 0)
{
Delay(DELAY_BUTTON);
if(KEY4 == 0)
{
Flow_Mode = 14;
while(!KEY4);
}
else
{
key_timer++;
key_state ++;
Flow_Mode = 3;
while(!KEY3);
}
}
if(KEY4 == 0)
{
Delay(DELAY_BUTTON);
if(KEY4 ==0)
{
key_timer++;
key_state ++;
Flow_Mode = 4;
while(!KEY4);
}
}
if(key_timer > 0)
key_timer++;
}
void Way()
{
static unsigned int i_7 = 0;
Delay(DELAY_LED);
switch(Flow_Mode)
{
case 1:
LED1 = 0x0000;
LED2 = 0x0000;
LED17 = 0;
break;
case 2:
LED1 = 0xFFFF;
LED2 = 0xFFFF;
LED17 = 1;
break;
case 3:
if(i_Mode == PWM_Module_Num)
{
LED1 = 0xFFFF;
LED2 = 0xFFFF;
LED17 = 0;
Delay(DELAY_LED);
LED17 = 1;
i_Mode=0;
}
LED1 = ~LED_Temp[i_Mode]/256;
LED2 = ~LED_Temp[i_Mode]%256;
LED17 = 1;
i_Mode++;
break;
case 4:
if(i_Mode == -1)
{
LED1 = 0xFFFF;
LED2 = 0xFFFF;
LED17 = 0;
Delay(DELAY_LED);
LED17 = 1;
i_Mode=PWM_Module_Num-1;
}
LED1 = ~LED_Temp[i_Mode]/256;
LED2 = ~LED_Temp[i_Mode]%256;
LED17 = 1;
i_Mode--;
break;
case 5:
LED17 = 1;
if(LED1 == 0x0000)
{
LED1 = 0xFFFF;
Delay(40);
LED17 = 0;
LED2 = 0x0000;
}
else
{
Delay(40);
LED17 = 0;
LED1 = 0x0000;
LED2 = 0xFFFF;
}
break;
case 6:
LED1 = ~LED_Temp[random(15)]/256;
LED2 = ~LED_Temp[random(15)]%256;
if(random(2) == 1)
LED17 = 1;
else
LED17 = 0;
break;
case 7:
CloseAll();
P0=0xe7;
Delay(DELAY_LED);
P0=0xdb;
Delay(DELAY_LED);
P0=0xbd;
Delay(DELAY_LED);
P0=0x7e;
Delay(DELAY_LED);
P1=0xe7;
Delay(DELAY_LED);
P1=0xdb;
Delay(DELAY_LED);
P1=0xbd;
Delay(DELAY_LED);
P1=0x7e;
Delay(DELAY_LED);
i_7++;
break;
case 8:
CloseAll();
P0=0x55;
Delay(DELAY_LED);
P0=~P0;
Delay(DELAY_LED);
P1=0x55;
Delay(DELAY_LED);
P1=~P0;
Delay(DELAY_LED);
break;
case 9:
LED17=0;
P0=a;
P2=b;
Delay(1000);
a=_crol_(a,1);
b=_crol_(b,1);
P0=0xff;
P2=0xff;
break;
case 10:
CloseAll();
P0=0x55;
Delay(200);
P0=0xff;
Delay(200);
P2=0x55;
Delay(200);
P2=0xff;
Delay(200);
break;
case 11:
ringt_4();
lift_4();
move_2();
break;
case 12:
LED1 = 0x0000;
LED2 = 0x0000;
LED17 = 0;
Delay(200);
LED1 = 0xFFFF;
LED2 = 0xFFFF;
LED17 = 1;
Delay(200);
break;
case 13:
ou();
ji();
break;
case 14:
LED1 = 0x0000;
LED2 = 0x0000;
LED17 = 0;
Delay(800);
LED1 = 0xFFFF;
LED2 = 0xFFFF;
LED17 = 1;
Delay(800);
break;
default:
Flow_Mode = 1;
break;
}
}
void main()
{
P0=0xff;
while(1)
{
Way();
KEY_Scan();
}
}