|
:: نائب المشرف العام ::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
|
|
نشاط [ ماجد عباس محمد ]
قوة السمعة:
|
|
26-08-2018, 09:06 AM
المشاركة 119
|
|
السطر المتغير
السطر المتغير هو ببساطة حيث تقوم بحساب ما تريد ثم تجمع النتائج معا و تكتبها على الشاشة مرة واحدة و يمكنك الكتابة مباشرة من الحساب لكن لو تطلب الأمر تعديل القيم لن يكون لديك الحرية فى تهيئة السطر كما تريد لذا كثيرا أفضل تخصيص 16 خانة أكتب فيها ما أريد طباعته و عندما أقرر تحديث الشاشة أنقلها معا.
فى المقدمة خصصت Disp00 إلى Disp15 لتدوين نتائج الحساب فيها بصورة ASCII أى الرقم 5 يكون 035h وهى بصورة أخرى إضافة 030h تقابل 48 عشرى أى أن الرقم "7” = 037h وهى 55 بالعشري و فى النهاية استخدم الكود WriteLine لكتابة هذا السطر على الشاشة.
لو أردت كتابة رقم ما أو إشارة ما فببساطة استخدم الأمر MOV Dispxx,#NewValue و ذلك عوضا عن الحاجة لاستخدام الأمر goto character وهو 080h+Address لتوجيه الشاشة حيث اريد الكتابة ثم أبدأ.
كود:
WriteLine: ; Put Line number on buss then call
ACALL Do_Lcd
MOV R0,#Disp00
LineLoop:
MOV LCD,*R0
ACALL Writ_LCD
INC R0
CJNE R0,#Disp11,LineLoop
RET
يبدأ بفرض أنك وضعت رقم السطر على المنفذ فيطلب تنفيذ الأمر ثم يضع العنوان الخاص بأول حرف وهو Disp00 فى R0 وبذا يكون R0 به 020h ثم عنوان تكرارى للسطر و يلى ذلك الأمر ينقل غير مباشر باعتبار R0 حاملا العنوان ما يشير إليه R0 للمنفذ LCD مباشرة ثم يطلب كود Writ_LCD لكتابته ثم نزيد R0 بواحد ليشير للتالى و نقارن محتواه بعنوان الخانة Disp11 و نكرر لو لا يتساوى إذن سنكتب عشرة أحرف فقط من الستة عشر و ذلك لكتابة Manu/Auto ولا حاجة لتكرار كتابتها إلا عند تغيير الوضع من يدوى لآلى أو العكس.
سنضع عنوان أى من الرسالتين فى DPTR ثم نطلب هذا الكود فنضع عنوان الكتابة بالأمر الخاص بها على المنفذ ثم نطلب تنفيذ الأمر ثم نحفظ عدد الأحرف 4 فى العداد R7 المستخدم فى كتابة رسالة و المشروح المرة الماضية لننتقل لعنوان NextC الحرف التالى وهذا أيضا كود ذو نقطتين مختلفتين.
كود:
LCD4:
MOV LCD,#13+80H ; 80H is Goto Command + address 13
ACALL Do_LCD
MOV R7,#4 ; write 4 chrs
SJMP NextC
WriteMsg: ; Writes a message on LCD, start in
ANL EECON,#11111011b ; Clear DPS bit in EECOM to select DPTR0
MOV R7,#16 ; 16 character
NextC:
CLR A
MOVC A,*A+DPTR ; Read 1st byte
MOV LCD,A ; put on lcd data
ACALL Writ_LCD
INC DPTR
DJNZ R7,NextC
RET
لتطوير هذا الكود لو لديك عدد متباين من الحروف كل مرة، يمكنك وضع عدد الأحرف فى R7 أو العداد ألذى تختاره و بدء الكتابة على المنفذ و تطلب الكود فقط تحذف السطرين حيث MOV R7,#4 و السطر MOV R7,#16
كود:
WriteMsg: ; Writes a message on LCD, start on port, count in R7
ANL EECON,#11111011b ; Clear DPS bit in EECOM to select DPTR0
ACALL Do_LCD
NextC:
CLR A
MOVC A,*A+DPTR ; Read 1st byte
MOV LCD,A ; put on lcd data
ACALL Writ_LCD
INC DPTR
DJNZ R7,NextC
RET
لو شئت لأى سبب محو الستة عشر خانة خاصة لو تريد كتابة قليلة مع بقاء الباقى خاليا يمكنك استخدام هذا الكود
كود:
ClrTxt: MOV R0,#Disp00
TTT: MOV *R0,#20h
INC R0
CJNE R0,#30h,TTT
RET
بقى لدينا كود القراءة من المحول وهذا موضوعنا القادم بإذن الله
|