منتدى التحكم الآلي والإلكترونيات
مرحبا بك عزيزي الزائر يشرفنا أن تقوم بالدخول إذا كنت من الأعضاء أو التسجيل إذا كنت زائرا ويمكنك إنشاء حسابك ببساطة ويمكنك التفعيل عن طريق البريد أو الانتظار قليلا حتى تقوم الإدارة بالتفعيل
منتدى التحكم الآلي والإلكترونيات

Automatic control , PLC , Electronics , HMI , Machine technology development , Arabic & Islamic topics , Management studies and more
 
الرئيسيةالبوابة*مكتبة الصوراليوميةس .و .جبحـثالتسجيلقائمة الاعضاءالمجموعاتدخول

شاطر | 
 

 مشروع التحويل بين التاريخ الهجري والميلادي باستخدام الـ PIC

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


عدد الرسائل : 34
العمر : 31
تاريخ التسجيل : 25/08/2010

مُساهمةموضوع: مشروع التحويل بين التاريخ الهجري والميلادي باستخدام الـ PIC   الأحد 26 يونيو 2011 - 13:34

بسم الله الرحمن الرحيم
مشروع التحويل بين التاريخ الهجري والميلادي باستخدام الـ PIC


مكونات المشروع
1- بك له ذاكرة كبيرة نوعا ما . كان اختياري عشوائيا للبك 18f452
2- لوحة مفاتيح (Keypad)
3- شاشة LCD
4- مفتاح (switch) لاختيار نمط التحويل


تستطيع إضافة مكونات أخرى لتزيد من كفاءة المشروع وجماليته

ملاحظات حول المشروع

