بسم الله الرحمن الرحيم
أخي الكريم m_mansour2005
من المعلوم أن هناك طريقتين شهيرتين لاستخدام معظم أنواع LCD
الطريقة الأولى تسمى
4BIT INTERFACE والطريقة الثانية تسمى
8BIT INTERFACE
الطريقة الأولى هي التي كتبت بها أنت هذا الكود .
كود:
void main()
{
int x[5];
int z;
unsigned char i;
TRISB=0;
LCD_INIT(&PORTB);
start:
lcd_chr_cp('m');
delay_ms(900);
lcd_chr_cp('o');
delay_ms(900);
lcd_chr_cp('h');
delay_ms(900);
lcd_chr_cp('a');
delay_ms(900);
lcd_chr_cp('m');
delay_ms(900);
lcd_chr_cp('e');
delay_ms(900);
lcd_chr_cp('d');
lcd_cmd(lcd_clear);
goto start;
}
|
هذه الطريقة تعتمد على أربع أطراف لنقل البيانات بالإضافة إلى ثلاث أطراف للتحكم هم RS,E,R/W
أما الطريقة الثانية
8BIT_INTERFACE
فهي تعتمد على 8 أطراف لنقل البيانات بالإضافة إلى ثلاث أطراف للتحكم ( RS,E,R/W )
غالبا ما يسأل الناس الذين يستخدمون الطريقة الثانية عن كيفية استخدام الطريقة الأولى لتوفير الأسلاك والأطراف .
مع العلم أن هناك أنواع كثيرة من LCD تعمل بالطريقتين ومنها ما يعمل بطريقة واحدة فقط .
(انتهت المقدمة)
======================
بالنسبة للكود الذي كتبته أخي الكريم فهو أولا يحتوي على خطأ بسيط
فكان يجب عليك أن تضيف السطر
بعد الأمر
لكي يظهر حرف
d لأنه بهذه الطريقة لن يلاحظ ظهوره .
=====================
الأمر الثاني : بالنسبة لطريقة استخدام
8bit_interface ففي لغة مايكروسي الأمر في غاية السهولة كل ما ستفعله هو إضافة الرقم 8 فقط لأوامرك ..
كيف ذلك ؟؟
ولتوضيح ذلك انظر للأمثلة التالية :-
كود:
lcd_chr_cp('m');
سيصبح كما يلي :
lcd8_chr_cp('m');
============
lcd_cmd(lcd_clear);
سيصبح كما يلي :
lcd8_cmd(lcd_clear);
============
lcd_out(1,1,text);
سيصبح كما يلي :
lcd8_out(1,1,text);
===========
وهكذا مجرد إضافة الرقم ثمانية
الشيء الثاني الذي سيختلف هو أمر التهيئة
هذا الأمر كما تعلم سيقوم بإخبار البك بأن الشاشة موصلة بـ Portb بالطريقة التالية:
D7 → portb.7
D6 → portb.6
D5 → portb.5
D4 → portb.4
E → portb.3
RS → portb.2
RW → portb.0
طبعا مع إمكانية توصيل RW بالأرضي .
أما في الطريقة الثانية فنحن نحتاج لأن نحدد للبك أطراف أكثر من ذلك ليس مجرد PORT واحد فقط . فكما أخبرتك نحتاج لثمان أطراف لإرسال البيانات بالإضافة إلى ثلاثة أطراف للتحكم . إذن نحتاج إلى بورتين 2PORTs .
إذن يمكننا أن نكتب الأمر التالي :
كود:
Lcd8_Init(&PORTB, &PORTC);
وهذا يعني أننا قمنا بالتوصيلات كما يلي :-
E → PORTB.6
RS → PORTB.4
R/W → PORTB.5
D7 → PORTC.7
D6 → PORTC.6
D5 → PORTC.5
D4 → PORTC.4
D3 → PORTC.3
D2 → PORTC.2
D1 → PORTC.1
D0 → PORTC.0
وفي هذه الحالة يسمى portb بـ بورت التحكم ctrlport ويسمى portc بورت البيانات dataport .
================
بقي أن تعرف أنه في حالة أننا أردنا أن نقوم بتوصيل الأطراف بشكل مختلف كما نريد فإننا نقوم باستخدام الأمر التالي :
وإذا كتبنا هذا الأمر فإننا لا نحتاج إلى الأمر Lcd8_Init
وإليك المثال التالي :-
كود:
Lcd8_Config(&PORTA,&PORTB,0,1,2,7,6,5,4,3,2,1,0);
هذا الأمر يعني أننا قمنا بالتوصيلات كما يلي :-
E → PORTA.1
RS → PORTA.0
R/W → PORTA.2
D7 → PORTB.7
D6 → PORTBt.6
D5 → PORTB.5
D4 → PORTB.4
D3 → PORTB.3
D2 → PORTB.2
D1 → PORTB.1
D0 → PORTB.0
ويمكنك تغيير هذا الأرقام بتغيير الأمر كما تشاء .
======================================
وللعلم فإن الأمر السابق يمكن استخدام أمر شبيه به في 4bit_interface . ولكن بدون الرقم 8 . وإليك المثال التالي :
كود:
Lcd_Config(&PORTB, 0, 1, 7, 5, 4, 3, 2);
هذا الأمر يعني أننا قمنا بالتوصيل كما يلي :-
RS → PORTA.0
E → PORTA.1
R/W → PORTA.7
D7 → PORTB.5
D6 → PORTBt.4
D5 → PORTB.3
D4 → PORTB.2
======================================
لمزيد من المعلومات عن كيفية استخدام الطريقتين اضغط على المفتاحF1 في مايكروسي ثم اختار mikroC Libraries ثم اختار LCD8 (8-bit interface) Library او اختار LCD (4-bit interface
وبالتوفيق ,,
======================================
لقد قمت بإعداد مجموعة من الأمثلة لاستخدام 8bit_interface لمجموعة مشهورة من أنواع البك pic16f84a,pic16f628a,pic16f877a ووضعت ملف المحاكاة وملفات الكود الخاصة بذلك يمكنك الإطلاع عليها للإستفادة .. علما أنني وضعت الكود الذي وضعته أنت وقمت بعمل التعديل اللازم عليه ليتماشى مع هذه الطريقة .
يمكنك تحميل الملف من هنا
=====================================
وفقنا الله جميعا لما يحب ويرضى ورزقنا وإياكم العلم النافع والعمل الصالح
والسلام عليكم ورحمة الله وبركاته