قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

m_mansour2005
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2009
المشاركات: 80
نشاط [ m_mansour2005 ]
قوة السمعة:0
قديم 31-01-2009, 11:55 PM المشاركة 1   
افتراضي need information about lcd Twitter FaceBook Google+



بسم الله الرحمن الرحيم
فى الحقيقة هذه اول زيارة لى لهذا المنتدى الجميل واعجبنى جدا لذلك قمت بالتسجيل مباشرة وخاصة اننى اريد ان اسال عن شىء ولم اجد ما اريد حتى الان
سؤالى:

أريد تفاصيل عن كيفية استخدام lcd 2*16 بواسطة لغة الاسمبلى
فى الحقيقة انا قرات بعض البرامج ولم افهم شىء فانا معلوماتى عن ال lcd سطحية للاسف

ارجوا مراعاة التفاصيل عند الإجابة
وأتمنى منكم سرعة الرد


التعديل الأخير تم بواسطة : m_mansour2005 بتاريخ 06-02-2009 الساعة 08:47 PM
اعلانات

m_mansour2005
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2009
المشاركات: 80
نشاط [ m_mansour2005 ]
قوة السمعة:0
قديم 02-02-2009, 03:48 AM المشاركة 2   
افتراضي


أتمنى سرعة الرد
كل ما أريده هو برنامج بسيط للكتابة على LCD بواسطة الاسمبلى.
وليكن كتابة كلمة mohamed على الشاشة .
فقط اريد معرفة وظيفة كل سطر فى البرنامج .
انا اجيد لغة الاسمبلى . وحقيقة انا محتاج اتى اعرف وافهم طريقة الكتابة على LCD ضرورى. أتمنى سرعة الرد

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

crom
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2007
الدولة: بلدى
المشاركات: 130
نشاط [ crom ]
قوة السمعة:0
قديم 02-02-2009, 08:40 AM المشاركة 3   
افتراضي


بسم الله الرحمن الرحيم
ماعتقد ان فية حد يشرحلك كود طولة ( 800 ) سطر

الكود فى الاسفل باستخدام ميكرو بيسك وهو لايتعدى (9) اسطر فقط

program Lcd_default_test
dim text as char[20]

main:
TRISB = 0
Lcd_Init(PORTB)
Lcd_Cmd(Lcd_CURSOR_OFF)
text = "mohamed"
Lcd_Out(1, 1, text)
end.


m_mansour2005
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2009
المشاركات: 80
نشاط [ m_mansour2005 ]
قوة السمعة:0
قديم 02-02-2009, 06:56 PM المشاركة 4   
ha


أولا اريد ان اشكرك crom على هذا الرد.
انا مستعد لتعلم لغة السى من اجل استخدام ال lcd
,ولكن عندى بعض الاستفسارات.

1- هل تقصد ان كتابة هذا الكود الصغير بال ميكروسى قد يصل الى 800 سطر بالاسمبلى؟؟؟

2- أرجوا منك ان تقوم بشرح هذا الكود الصغير وتوضح وظيفة كل سطر فيه

3- هل هناك فرق بين استخدام pic 16f876a & pic 18f452 أقصد هل يحدث اى تغيير ما فى البرنامج المكتوب ام ان البرنامج مناسب لكل ال pics

وأرجوا منك سرعة الرد علما باننى بدأت فعليا بتعلم لغة السى.


التعديل الأخير تم بواسطة : m_mansour2005 بتاريخ 02-02-2009 الساعة 07:32 PM

زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 3,062
نشاط [ زكي شاكر ]
قوة السمعة:182
قديم 02-02-2009, 07:22 PM المشاركة 5   
افتراضي


البرنامج بالاسمبلي طويل جدا..لذلك تحول كثيرون الى لغة البيك بيزك او لغة c
مثال بالاسمبلي اعددته مستعينا ببعض البرامج وبعد عدة تحويلات استغرقت وقتا :

