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

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

صهيب البلال
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2009
المشاركات: 85
نشاط [ صهيب البلال ]
قوة السمعة:0
قديم 02-12-2010, 04:37 PM المشاركة 1   
افتراضي تنفيذ مشروع تحويل التاريخ الميلادي الى هجري وبالعكس Twitter FaceBook Google+



بسم الله الرحمن الرحيم
مشروع التحويل بين التاريخ الهجري والميلادي
في البداية أشكر صاحب الفكرة الأخ الكريم ((أكزي))
الذي أشار الى الموضوع في الرابط التالي :
http://www.qariya.com/vb/showthread.php?t=78543
وفيما يلي شرح لخطوات تنفيذ المشروع باستخدام معادلات حسابية أسهل فهما وأكثر دقة من التي ذكرت في الرابط أعلاه

مكونات المشروع
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


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


يتبع بعد قليل إن شاء الله تعالى


التعديل الأخير تم بواسطة : صهيب البلال بتاريخ 02-12-2010 الساعة 06:21 PM
اعلانات

صهيب البلال
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2009
المشاركات: 85
نشاط [ صهيب البلال ]
قوة السمعة:0
قديم 02-12-2010, 05:30 PM المشاركة 2   
افتراضي


صراحة الكود طويل وقد يبدو مخيف عند النظر اليه للمرة الأولى لكنه ليس صعب جدا
لذا قسمته الى أربعة دوال :
دالة للتحويل من ميلادي الى هجري 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

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

وشكرا


التعديل الأخير تم بواسطة : صهيب البلال بتاريخ 02-12-2010 الساعة 05:33 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية اكزي
اكزي
:: عضو ذهبي ::
تاريخ التسجيل: May 2009
الدولة: المغرب iguizzi06*hotmail.com // www.facebook.com/iguizzi.abdallah
المشاركات: 2,434
نشاط [ اكزي ]
قوة السمعة:143
قديم 02-12-2010, 07:02 PM المشاركة 3   
افتراضي


السلام عليكم أخي الكريم

أولا أشكرك جزيل الشكر على تعاونك معنا للرفع بأفكار اخواننا في هدا المنتدى الجميل

ثانيا شكرا مرة أخرى على المشروع الجميل وبارك الله فيك



الصورة الرمزية 5282
5282
:: عضو ذهبي ::
تاريخ التسجيل: Jun 2008
الدولة: مصر- الاسكندرية
المشاركات: 1,630
نشاط [ 5282 ]
قوة السمعة:107
قديم 02-12-2010, 08:37 PM المشاركة 4   
افتراضي


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


محمد162
:: مهندس متواجد ::
تاريخ التسجيل: Sep 2010
الدولة: السودان
المشاركات: 124
نشاط [ محمد162 ]
قوة السمعة:0
قديم 03-12-2010, 07:14 PM المشاركة 5   
افتراضي


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


الصورة الرمزية Tunisian Eng
Tunisian Eng
:: عضو فضي ::
تاريخ التسجيل: Apr 2006
الدولة: Tunis
المشاركات: 194
نشاط [ Tunisian Eng ]
قوة السمعة:79
قديم 19-12-2010, 06:38 AM المشاركة 6   
افتراضي


السلام عليكم



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



رأيي أن يقع تثبيت هذه المشاركة لاهمية الموضوع وايضا لما تحمله من إضافة.



للأسف الشديد التجاوب والردود لم يكن بمستوى هذا العمل.



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



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



يجب ان تحسب ان مشاركاتك هي لوجه الله تعالى



السلام عليكم



اخوك محسن


التعديل الأخير تم بواسطة : Tunisian Eng بتاريخ 19-12-2010 الساعة 06:44 AM

صهيب البلال
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2009
المشاركات: 85
نشاط [ صهيب البلال ]
قوة السمعة:0
قديم 19-12-2010, 06:54 PM المشاركة 7   
افتراضي


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

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

السلام عليكم



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



رأيي أن يقع تثبيت هذه المشاركة لاهمية الموضوع وايضا لما تحمله من إضافة.



للأسف الشديد التجاوب والردود لم يكن بمستوى هذا العمل.



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



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



يجب ان تحسب ان مشاركاتك هي لوجه الله تعالى



السلام عليكم



اخوك محسن

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


التعديل الأخير تم بواسطة : صهيب البلال بتاريخ 19-12-2010 الساعة 06:59 PM

eng_sam
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2009
المشاركات: 99
نشاط [ eng_sam ]
قوة السمعة:0
قديم 22-12-2010, 10:06 AM المشاركة 8   
افتراضي


ما شاء الله
شكرا لك اخي صهيب البلال . عمل رائع تستحق عليه التقدير

ربنا يوفقك ويرزقك من حيث لا تحتسب

دمت بخير

إضافة رد

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

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

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


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

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