docs

a slatepencil documentail site

View on GitHub

Audio Experiment

hardware

wire

/************************
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;
    }
}