كود:
 
 
LIST p=16f84a; Définition de processeur
#include <p16f84a.inc>; Définitions de constantes
__CONFIG 0x3FF1
;*********************************************************************
;DEFINE
;********************************************************************* #DEFINE LCD_D7 PORTB,7
#DEFINE LCD_D6 PORTB,6 #DEFINE LCD_D5 PORTB,5 #DEFINE LCD_D4 PORTB,4 #DEFINE LCD_E PORTB,3 #DEFINE LCD_RS PORTB,0 ;***************************************************************************** ; VARIABLES BANQUE 0 * ;***************************************************************************** CBLOCK 0x0C LCDtmp : 1 LCDtmp2 : 1 LCDt1 : 1 LCDt2 : 1 LCDt3 : 1 LCDt4 : 1 ENDC
;*****************************************************************************
;DEMARRAGE SUR RESET
;***************************************************************************** org 0x000 ; Adresse de départ après reset
goto _init_ ; Adresse 0: initialiser
;*****************************************************************************
;Initialisation
;***************************************************************************** _init_
bcf STATUS,RP0 ;passage en banque 0 CLRF PORTA CLRF PORTB goto start ; sauter au programme principal
;*****************************************************************************
;* Routines de gestion LCD (mode 4 Bits - HD77480)
;***************************************************************************** LCDcls
movlw D'01' call LCDins goto LCDlo5 LCDcl21 movlw ' ' call LCDchar decfsz LCDtmp2,f goto LCDcl21 LCDhome movlw D'02' call LCDins goto LCDlo5 LCDlin1 movlw 0x80 call LCDins goto LCDlo5 LCDchar movwf LCDtmp call TEST_BF bsf LCD_RS call LCD_envoie_octet return LCDinit banksel TRISB bcf LCD_E bcf LCD_RS bcf LCD_D7 bcf LCD_D6 bcf LCD_D5 bcf LCD_D4 banksel PORTB bcf LCD_D7 bcf LCD_D6 bsf LCD_D5 bsf LCD_D4 bcf LCD_E bcf LCD_RS call LCDlo5 bsf LCD_E nop bcf LCD_E movlw d'252' movwf LCDt1 movlw D'04' call LCDlo2 bsf LCD_E nop bcf LCD_E call TEST_BF bsf LCD_E nop bcf LCD_E call TEST_BF bcf LCD_D4 bsf LCD_E nop bcf LCD_E movlw 0x028 call LCDins movlw 0x008 call LCDins movlw 0x00C call LCDins movlw 0x006 LCDins movwf LCDtmp call TEST_BF bcf LCD_RS call LCD_envoie_octet return LCD_envoie_octet bcf LCD_D7 bcf LCD_D6 bcf LCD_D5 bcf LCD_D4 btfsc LCDtmp,7 bsf LCD_D7 btfsc LCDtmp,6 bsf LCD_D6 btfsc LCDtmp,5 bsf LCD_D5 btfsc LCDtmp,4 bsf LCD_D4 bsf LCD_E nop bcf LCD_E bcf LCD_D7 bcf LCD_D6 bcf LCD_D5 bcf LCD_D4 btfsc LCDtmp,3 bsf LCD_D7 btfsc LCDtmp,2 bsf LCD_D6 btfsc LCDtmp,1 bsf LCD_D5 btfsc LCDtmp,0 bsf LCD_D4 bsf LCD_E nop bcf LCD_E return LCDlo2 movwf LCDt2 movlw D'01' movwf LCDt3 movwf LCDt4 LCDlo3 nop decfsz LCDt1 goto LCDlo3 decfsz LCDt2,f goto LCDlo3 decfsz LCDt3,f goto LCDlo3 decfsz LCDt4,f goto LCDlo3 return LCDlo4 movlw d'22' movwf LCDt1 movlw d'01' goto LCDlo2 LCDlo5 movlw d'156' movwf LCDt1 movlw D'15' goto LCDlo2 TEST_BF call LCDlo4 return
;*****************************************************************************
;Programme principal ;*****************************************************************************
start call LCDinit call LCDcls ; efface le lcd movlw "M" call LCDchar movlw "o" call LCDchar movlw "h" call LCDchar movlw "a" call LCDchar movlw "m" call LCDchar movlw "e" call LCDchar movlw "d" call LCDchar
fin goto fin
END ; directive fin de programme
كما ترى فهو طويل ..
مع Mikrobasic (لغة البيزك ) او MikroC (لغة السي) تكتب البرنامج ببضعة أسطر كما أخبرت من قبل ..
لماذا ؟
لان الكومبيلر هو من يتكلف بتحول الاسطر القليلة المكتوبة بالسي او البيك بيزك الى مايقابلها بالاسمبلي ثم الهيكس ، نيابة عنك ..


التعديل الأخير تم بواسطة : زكي شاكر بتاريخ 05-02-2009 الساعة 12:28 PM

m_mansour2005
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2009
المشاركات: 80
نشاط [ m_mansour2005 ]
قوة السمعة:0
قديم 02-02-2009, 07:45 PM المشاركة 6   
افتراضي


أولا اريد ان اشكرك crom على هذا الرد.
انا مستعد لتعلم لغة السى من اجل استخدام ال lcd
,ولكن عندى بعض الاستفسارات.

1- هل تقصد ان كتابة هذا الكود الصغير بال ميكروسى قد يصل الى 800 سطر بالاسمبلى؟؟؟

2- أرجوا منك ان تقوم بشرح هذا الكود الصغير وتوضح وظيفة كل سطر فيه

3- هل هناك فرق بين استخدام pic 16f876a & pic 18f452 أقصد هل يحدث اى تغيير ما فى البرنامج المكتوب ام ان البرنامج مناسب لكل ال pics

