Sound Library

The mikroBasic PRO for 8051 provides a Sound Library to supply users with routines necessary for sound signalization in their applications. Sound generation needs additional hardware, such as piezo-speaker (example of piezo-speaker interface is given on the schematic at the bottom of this page).

External dependencies of Sound Library

The following variables must be defined in all projects using Sound Library: Description: Example :
dim Sound_Play_Pin as sbit bdata sfr external Sound output pin. dim Sound_Play_Pin as sbit at P0_3_bit

Library Routines

Sound_Init

Prototype

sub procedure Sound_Init()

Returns

Nothing.

Description

Configures the appropriate MCU pin for sound generation.

Requires

Sound_Play_Pin variable must be defined before using this function.

Example
' Initialize the pin P0.3 for playing sound
dim Sound_Play_Pin  as sbit at P0_3_bit
...
Sound_Init()

Sound_Play

Prototype

sub procedure Sound_Play(dim byref freq_in_Hz as word, dim byref duration_ms as word)

Returns

Nothing.

Description

Generates the square wave signal on the appropriate pin.

Parameters :

  • freq_in_Hz: signal frequency in Hertz (Hz)
  • duration_ms: signal duration in miliseconds (ms)

Note: frequency range is limited by Delay_Cyc parameter. Maximum frequency that can be produced by this function is Freq_max = Fosc/(80*3). Minimum frequency is Freq_min = Fosc/(80*255). Generated frequency may differ from the freq_in_hz parameter due to integer arithmetics.

Requires

In order to hear the sound, you need a piezo speaker (or other hardware) on designated port. Also, you must call Sound_Init to prepare hardware for output before using this function.

Example
' Play sound of 1 kHz in duration of 100ms
Sound_Play(1000, 100)

Library Example

The example is a simple demonstration of how to use the Sound Library for playing tones on a piezo speaker.

program Sound

' Sound connections
dim Sound_Play_Pin as sbit at P0_3_bit
' End Sound connections

sub procedure Tone1()
  Sound_Play(659, 250)                     ' Frequency = 659Hz, duration = 250ms
end sub

sub procedure Tone2()
  Sound_Play(698, 250)                     ' Frequency = 698Hz, duration = 250ms
end sub

sub procedure Tone3()
  Sound_Play(784, 250)                     ' Frequency = 784Hz, duration = 250ms
end sub

sub procedure Melody()                     ' Plays the melody "Yellow house"
  Tone1() Tone2() Tone3() Tone3()
  Tone1() Tone2() Tone3() Tone3()
  Tone1() Tone2() Tone3()
  Tone1() Tone2() Tone3() Tone3()
  Tone1() Tone2() Tone3()
  Tone3() Tone3() Tone2() Tone2() Tone1()
end sub

sub procedure ToneA()                      ' Tones used in Melody2 function
  Sound_Play(880, 50)
end sub

sub procedure ToneC()
  Sound_Play(1046, 50)
end sub

sub procedure ToneE()
  Sound_Play(1318, 50)
end sub

sub procedure Melody2()                    ' Plays Melody2
dim i as byte

  i = 1
  for i = 1 to 9
    ToneA()
    ToneC()
    ToneE()
  next i
end sub

main:
  P1 = 255                                 ' Configure PORT1 as input
  Sound_Init()                             ' Initialize sound pin

  Sound_Play(2000, 1000)                   ' Play starting sound, 2kHz, 1 second

  while TRUE                               ' endless loop
    if (P1_7_bit = 0) then                 ' If P1.7 is pressed play Tone1
      Tone1()
      while ( P1_7_bit = 0)
        nop                                ' Wait for button to be released
      wend
    end if

    if ( P1_6_bit = 0) then                ' If P1.6 is pressed play Tone2
      Tone2()
      while ( P1_6_bit = 0)
        nop                                ' Wait for button to be released
      wend
    end if

    if ( P1_5_bit = 0) then                ' If P1.5 is pressed play Tone3
      Tone3()
      while ( P1_5_bit = 0)
        nop                                ' Wait for button to be released
      wend
    end if

    if ( P1_4_bit = 0 ) then               ' If P1.4 is pressed play Melody2
      Melody2()
      while ( P1_4_bit = 0 )
        nop                                ' Wait for button to be released
      wend
    end if

    if ( P1_3_bit = 0) then                ' If P1.3 is pressed play Melody
      Melody()
      while ( P1_3_bit = 0 )
        nop                                ' Wait for button to be released
      wend
    end if
  wend
end.

HW Connection

Example of Sound Library connection

Example of Sound Library connection

Copyright (c) 2002-2013 mikroElektronika. All rights reserved.
What do you think about this topic ? Send us feedback!
Want more examples and libraries? 
Find them on LibStock - A place for the code