التدريب على المكتبة :
تدريب بسيط يبين طريقة استخدام مكتبة الصوت فى تشغيل نغمات فى سماعة بيزو .
الدائرة الكهربية :
البرنامج :
التعليق على البرنامج :
1- الإعلان عن دوال أو روتينات (برامج فرعية) للنغمات :
· دالة باسم Tone1 " النغمة الأولى" وفيها نستخدم الدالة Sound_Play "تشغيل صوت" بتردد 659Hz وفترة دوام 250ms. وبالمثل لباقى دوال النغمات .
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
}
· الإعلان عن دالة الميلودى Melody أى توزيع وتناسق النغمات حسب الرغبة .
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();
}
· الإعلان عن نغمات ToneA و ToneC وToneE:
void ToneA() {
Sound_Play( 880, 50);
}
void ToneC() {
Sound_Play(1046, 50);
}
void ToneE() {
Sound_Play(1318, 50);
}
· الإعلان عن توزيع آخر Melody2 بتكرار ToneA(); ToneC(); ToneE(); تسع مرات بدءا من i = 9; وتنتهى عند i > مع تناقص i بواحد فى كل مرة (9-8-7-6-5-4-3-2-1)
void Melody2() {
unsigned short I;
for (I = 9; I > 0; i--) {
ToneA(); ToneC(); ToneE();
}
}
2- الدالة الرئيسية :
void main() {
· إعدادات الأطراف
ANSEL = 0; // Configure AN pins as digital
ANSELH = 0;
TRISB = 0xF8; // Configure RB7..RB3 as input = 0b11111000
· أعداد الصوت للخروج من الطرف RB3
Sound_Init(&PORTC, 3);
· افتتاحية : الحالة الابتدائية : تشغيل صوت بتردد 880Hz لمدة ثانية
Sound_Play(880, 1000); // Play sound at 880Hz for 1 second
· إنشاء حلقة غير منتهية
while (1) {
· عند الضغط على المفتاح المتصل بالطرف RB7 يتم تشغيل النغمة الأولى
if (Button(&PORTB,7,1,1)) // RB7 plays Tone1
Tone1();
· انتظر حتى تحرير المفتاح أى حتى يمكنك تشغيل نغمة أخرى يجب ان يتم تحرير المفتاح الحالى
while (RB7_bit) ; // Wait for button to be released
· كرر النغمة الثانية بالمفتاح المتصل بالطرف RB6
if (Button(&PORTB,6,1,1)) // RB6 plays Tone2
Tone2();
while (RB6_bit) ; // Wait for button to be released
· كررللنغمة الثالثة بالمفتاح المتصل بالطرف RB5
if (Button(&PORTB,5,1,1)) // RB5 plays Tone3
Tone3();
while (RB5_bit) ; // Wait for button to be released
· المفتاح RB4 يقوم بتشغيل Melody2
if (Button(&PORTB,4,1,1)) // RB4 plays Melody2
Melody2();
while (RB4_bit) ; // Wait for button to be released
· المفتاح RB3 يقوم بتشغيل Melody
if (Button(&PORTB,3,1,1)) // RB3 plays Melody
Melody();
while (RB3_bit) ; // Wait for button to be released
}
}