السلام عليكم جميعاً
هذا كود لاصدار صوت من خلال البك وارغب بالحصول على شرح له ولكن
(سطر سطر ) حيث ان استيعابي بطي شيئا ما
void tone1 (){ sound_play(659,250);}
void tone2 (){ sound_play(698,250);}
void tone3 (){ sound_play(784,250);}
void melody(){
tone1();tone2();tone3();tone3();
tone1();tone2();tone3();tone3();
tone1();tone2();tone3();
tone1();tone2();tone3();tone3();
tone1();tone2();tone3();
tone3();tone3();tone2();tone2();tone1();
}
void main(){ دالة معروفة لا داعي لشرحها
trisc=0; لا داعي للشرح هنا
portc=0; لا داعي للشرح هنا
(sound_init(&portc,1
portc.f1=1; لا داعي ايضا للشرح
melody(){
(delay_ms(50 لا داعي للشرح
portc.f1=0; لا داعي للشرح
}
ارجو شرح مطول للسطر الاحمر (لو تكرمتم)
بالله عليكم
شرح سطر سطر
شرح قيم الارقام الموجودة 659 و 698 و 784 في الدالة tone
سؤال يهمني ايضاً
عندما اغير قيمة تردد البك من 1 الى 4 يصبح الصوت غير مفهوم(سريع جدا) ولدي مشروع اقوم انشاء الله بتجهيزه ولكن انا ملزم بقيمة ال 4 لتردد البك المستخدم فماذا علي فعله
لقد اكثرت عليكم ولكن املي كبير
|
لنبدء بالسؤال الذي يهمك أولا :
عند فتح برنامج ال mikroc في البداية لعمل برنامج جديد أي مشروع جديد
يكون المذبذب مضبوط على 1mhz فاذا كنا سوف نعمل على مذبذب مختلف
وليكن 4mhz فلابد من تغيير المذبذب قبل أن نعمل compil أي قبل تحويل البرنامج الى HEX وليس بعد ال compil
فاذا كنا قد عملنا compil ثم أردنا تغيير المذبذب لا بد من عمل compil مرة أخرى أي اذا غيرنا أي شيئ في البرنامج فلا يصبح ساري المفعول الا اذا عمنا compil
ملاحظة :
ان تغيير قيمة الذبذب في ال proteus لا تعني أننا غيرنا المذبذب
ان
(sound_init(&portc,1
تعني اجعل الرجل رقم 1 من ال portc مخرج للصوت
ان الاسطر التالية هي نفس السطر مكرر مع تغيير المعطيات:
void tone1 (){ sound_play(659,250);}---0
void tone2 (){ sound_play(698,250);}----0
void tone3 (){ sound_play(784,250);}----0
قبل أن أشرح معنى هذه الاسطر سوف أوضح كيف يعمل ال mikroc
ان ال mikroc يعمل بشئ يسمى الدوال وبما أنك تعرف دالة main فلا داعي لشرح الدوال
هنا sound_play هي دالة تولد الصوت فماذا نحتاج لتوليد صوت معين
نحتاج الا شيئين هما ذبذبة الصوت و مدة هذا الصوت فمثلا :
sound_play(659,250)----0 تعني ولد صوت بذبذبة 659hz لمدة 250ms
بمعنى ولد صوت ذو ذبذبة 659 هرتز(أي هزة في الثانية) لمدة ربع ثانية
سمينا هذا البرنامج tone1 عند تنفيذ هذا البرنامج لا يرجع لنا قيمة عددية لذالك لا نحتاج مكان للتخزين فنكتب void
أي كلمة void تعني لا تحجز مكان في الذاكرة الحية RAM
الان ادا أردنا أن نصدر صوت بذبذبة 659 هرتز لمدة ربع ثانية نكتب فقط tone1
طبعا لايمكن سماع شيء في مدة ربع ثانية لذالك لابد من تكرار هذه الدالة tone1
لعدة مرات هكذا مثلا : tone1;tone1; tone1; tone1.........
طبعا هنا سوف نحصل على نفس الصوت .
لنحصل على صوت جميل أي نغمى موسيقية عرفنا أصوات بذبذبات مختلفة tone1 و tone2 و tone3
وقمنا باستدعائهم بترتيب معين فتعطي نغمة معينة فاذا غيرنا الترتيب تتغير النغمة
الان سمينا هذا الترتيب المعين melody
ان كل ما سبق هو تعريفات للدوال فاذا أردنا اصدار الصوت نقوم باستدعاء الدالة
وذلك بكتابة اسمها فقط
الان اذا أردنا اصدار هذا الصوت نكتب كلمة واحدة وهي اسم الدالة melody();---0 داخل دالة main
ملاحظة :
ان ( 0---------) لا تعني شيئ لتسهيل الكتابة فقط