4- بداية الدالة الرئيسية :
void main() {
· نبدأ بتهيئة الميكروكونترولر :
# توصيل الطرف RA0/AN0 كمدخل تناظرى ليعمل مع موديول المحول ADC .
ADCON0 = 0 ; // Connect AN0 to ADC module
# تخصيص المدخل AN2 ليعمل مع موديول المحول A/D واختيار توصيل جهد المرجع الخارجى
ADCON1 = 0b00000101; // Select AN0, select Vref=AN3 = 1.19V
# تهيئة جميع أطراف المنفذ PORTC كمخارج .
TRISB = 0b00000000; // PORTB All Outputs
# وتهيئة جميع أطراف المنفذ PORTA كمخارج فيما عدا الأطراف RA3 و RA2فتهىء كمداخل
TRISA = 0b00001001; // PORTA All Outputs, Except RA0 and RA3
· تهيئة وحدة العرض LCD للبدء
Lcd_Init(); // Initialize LCD
· مسح الشاشة
Lcd_Cmd(_LCD_CLEAR); // CLEAR display
· منع عرض المؤشر على الشاشة
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
· إرسال (عرض) الرسالة message0 بدءا من الصف الأول والعامود الأول والتى تنص على LCD Initialized " تم تهيئة وحدة العرض LCD " والتأخير 1 ثانية لاستقرار التهيئة
Lcd_Out(1,1,message0);
Delay_ms(1000);
· عرض الرسالة message1 بدءا من السطر الأول والعامود الأول وتنص على
Room Temperature "درجة حرارة الغرفة أو المحيط"
Lcd_Out(1,1,message1); // Write message1 in 1st row
// Print degree character
· كتابة رمز درجة الحرارة بدءا من السطر الثانى والعامود السادس (المئوية)وفى السطر الثانى والعامود الخامس عشر (الفهرنيت)
Lcd_Chr(2,6,223);
Lcd_Chr(2,15,223);
// Different LCD displays have different char code for degree symbol
// if you see greek alpha letter try typing 178 instead of 223
· كتابة الحرف C فى السطر الثانى والعامود السابع أى بعد رمزها وحرف F فى السطر الثانى والعامود السداس عشر أى بعد رمزها .
Lcd_Chr(2,7,'C');
Lcd_Chr(2,16,'F');
· الدخول إلى حلقة غير منتهية do{…..}while(1) حيث يتم تنفيذ :
do {
# قراءة القيمة التناظرية من المدخل RA0/AN0 وتحويله إلى عدد رقمى ونسخ هذه النتيجة لسجل المتغير temp_value .
temp_value = ADC_Read(0);
· ثم الضرب فى المعامل 1168 (كما تم ذكره بأعلى) ونسج النتيجة إلى المتغير temp_value
·
temp_value = temp_value*1168;
· القسمة على 1000 ونسخ النتيجة لسجل المتغير tempinC
tempinC = temp_value/1000;
· الضرب فى 10 ونسخ النتيجة لسجل المتغير tempinC
tempinC = tempinC*10;
· التحويل من مئوى إلى فهرنيت
tempinF = 9*tempinC/5 + 3200;
· أخيرا استدعاء دالة عرض درحة الحرارة التى سبق إنشاءها فى البداية والتأخير لزمن قدره 1 ثانية للسماح للمحول A/D من أخذ عينة جديدة ومعالجتها وتحديث النتائج وعرضها .
Display_Temperature();
Delay_ms(1000); // Temperature sampling at 1 sec interval
} while(1);
}
النتائج :