3- الدالة الرئيسية : ونبدءها بإعدادات الميكروكونترولر :
void main() {
# تهيئة الطرف RA0/AN0 كمدخل تناظرى وباقى الأطراف كمداخل / مخارج رقمية
ADCON1 = 0b00001110 ; // RA0/AN0 is analog input
# تخصيص موديول المحول داخليا للقناة AN0 .
ADCON0 = 0 ; // Analog channel select * AN0
# تهيئة جميع أطراف المنفذ PORTB والمنفذ PORTA كمخارج فيما عدا طرف الدخل التناظرى AN0
TRISB = 0b00000000; // PORTB All Outputs
TRISA = 0b00000001; // PORTA All Outputs, Except RA0
· بعد ذلك تهيئة وحدة العرض LCD لبدء العمل
Lcd_Init(); // Initialize LCD
· ومسح الشاسة
Lcd_Cmd(_LCD_CLEAR); // CLEAR display
· ومنع ظهور (عرض) المؤشر على الشاشة
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
· ثم كتابة الرسالة الثابتة وهى الرسالة الأولى : DVM Project بدءا من الصف الأول والعامود الأول
Lcd_Out(1,1,Message1);
· ثم كتابة حرف V فى الصف الثانى والعامود العاشر لتظهر بعد قيمة الجهد .
Lcd_Chr(2,10,'V');
· الدخول فى الحلقة الغير منتهية do{…} while(1) حيث يتم تنفيذ :
do {
# قراءة المدخل التناظرى من القناة رقم 0 ونسخ نتيجة التحويل إلى سجل المتغير ADC_Value .
ADC_Value = ADC_Read(0);
# ضرب محتويات سجل المتغير ADC_Value فى 2 ونسخ النتيجة لسجل المتغير DisplayVolt ( على سبيل المثال 0462 )
DisplayVolt = ADC_Value * 2;
· الحصول على العدد الصحيح لخانة الآلاف : بالقسمة على 1000 وإضافة العدد 48 لتحويل العدد السابق لكود أسكى ونسخ العدد فى الخانة رقم 0 للمتغير volt ( 0462 / 1000 = 0 كعدد صحيح ).
volt[0] = DisplayVolt/1000 + 48;
· الحصول على العدد الصحيح للمئات : بقسمة محتويات سجل المتغير DisplayVolt على 100 ثم إيجاد باقى قسمة النتيجة على 10 . ثم يضاف العدد 48 للتحويل إلى كود أسكى وتخزين النتيجة بالخانة رقم 1 بسجل المتغير volt ( 0462/100 =4 كعدد صحيح وباقى قسمة النتيجة على 10 هى العدد 4 المطلوب ) .
volt[1] = (DisplayVolt/100)%10 + 48;
· نكرر بالنسبة للعدد الصحيح للعشرات ( 0462 /10 = 46 كعدد صحيح وباقى قسمة النتيجة على 10 هى العدد 6 المطلوب "القسمة تساوى أربعة صحيح والباقى 6 وهو المطلوب )
volt[3] = (DisplayVolt/10)%10 + 48;
· ثم كتابة محتويات السجل volt بدءا من الصف الثانى والعامود الخامس
Lcd_Out(2,5,volt);
· التأخير لفترة 500 ملى ثانية للسماح بمشاهدة العرض .
delay_ms(500); // Hold for 500 ms
· تكرار العملية بصفة مستمرة لتحديث قراءة المدخل التناظرى والعرض .
} while(1);
} // End main()