* يقوم بتحويل التاريخ الميلادي الى هجري وبالعكس .. ويتم تحديد نمط التحويل عن طريق المفتاج SW المربوط على الطرف B0
فإذا كان المفتاح في حالة OFF يعني ( تحويل من ميلادي الى هجري)
وإذا كان المفتاح في حالة On يعني ( تحويل من هجري الى ميلادي )
وللتغيير بين الحالتين اجعل حالة المفتاح على النمط الذي تريده ثم اغط زر (#) في Keypad


* اعتمدت في طريقة الحساب على معادلات دقيقة جدا ( سأذكرها لاحقا ) لكن ليس معنى هذا أننا نحصل على نتائج مطابقة مائة بالمائة وإنما أحيانا نحصل على نتائج مطابقة وأحيانا نحصل على نتيجة بفرق يوم واحد (زيادة أو نقصان) والسبب أن التقويم الهجري يعتمد على حالة القمر والتي تعتبر غير ثابتة .
وهذا ليس عيبا في المشروع ولا في المعادلات وإنما كل التقاويم الهجرية يحصل فيها هذا الفرق في بعض الأشهر


* يشترط أن تكون السنين المراد تحويلها من سنة 621م فمافوق ( بالنسبة للسنوات الميلادية ) ومن سنة 1 هـ فما فوق بالنسبة للسنوات الهجرية

* لايسمح بإدخال أرقام خاطئة للأيام او الشهر أو السنين ... يعني لو ادخلت عدد أيام أكبر من 31 مثلا فإن البرنامج يعطي رسالة خطأ وكذلك لو تم إدخال شهر أكبر من 12

* لكي تحصل على نتائج صحيحة يجب أن تدخل الأيام على شكل رقمين XX وكذلك الأشهر
يعني لو أدرنا تحويل 5/7/2001 نكتب 05072001
ولو أردنا تحويل 25/12/2009 نكتب 25122009


* بالنسبة للسنين لها حالتين
إذا كانت السنة التي نريد تحويلها أقل من 1000 مثلا لتحويل 5/7/150 نكتب 0507150 ثم نضغط زر (*) الموجود في الكيباد ليبدأ التحويل
إذا كانت السنة أكبر أو تساوي 1000 فإن البرنامج يقوم بتحويلها مباشرة دون الضغط على زر (*) مثلا لتحويل 5/12/1999 نكتب 05071999 ووسترى ان البرنامج قام بتحويلها مباشرة



* لمسح محتويات الشاشة والبدء بتحويلة جديدة أضغط الزر (#) من الكي باد
واكرر أن الزر (*) يستخدم للحصول على الناتج إذا كانت السنة أقل من 1000


* المعادلات الحسابية المستخدمة في المشروع تم اقتباسها من مشاركة للاستاذ سالم الجعيدي ( جزاه الله خير ) كتبها في أحد المنتديات وهي :

=== للتحويل من ميلادي الى الهجري ======
إن كان الشهر الميلادي أصغر أو يساوي 2
إذن
أ = الشهر + 12
ب = السنة الميلادية – 1
وإن كان الشهر الميلادي أكبر من 2 فإن
أ = الشهر
ب = السنة
ج = ب ÷ 100 ( إحذف الكسر مطلقاً)
د = ب ÷ 400 ( احذف الكسر مطلقاً )
ع = 2 – ج + د
ملاحظة : إذا كان حسابك لتاريخ يقع قبل 15 أكتوبر 1582 م
فإن ع = صفر دائماً
و = ( ب + 4716 ) × 365.25 ( احذف الكسر مطلقاً )
ز = ( أ + 1 ) × 30.6001 ( أحذف الكسر مطلقاً )
ح = الأيام + ز + و + ع – 1524.5
ط = ح – 1937806.5
ك = ( ط – 1 ) ÷ 10631 ( احذف الكسر مطلقاً )
ل = ( ط + 354 ) – 10631 × ك
م = ( 10985 – ل ) ÷ 5316 (احذف الكسر )
ن = ( 50 × ل ) ÷ 17719 ( احذف الكسر )
س = ل ÷ 5670 ( احذف الكسر )
ف = ( 43 × ل ) ÷ 15238 ( احذف الكسر )
ق = م × ن + س × ف
ص = ( 30 – ق ) ÷ 15 ( احذف الكسر )
ر = ( 17719 × ق ) ÷ 50 ( احذف الكسر )
ش = ق ÷ 16 ( احذف الكسر )
ت = ( 15238 × ق ) ÷ 43 ( احذف الكسر )
ث = ل – ص × ر – ش × ت + 29
الشهر الهجري = ( 24 × ث ) ÷ 709 ( احذف الكسر )
غ = ( 709 × الشهر الهجري ) ÷ 24 ( احذف الكسر )
اليوم الهجري = ث – غ
السنة الهجرية = 30 × ك + ق – 30


==== للتحويل من هجري الى ميلادي ====
أ = ( السنة الهجرية – 1 ) × 354.3667 ( اجبر الكسر إن بلغ النصف )
ب = ( الشهر - 1 ) × 29.5 ( اجبر الكسر بواحد إن بلغ 0.5 )
ج = اليوم + أ + ب + 1948438
د = ( ج – 1867216.25 ) ÷ 36524.25 ( احذف الكسر مطلقاً من الحاصل )
ع = د ÷ 4 ( احذف الكسر مطلقاً )
إذ كان ج أصغر من 2299161
فإن
و = ج
وإن كان ج أكبر من 2299161
فإن
و = 1 + ج + د - ع
ز = و + 1524
ح = ( ز - 122.1 ) ÷ 365.25 ( احذف الكسر مطلقاً )
ط = 365.25 × ح ( احذف الكسر مطلقاً )
ي = ( ز - ط ) ÷ 30.6001 ( احذف الكسر مطلقاً )
ك = ي × 30.6001 ( احذف الكسر مطلقاً )

أولاً
اليوم الميلادي = ز – ط - ك
ثانياً
إذا كان ي أصغر من 14 فإن الشهر الميلادي = ي – 1
إذا كان ي أكبر من 14 فإن الشهر الميلادي = ي –13
ثالثاً
إذا كان الشهر الميلادي أكبر من 2 فإن السنين الميلادية = ح – 4716
إذا كان الشهر الميلادي أصغر من 2 فإن السنين = ح – 4715



* قمت بتحويل المعادلات اعلاه الى كود برمجي باستخدام لغة مايكروبيسك مع إضافة بعض اللمسات البرمجية التي تجعل المشروع متكامل ( والكمال لله وحده)


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


عدد الرسائل : 34
العمر : 31
تاريخ التسجيل : 25/08/2010

مُساهمةموضوع: رد: مشروع التحويل بين التاريخ الهجري والميلادي باستخدام الـ PIC   الأحد 26 يونيو 2011 - 13:40

صراحة الكود طويل وقد يبدو مخيف عند النظر اليه للمرة الأولى لكنه ليس صعب جدا
لذا قسمته الى أربعة دوال :
دالة للتحويل من ميلادي الى هجري hejri()
دالة لمراقبة الأرقام التي يقوم المستخدم بإدخالها لمنع إدخال أرقام خاطئة
(تتبع للتحويل من ميلادي الى هجري ) con _hejri ()
دالة للتحويل من هجري الى ميلادي meladi()
دالة لمراقبة الأرقام التي يقوم المستخدم بإدخالها لمنع إدخال أرقام خاطئة
(تتبع للتحويل من هجري الى ميلادي) con _meladi()
ثم استدعيت هذه الدوال في البرنامج الأصلي

لاحظ كود دالة التحويل من ميلادي الى هجرى وقارنه بالمعادلات في المشاركة السابقة

الرمز:

sub procedure hejri()
if mon<=2 then
mon=mon+12
yer=yer-1
end if
gem=yer / 100
dal=yer / 400
aen=2-gem+dal
waw=floor((yer+4716)*365.25 )
zay=floor((mon+1)*30.6001 )
ha=yaom+zay+waw+aen-1524
ta=floor(ha-1937806.5)
kaf=(ta-1)/10631
lam=floor((ta+354)-10631*kaf )
mem=floor((10985-lam)/5316 )
non=floor((50*lam)/17719)
sen=floor(lam/5670)
fa=floor((43*lam)/15238)
qaf=mem*non+sen*fa
sad=floor((30-qaf)/15)
ra=floor((17719*qaf)/50)
shen=floor(qaf/16)
tta=floor((15238*qaf)/ 43)
tha=lam-(sad*ra)-(shen*tta)+29
shahr=floor((24*tha)/709)
gen=floor((709*shahr)/24)
ayam=tha-gen
sana=30*kaf+qaf-30
wordToStr(ayam,rxr)'
delay_ms(10)
wordToStr(shahr,rxr1)
delay_ms(10)
WordToStr(sana,rxr2)
ltrim(rxr)
ltrim(rxr1)
ltrim(rxr2)
  Lcd_Out(2,1,"HJRI:")
  delay_ms(10)
  Lcd_Out(2,6,rxr)
  Lcd_Out(2,8,":")
  delay_ms(10)
  Lcd_Out(2,9,rxr1)
  Lcd_Out(2,12,":")
  Lcd_Out(2,13,rxr2)
end sub

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

لتحميل البرنامج وملف بروتس تفضل الرابط التالي
http://www.4shared.com/file/vYigLQ7I/hejri.html

وأطلب ممن يستفيد من الموضوع أن لا ينساني من الدعاء

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


عدد الرسائل : 1844
العمر : 37
الموقع : ارض السواد
تاريخ التسجيل : 08/04/2010

مُساهمةموضوع: رد: مشروع التحويل بين التاريخ الهجري والميلادي باستخدام الـ PIC   الأحد 26 يونيو 2011 - 13:45

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

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتدى التحكم الآلي والإلكترونيات :: منتديات التحكم الآلي والإلكترونيات :: منتدى الميكروكنترولر Micro Controller-
انتقل الى: