دليل ربط شاشة LCD نوع 2X16 بالميكروكونترولر PIC16F877A مع استخدام المترجم CCS C :

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

دليل ربط شاشة LCD نوع 2X16 بالميكروكونترولر PIC16F877A مع استخدام المترجم CCS C :

مُساهمة من طرف Admin في الجمعة أبريل 24, 2015 9:42 am




دليل ربط شاشة LCD نوع 2X16 بالميكروكونترولر PIC16F877A مع استخدام المترجم CCS C :



المحتويات :
• توصيل الهاردوير .
• الملف LCD.C .
• أمثلة .
أولا : توصيل الهارد وير :
1- الملف LCD.C قائم على توصيل شاشة LCD فى وضع 4-bit ، والذى يستخدم فقط الأربعة أطراف العليا لبيانات وحدة شاشة LCD ( الأطراف DB4,DB5,DB6,DB7) .
2- الملف LCD.C يجعل الوضع الافتراضى لجميع التوصيلات إلى المنفذ Port D . إذا رغبت فى استخدام المنفذ Port B ، عندئذ فإن السطر التالى :
#define use_portb_lcd TRUE
ينبغى أن يكون فى برنامجك قبل أن يتم ضم الملف LCD.C .
3- المخطط التالى يبين كيفية التوصيل :



ثانيا : الملف LCD.C :
• الملف LCD.C يأتى ضمن برمجيات المترجم CCS C  فى المسار Program Files/PICC/Drivers .
• بضم هذا الملف فى مقدمة برنامجك يمكنك استخدام الدوال التالية :
1- الدالة lcd_init() . وينبغى أن تكون فى الدالة الرئيسية main() تلى أى إعلانات لمتغيرات . هذه الدالة تقوم بتهيئة وحدة شاشة LCD وبالتالى يجب تشغيلها قبل تشغيل أى دالة أخرى لها علاقة بعمل وحدة LCD .
2- الدالة lcd_putc(c) . والتى تقوم بعرض الحرف ‘c’ فى الموضع التالى بوحدة LCD ، على سبيل المثال lcd_putc(‘H’); تعرض الحرف H (لاحظ وجود الحرف المفرد داخل أقواس مفردة).
• إذا كان الحرف هو ‘\f’ عندئذ يتم مسح الشاشة ،
• وإذا كان الحرف  هو ‘\n’ عندئذ يتم الذهاب إلى السطر رقم “2” ،
• وإذا كان الحرف  هو ‘\b’ فإن المؤشر يتحرك للخلف لموقع واحد .
• هذه الدالة تعمل أيضا مع السلاسل النصية ، على سبيل المثال lcd_putc(“Hello world”); تطبع سلسلة الحروف Hello world (لاحظ وجود السلسلة النصية أى الحروف المتعددة داخل أقواس مزدوجة).
3- الدالة lcd_gotoxy(x,y) ، والتى تستخدم فى تحريك المؤشر الرأسى إلى أى موقع فى السطر رقم “1” (إذا كان y=1) أو فى السطر رقم “2” (إذا كان y=2) ، على سبيل المثال : lcd_gotoxy(8,2); تنقل المؤشر إلى موضع الحرف “8” بالسطر رقم “2” .
4- الدالة lcd_getc(x,y) ، والتى تعيد الحرف المعروض على السطر “y” والموقع “x” ، على سبيل المثال : digit = lcd_getc(8,2); ، تعين المتغير digit بالقيمة المعروضة على السطر “2” والموضع “8” .

ثالثا :  أمثلة :
البرنامج الأساسى :  عرض كلمات الترحيب


الكود:


#include <16f877A.h>
#use delay (clock = 20000000)
#include <lcd.c>

void main()
{
   int i=0;
  
   lcd_init();
   Delay_ms(100);
  
   while(TRUE)
   {
     lcd_putc('\f'); //Clear Display
     lcd_putc("Hello World");
     Delay_ms(2000);
     lcd_putc('\f'); //Clear Display
     lcd_putc("Welcome To");
     lcd_gotoxy(1,2);
     lcd_putc("LCD Library");
     Delay_ms(2000);
     lcd_putc('\f');
     printf(lcd_putc,"Count = %d", i);
     Delay_ms(2000);
     i++;
   }
}



النتيجة :



ملاحظة هامة :
1- لتغيير أطراف توصيل وحدة LCD بأطراف الميكروكونترولر يجب إعلان إعادة تعريف الأطراف الجديدة فى بداية البرنامج حتى قبل توجيه الضم #include<16F877A> كما يلى :


الكود:


/LCD Module Connections  
#define LCD_RS_PIN      PIN_D1                                  
#define LCD_RW_PIN      PIN_D2
#define LCD_ENABLE_PIN  PIN_D3
#define LCD_DATA4       PIN_D4                                    
#define LCD_DATA5       PIN_D5                                    
#define LCD_DATA6       PIN_D6                          
#define LCD_DATA7       PIN_D7
//End LCD Module Connections

#include <16f877a.h>
#use delay (clock = 20000000)
#include <lcd.c>



void main()
{
   int i=0;
  
   lcd_init();
   Delay_ms(100);
  
   while(TRUE)
   {
     lcd_putc('\f'); //Clear Display
     lcd_putc("Hello World");
     Delay_ms(2000);
     lcd_putc('\f'); //Clear Display
     lcd_putc("Welcome To");
     lcd_gotoxy(1,2);
     lcd_putc("LCD Library");
     Delay_ms(2000);
     lcd_putc('\f');
     printf(lcd_putc,"Count = %d", i);
     Delay_ms(2000);
     i++;
   }
}



2- لتغيير منفذ التوصيل ليكون المنفذ Port B ،على سبيل المثال ، نستخدم الصيغة التالية :



الكود:


/*LCD Module Connections  
#define LCD_RS_PIN      PIN_D1                                  
#define LCD_RW_PIN      PIN_D2
#define LCD_ENABLE_PIN  PIN_D3
#define LCD_DATA4       PIN_D4                                    
#define LCD_DATA5       PIN_D5                                    
#define LCD_DATA6       PIN_D6                          
#define LCD_DATA7       PIN_D7
//End LCD Module Connections*/

#define use_portb_lcd TRUE

#include <16f877a.h>
#use delay (clock = 20000000)
#include <lcd.c>
 



void main()
{
   int i=0;
  
   lcd_init();
   Delay_ms(100);
  
   while(TRUE)
   {
     lcd_putc('\f'); //Clear Display
     lcd_putc("Hello World");
     Delay_ms(2000);
     lcd_putc('\f'); //Clear Display
     lcd_putc("Welcome To");
     lcd_gotoxy(1,2);
     lcd_putc("LCD Library");
     Delay_ms(2000);
     lcd_putc('\f');
     printf(lcd_putc,"Count = %d", i);
     Delay_ms(2000);
     i++;
   }
}
 






Admin
Admin

عدد المساهمات : 1003
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى