کتابخانه تابع تبدیل تاریخ میلادی، شمسی و قمری برای کدویژن CodeVision AVR و بسکام Bascom

کتابخانه ای متشکل از توابع جهت تبدیل تاریخ میلادی، شمسی و قمری به یکدیگر با زبان سی C برای استفاده در نرم افزار کدویژن CodeVision و اتمل استادیو ATMEL Studio و به زبان بیسیک Basic برای نرم افزار بسکام Bascom

مقدمه

همانطور که می دانید، پیدا کردن تابعی دقیق برای تبدیل تاریخ های مختلف به یکدیگر دشوار است. با توجه به اهمیت تاریخ در برخی مدارات الکترونیکی به خصوص کنترلی، همچنین میلادی بودن تاریخ های پیش فرض سخت افزارهایی مانند آی سی های RTC نظیر DS1307 و ضرورت وجود تاریخ های دیگر در کنار تاریخ میلادی، کتابخانه ای جهت سهولت تبدیل سه نوع تاریخ مهم و اساسی «میلادی»، «شمسی» و «قمری» برنامه نویسی شد و در ادامه در اختیار مخاطبان قرار خواهد گرفت.

آموزش استفاده از کتابخانه در نرم افزار کدویژن CodeVision AVR

در نرم افزارهای برنامه نویسی مبنی بر زبان سی C مانند CodeVision یا ATMEL Studio، کافیست فایل با پسوند lib را داخل پوشه پروژه قرار داده و سپس در ابتدای کد پروژه خود عبارت زیر را درج کنید:

#include "DateConverter.lib"

حال می توانید طبق حالت کلی تابع، تاریخ موردنظر خود را تبدیل کنید:

dateConvert(char FROM, char TO, float Year, float Month, float Day, int* year, char* month, char* day)

پارامتر FROM نوع تاریخ ورودی و پارامتر TO نوع تاریخ خروجی را مشخص می کند. این پارامترها توسط کاراکترهای g – p – i برنامه ریزی می شود. g حرف اول Gregorian یا میلادی، p حرف اول Persian یا فارسی (هجری شمسی) و i حرف اول Islamic یا اسلامی (هجری قمری) می باشد. پارامتر Year سال ورودی، Month ماه ورودی، Day روز ورودی، year سال خروجی، month ماه خروجی و day روز خروجی می باشد. توجه داشته باشید که سه پارامتر خروجی از نوع اشاره گر یا Pointer می باشد که شما جهت خروجی گرفتن از آن بایستی متغیرهای دلخواه خود را به هنگام فراخوانی تابع، در مکان این پارامترها قرار دهید تا مقادیر خروجی تابع در آن ها ریخته شوند.

برای آشنایی و درک بهتر، به قطعه کد زیر توجه کنید:

مثال) می خواهیم تاریخ میلادی اکنون را از آی سی DS1307 دریافت و در خط اول LCD کاراکتری نمایش داده و در خط دوم، تاریخ شمسی اکنون را نمایش دهیم؛ همچنین روز هفته را توسط تاریخ شمسی تبدیل شده بدست آورده و در انتهای خط اول نمایش دهیم:

شکل کلی تابع بالا به صورت زیر در برنامه اصلی ظاهر خواهد شد:

dateConvert('g', 'p', gYear, gMonth, gDay, &pYear, &pMonth, &pDay); // Converting Gregorian to Persian Date

برای مشاهده و دانلود کد کامل و شبیه سازی پروژه مثال، به بخش دانلود مراجعه فرمایید.

توابع دیگر

۱. تابع تشخیص سال های کبیسه میلادی، شمسی و قمری که به صورت زیر قابل استفاده می باشد:

isLeap(int year, char TYPE);

پارامتر year سال ورودی و TYPE نوع تاریخ است که قبلا توضیح داده شد.

برای مثال) کبیسه بودن سال ۱۳۹۸ شمسی را بررسی می کنیم:

isLeap(۱۳۹۸, 'p');

۲. تابع محاسبه روز هفته از تاریخ ورودی؛ که به صورت زیر تعریف شده و مورد استفاده قرار می گیرد:

