بعد ان تعلمنا معاً الاعداد الثنائية و كيفية الحويل بينها و فهمنا خصائص و عمل منفذ الطابعة , ننتقل الى القسم البرمجي من الدورة, كما ذكرت في السابق, سأشرح طريقة التحكم برمجيا بواسطة الفجوال بيسك, لاسباب كثيرة منها انه سهل و سريع و ايضا لان اغلب الناس يعرفون الفجول بيسك اكثر من غيره , حتى غير المبرمجين , يعرفون او يسمعون بالفجول بيسك اكثر من غيره.
قبل البدء احب ان اذكر بعض الملاحظات التي سيواجهها البعض , و لتوفير وقت طرح اسئلة المشاكل التي قد تواجه البعض فاذكر النقطتين التاليتين:
1. اولا نحتاج الى مكتبة يستطيع من خلالها الفجول بيسك ان يتعامل مع منفذ الطابعة , هي عبارة عن ملف تستطيعون انزاله من الرابط التالي
اضغط هنا
ملاحظة هامة : الملف هذا يجب وضعه في مجلد العمل , يعني اول ما تفتح ملف جديد في الفجول بيسك , احفظه على طول و حطه في مجلد معين , و حط الملف ايضا في نفس المجلد, هذا كل مافي الامر!
2. لن تعمل المكتبة مع الوندوز 2000 او الوندوز اكس بي, ستعمل ان شاء الله في الوندوز ملنيوم و 98.
لنبدأ العمل بعون الله:
افتح ا لفجول بيسك و اختر standard EXE و اضغط على open
اضف الى الفورم الذي تراه امامك زرين امر (command buttons) وغير الcaption
الان يجب اضافة module و هو بالضغط باليمين على كلمة project في القائمة الموجودة على اليمين
الان نكتب التالي في داخل الmodule
Public Declare Sub Out Lib "inpout32.dll" Alias _
"Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
يفضل نسخ الجملة في الاعلى بل اطلب نسخة حتى لا تظهر مشاكل تعود لعدم كتابته بالطريقة الصحيحة.
لنشرح الكود الآن:
الكوماند الاول هو زر ( شغل) و يحتوي على الكود التالي:
Out &H378, 1
out هو الامر الذي ينفذ اخراج الفولت و التحكم فيه ( كما ذكرنا صفر وواحد , يعني تشغيل و اغلاق فقط- حاليا)
&H378, هو العنوان المراد التحكم به, و هو عنوان منفذ الطابعة الديفولت في اغلب الاجهزة و الارقام هي بنظام السداسي العشري( الهكس)
1 , هو الرقم بالنظام العشري , وهنا هو بيت القصيد, هنا نغير الرقم بحسب حاجتنا, اذا اردنا تشغيل D1 فقط فنكتب 1 ,و اذا اردنا مثلا تشغيل D1 and D2 and D3 يعني بالعدد الثنائي 111 و بتحويلها الى النظام العشري نحصل على الرقم 7 , نضعه مكان الرقم 1 و ستعمل الابر الثلاث ان شاء الله ( اعتقد بدأ الان الاخوان يربطون بين الدروس الماضية).
الكوماند الثاني هو لاغلاق جميع ما تم تشغيله من ابر, بالتصفير, لاحظوا هنا , اننا نغلق كل شي و ليس شيئا واحد او ابرة واحدة.
الامر الاخير هو امر ينفذ مع بداية تشغيل البرنامج , في اغلب الاحيان عند توصيل منفذ الطابعة و تشغيل الكمبيوتر تكون جميع المنافذ مشتغلة و تعطي 5 فولت بشكل افتراضي , فيجب تصفيرها في البداية حتى نتحكم بها بالشكل المطلوب.
اذا فرضنا اننا بعد تشغيل D1 and D2 and D3 اردنا ان نغلق D3 و نبقي على البقية يعملون , ماذا نفعل؟؟ هذا السؤال انتظر الاجابة عليه بعد قراءة الدرس لاعلم مدى استيعابكم.
اعتقد ان الامور اتضحت اكثر و اكثر الان, كل ماعلينا هو التأكد من ذلك بشكل عملي, و توصيل كيبل الى منفذ الطابعة و بعد الانتهاء من البرمجة او المثال المذكور, نوصل ال voltmeter بمنفذ الطابعة , وصلة نوصلها بالابرة الثانية و الوصلة الاخرى نوصلها بالابرة رقم 25 و نشغل البرنامج و نرى تغيير الفولت فيه. صورة للvoltmeter موجودة هنا:
يمكن توصيل LED الى الابر التي ذكرتها و عند تشغيل البرنامج بنجاح سيضيء الLED و عند الضغط على اغلاق سيطفأ الLED
**** الاخوة المبتدئين لا تقرأوا هذه الفقرة لانكم لن تحتاجونها و يمكن تزيد التعقيد ان وجد****
وحتى لا نظلم اصحاب الانظمة الاخرى مثل اللنكس , فاني وجدت كود للغة السي ( لم اجرب الطريقة لكنني وجدتها في احد المواقع)
#include
#include
#include
#include
#define base 0x378 /* printer port base address */
#define value 255 /* numeric value to send to printer port */
main(int argc, char **argv)
{
if (ioperm(base,1,1))
fprintf(stderr, "Couldn't get the port at %xn", base), exit(1);
outb(value, base);
}
الان احفظ الملف باي اسم و ليكن lpt_test.c ثم نفذ الامر التالي:
gcc -O lpt_test.c -o lpt_test
تكد من انك الرووت, و نفذ الامر التالي:
chmod +s lpt_test
و شغل البرنامج و ان شاء الله سيعمل معك , مع العلم ان الرقم 255 هو الرقم العشري بمعنى ان كل الابر ستعمل وقتها , غير القيمة الى اي قيمة تريدها حتى تملك التحكم الاكبر.
**** انتهت فقرة التعقيد****
هنا نكون قد وصلنا الى نهاية الدرس الثالث و اعتقد ان بعض الاسئلة و الاستفسارات التي كانت موجودة قبل الوصول لهذه المرحلة قد تمت الاجابة عليها , و ان شاء الله في نهاية الدورة ستتضح كل الامور الغامضة في هذا الموضوع.
|