صهيب جاسم رقيب أول
عدد الرسائل : 34 العمر : 39 تاريخ التسجيل : 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 العمر : 39 تاريخ التسجيل : 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
وأطلب ممن يستفيد من الموضوع أن لا ينساني من الدعاء
وشكرا | |
|
الفقير لله لواء
عدد الرسائل : 1846 العمر : 42 الموقع : ارض السواد تاريخ التسجيل : 08/04/2010
| موضوع: رد: مشروع التحويل بين التاريخ الهجري والميلادي باستخدام الـ PIC الأحد 26 يونيو 2011 - 13:45 | |
| | |
|