getWeekday(float year, float month, float day, char TYPE)

خروجی این تابع، اعداد در بازه صفر الی ۶ می باشد. صفر مربوط به شماره روز یکشنبه، … و ۶ مربوط به روز شنبه است.

آموزش استفاده از کتابخانه در نرم افزار بسکام Bascom

در نرم افزارهای برنامه نویسی مبنی بر زبان بیسیک مانند Bascom یا mikroBasic، فایل های Header.inc و Footer.inc را داخل پوشه پروژه قرار داده و سپس در ابتدای کد پروژه خود، درست بعد از پیکره بندی سخت افزار و نرم افزار و تعریف متغیرهای عمومی Global، عبارت زیر را درج کنید:

$include "Header.inc"

سپس کد زیر را در انتهای کد پروژه خود اضافه نمایید:

$include "Footer.inc"

حال می توانید طبق حالت کلی تابع، تاریخ موردنظر خود را تبدیل کنید:

Convert(ByVal From_ As String * ۱, ByVal To_ As String * ۱, ByVal Year As Long, ByVal Month As Long, ByVal Day As Long, _
         ByRef _year As Long, ByRef _month As Long, ByRef _day As Long)

مثال) می خواهیم مثالی که در بخش قبل گفته شد را برای نرم افزار Bascom تکرار کنیم:

شکل کلی تابع بالا به صورت زیر استفاده می شود:

Call Convert("g", "p", Gyear, Gmonth, Gday, Pyear, Pmonth, Pday)

برای مشاهده و دانلود پروژه کامل این مثال، به بخش دانلود مراجعه فرمایید.

توابع دیگر

۱. تابع تشخیص سال های کبیسه میلادی، شمسی و قمری که به صورت زیر قابل استفاده می باشد:

Leap(ByVal Year As Double, ByVal Type_ As String * ۱) As Byte

پارامتر Year سال ورودی و Type نوع تاریخ است که قبلا توضیح داده شد.

 

برای مثال) می خواهیم کبیسه بودن سال ۲۰۱۹ میلادی را بررسی کنیم:

Leap(۲۰۱۹, "g")

۲. تابع محاسبه روز هفته از تاریخ ورودی؛ که به صورت زیر تعریف شده و مورد استفاده قرار می گیرد:

Get_Weekday(ByVal Year_ As Long, ByVal Month_ As Long, ByVal Day_ As Long, ByVal Type_ As String * ۱) As Long

خروجی این تابع، اعداد در بازه صفر الی ۶ می باشد. صفر مربوط به شماره روز یکشنبه، … و ۶ مربوط به روز شنبه است.

توضیحاتی در خصوص کتابخانه

۱. توجه داشته باشید ممکن است در تاریخ اسلامی (هجری قمری) اختلاف یک روزه پیش آید.

۲. در کتابخانه به زبان بیسیک، به دلیل مشکلات موجود در تبدیل متغیرها به یکدیگر و عدم سازگاری، برای متغیرهای اعشاری از Double و برای متغیرهای صحیح از Long استفاده شده است (نه Single یا Byte و Integer).

۳. با توجه به حجم تقریبا بالای کتابخانه در زبان بیسیک، پیشنهاد می شود از میکروکنترلرهای با حافظه Flash بالای ۱۰ کیلوبایت استفاده شود؛ مانند: ATmega168 – ATmega32.

بخش دانلود

بخش دانلودتوضیحات

شامل موارد زیر:

  • فایل های کتابخانه و توابع به زبان سی (کدویژن CodeVision) و بیسیک (بسکام Bascom)
  • فایل شبیه سازی پروژه مثال Proteus 8.9
  • سورس کد کامل پروژه مثال
  • کد هگز مخصوص پروگرام کردن میکروکنترلر

توجهات:

  • برای تهیه این مطلب زحمت فراوانی کشیده شده است؛ لذا، کپی برداری ممنوع می باشد.

دیدگاه خود را بنویسید ...

avatar
  مشترک شوید  
اطلاع از

این وبسایت جهت تقویت در خدمات، از کوکی های مرورگر شما استفاده می کند. قبول کردن