/************************
AT89S51
Audio Fountain
OSC 11.0592 MHz
*************************/
#include <reg52.h>
sbit led1 = P1 ^ 0;
sbit led2 = P1 ^ 1;
sbit led3 = P1 ^ 2;
sbit led4 = P1 ^ 3;
sbit led5 = P1 ^ 4;
sbit led6 = P1 ^ 5;
sbit led7 = P1 ^ 6;
sbit led8 = P1 ^ 7;
sbit voice = P2 ^ 0;
unsigned long level1 = 0;
void timer0_init()
{
TMOD = 0x01; // T0 mode set to 1
TH0 = 0xDC; // init 10ms
TL0 = 0x00;
EA = 1; // open general interrupt
ET0 = 1; // open timer interrupt
TR0 = 1; // open timer T0
}
void main()
{
P1 = 0xff; // turn off all leds
timer0_init();
while (1)
{
if (voice == 0)
{
led1 = voice;
}
if ((led1 == 0) && (level1 >= 1))
{
led2 = 0;
}
if ((led2 == 0) && (level1 >= 2))
{
led3 = 0;
}
if ((led3 == 0) && (level1 >= 3))
{
led4 = 0;
}
if ((led4 == 0) && (level1 >= 4))
{
led5 = 0;
}
if ((led5 == 0) && (level1 >= 5))
{
led6 = 0;
}
if ((led6 == 0) && (level1 >= 6))
{
led7 = 0;
}
if ((led7 == 0) && (level1 >= 7))
{
led8 = 0;
}
if (level1 == 0)
{
P1 = 0xff;
}
}
}
void timer0() interrupt 1
{
TH0 = 0xDC; // set init as 10ms
TL0 = 0x00; // detect sound every 10ms, if has voice, upgrade
if (voice == 0)
{
level1++;
}
else
{
level1 = 0;
}
}