 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:
|
|
24-04-2015, 12:45 PM
المشاركة 20
|
|
دليل ربط شاشة LCD نوع 2X16 بالميكروكونترولر PIC16F877A مع استخدام المترجم CCS C :
دليل ربط شاشة 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++;
}
}

http://fathallaabdelaziz.forumarabia.com/t131-topic#335
|