وأرجوا منك سرعة الرد علما باننى بدأت فعليا بتعلم لغة السى.
أتمنى الإجابة على بقية الاسئلة لو سمحتم


الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 725
نشاط [ ahmad_s_f ]
قوة السمعة:80
قديم 03-02-2009, 07:50 PM المشاركة 7   
Smile


بسم الله الرحمن الرحيم

أخي الكريم // أتمنى لك التوفيق في رحلتك لاستخدام LCD
وإليك الكود الذي من خلاله تستطيع استخدام LCD
بلغة mikroc

كود:
char *text = "m_mansour2005";

void main()
{
  TRISB = 0;
  Lcd_Init(&PORTB);
  Lcd_Out(1, 1, text);
}

هذه ببساطة هي الأوامر التي تجعلك تستطيع أن تعرض نص معين على LCD
وفي المثال السابق ستعرض اسمك أنت ...
m_mansour2005
أما الآن فإليك شرح الكود

أولا أي برنامج يمكنك أن تكتبه كما يلي
كود:
void main() { هنا تضع الكود الذي تريد ان ينفذه البك }
ومعنا هذا الأمر void main أن هذه الدالة الرئيسية للبرنامج التي سيبدأ البك تنفيذ الأوامر منها ... حيث نستطيع تقسيم أي برنامج إلى عدة دوال وسيقوم البك بتنفيذ الدالة الرئيسية أولا والتي بدورها تستطيع أن تستدعي بقية الدوال الأخرى .. إذا لم تفهم كلامي جيدا .... لا تقلق ... كل ما عليك أن تعرفه أننا نكتب الأوامر (الكود) بهذه الطريقة أي بين القوسين .. ونكتب في البداية السطر الذي أخبرتك به void main وبالطبع لا ننسى الأقواس فهي مهمة ...

الآن نذهب للأوامر الخاصة بتشغيل الـ LCD
أولا :
إننا في هذه التجربة سنوصل الشاشة بـ PORTB
لذلك سنوظف جميع الرجول pins التي في PORTB على أنها خرج وذلك باستخدام الأمر التالي


كود:
TRISB=0;
ثانيا : لابد من تهيئة الـ PIC وإخباره بأن الـ LCD ستوصل بـ PORTB وذلك عن طريق استخدام الأمر التالي
كود:
Lcd_Init(&PORTB);
وإذا كتبنا الأمر السابق فهذا يعني أننا سنوصل أطراف الشاشة بالشكل التالي


D7 → port.7
D6 → port.6
D5 → port.5
D4 → port.4
E → port.3
RS → port.2
RW → port.0


أما الأمر الأخير
كود:
Lcd_Out(1, 1, text);
فهو يأمر البك بعرض النص الذي كتبناه في أول سطر في البرنامج بين علامات التنصيص
وذلك في السطر الأول من الشاشة ........... لذلك كتبنا بعد القوس الذي في هذا الأمر 1
وفي العمود الأول من الشاشة ......... لذلك كتبنا بعد رقم السطر بعد علامة , رقم واحد

ولتوضيح الكلام السابق إذا أردت عرض نص معين في السطر الثاني والعمود الأول سأكتب الأمر التالي
كود:
Lcd_Out(2, 1, text);
هذه أبسط طريقة لعرض كلام معين على LCD
لعلك استنتجت من شرحي المتواضع أن أول سطر في البرنامج هو المسؤول عن ما سيعرض على الشاشة LCD أي أننا لعرض أي كلام نكتبه بين علامات التنصيص كما في السطر الأول من الكود السابق

طبعا ... هناك تفاصيل أخرى ... لن تحتاج إليها في الوقت الراهن ... فلقد حاولت في هذا الشرح أن أبسط الأمر .... لكي تتضح لك الفكرة ... وتمنياتي لك وللجميع بالتوفيق

أرجو أن أكون من هذا الشرح البسيط المتواضع أن أكون قد أوصلت إليك ولو معلومات بسيطة وأن يكون كلامي مفهوم للجميع

وفقنا الله جميعا لما يحب ويرضى ورزقنا وإياكم العلم النافع
والسلام عليكم ورحمة الله وبركاته


m_mansour2005
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2009
المشاركات: 80
نشاط [ m_mansour2005 ]
قوة السمعة:0
قديم 03-02-2009, 10:12 PM المشاركة 8   
افتراضي


شكرا جزيلا على المجهود ده
وانا فعلا بدات اتعلم ميكروسى بس فيه مشكلة فى simulation
انا بستخدم pic simulator وبحاول اعمل simulation ل lcd لكن ال lcd مش بتنطق خالص . حتى لقيت فى الميكرو سى ملف .hex لإختبار ال lcd بس برده ال lcd مش بتنطق خالص.
فياريت حد يقوللى المشكلة فى ايه ودى صورة البرنامج


إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:25 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025