Create Musical Tone using PIC Code

The mikroC PRO for PIC 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).

Library Routines

  • Sound_Init
  • Sound_PlayCreate Musical Tone using PIC Code


Prototypevoid Sound_Init(char *snd_port, char snd_pin);
DescriptionConfigures the appropriate MCU pin for sound generation.
Parameters :

  • snd_port: sound output port address
  • snd_pin: sound output pin
// Initialize the pin RC3 for playing sound
Sound_Init(&PORTC, 3);


Prototypevoid Sound_Play(unsigned freq_in_hz, unsigned duration_ms);
DescriptionGenerates 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.
RequiresIn 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.
// Play sound of 1KHz in duration of 100ms
Sound_Play(1000, 100);

Code Example

The example is a simple demonstration of how to use the Sound Library for playing tones on a piezo speaker.
 Create Musical Tone using PIC Code schematich
void Tone1() {
  Sound_Play(659, 250);   // Frequency = 659Hz, duration = 250ms

void Tone2() {
  Sound_Play(698, 250);   // Frequency = 698Hz, duration = 250ms

void Tone3() {
  Sound_Play(784, 250);   // Frequency = 784Hz, duration = 250ms

void 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();

void ToneA() {
  Sound_Play( 880, 50);
void ToneC() {
  Sound_Play(1046, 50);
void ToneE() {
  Sound_Play(1318, 50);

void Melody2() {
  unsigned short i;
  for (i = 9; i > 0; i--) {
    ToneA(); ToneC(); ToneE();



For more detail: Create Musical Tone using PIC Code

Current Project / Post can also be found using:

  • how to use a micro controller to play a tone
  • pic chips music

Leave a Comment

= 3 + 7

Read previous post:
Project Ryu Lagger Guitar Pedal Take 3 using pic microcontoller

It has been a quiet period but a very busy period, very active and very fruitful. I will be launching...

Scroll to top