NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4149 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 20 از 23

موضوع: ال سی دی گرافیکی با ساعت و تقویم و دماسنج و الارم

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض ال سی دی گرافیکی با ساعت و تقویم و دماسنج و الارم

    سلام ببخشید مزاحم وقت اساتید میشم
    اگه ممکنه منو راهنمایی کنید
    من چند تا مشکل دارم تو این برنامم که به زبان بسکام هست وقتی داخل منو برای تغییر ساعت و تاریخ میرم چه تاریخ و چه ساعت رو تغییر بدم و چه ندم از اخر که از منو میاد بیرون یکی به روز اضافه می کنه!! یعنی تاریخ از 1391/9/22 به 1391/9/23 تغییر پیدا می کنه!!! جالب اینه که تو پروتئوس مشکل نداره ولی تو سخت افزار اینطوریه!!مشکل از کجاست؟!؟
    بعد تو همین منو وقتی میرم برای تغییر ساعت راحت عوض میشه ولی وقتی می رم برای تغییر دقیقه، ثانیه هم هی مثلا اگه عددش رو 13 بوده هی به یه عددی میره مثلا 47 باز میاد 13، این مشکل فقط برای ثانیه هست!!!!
    مشکل بعدی میخوام عددهای تاریخ رو دو رقمی نشون بده یعنی به این صورت 1391/01/05 و 2012/05/01 باید چیکار کنم؟ الان به این صورت هست : 1391/2/5
    مشکل بعدی میخوام روزهای هفته رو هم بصورت فارسی بنویسم رو ال سی دی، تاپیک هایی تو سایت های مختلف دیدم همه میگن فونت باید طراحی بشه و اینا ولی نگفتن چه جوری روز های هفته رو از ds1307 بخونم؟!!!

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    نقل قول نوشته اصلی توسط dlydavood نمایش پست ها
    سلام ببخشید مزاحم وقت اساتید میشم
    اگه ممکنه منو راهنمایی کنید
    من چند تا مشکل دارم تو این برنامم که به زبان بسکام هست وقتی داخل منو برای تغییر ساعت و تاریخ میرم چه تاریخ و چه ساعت رو تغییر بدم و چه ندم از اخر که از منو میاد بیرون یکی به روز اضافه می کنه!! یعنی تاریخ از 1391/9/22 به 1391/9/23 تغییر پیدا می کنه!!! جالب اینه که تو پروتئوس مشکل نداره ولی تو سخت افزار اینطوریه!!مشکل از کجاست؟!؟
    بعد تو همین منو وقتی میرم برای تغییر ساعت راحت عوض میشه ولی وقتی می رم برای تغییر دقیقه، ثانیه هم هی مثلا اگه عددش رو 13 بوده هی به یه عددی میره مثلا 47 باز میاد 13، این مشکل فقط برای ثانیه هست!!!!
    مشکل بعدی میخوام عددهای تاریخ رو دو رقمی نشون بده یعنی به این صورت 1391/01/05 و 2012/05/01 باید چیکار کنم؟ الان به این صورت هست : 1391/2/5
    مشکل بعدی میخوام روزهای هفته رو هم بصورت فارسی بنویسم رو ال سی دی، تاپیک هایی تو سایت های مختلف دیدم همه میگن فونت باید طراحی بشه و اینا ولی نگفتن چه جوری روز های هفته رو از ds1307 بخونم؟!!!
    سلام مهندس
    براي اينكه بتونيم مشكل برنامه رو متوجه بشيم بايد برنامه رو ببينيم پس لطفا برنامتونو قرار بدين تا دربارش نظر بديم.
    _____________________________________
    _____________________________________

  4. تشکرها از این نوشته :


  5. #3
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sadmonew نمایش پست ها
    سلام مهندس
    براي اينكه بتونيم مشكل برنامه رو متوجه بشيم بايد برنامه رو ببينيم پس لطفا برنامتونو قرار بدين تا دربارش نظر بديم.
    سلام جناب مدیر
    خیلی لطف کردین که سریع اومدین کمک الان میزارم
    اینم لینک مستقیم
    http://uplod.ir/f0dtd2yghj78/noname1.bas.htm
    البته من زیاد در زمینه برنامه نویسی خوب نیستم
    ببینید کد رو و بگین چی کار کنم مخصوصا برای روز های هفته
    اگه لازمه پروتئوس مدار رو هم بذارم؟

  6. #4
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام دوباره
    چی شد مهندس برنامه رو دیدین؟

  7. #5
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    مشکل ثانیه حل شد و دیگه تو منو میرم و خارج میشم خود به خود به روز دیگه اضافه نمیشه
    فقط موند دورقمی کردن تاریخ و ساعت و روز های هفته فارسی

  8. #6
    مدیرکل انجمنها Doloop آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    حسين
    نوشته ها
    1,964
    تشکر
    3,312
    تشکر شده 3,086 بار در 1,371 پست

    پیش فرض

    فقط موند دورقمی کردن تاریخ و ساعت و روز های هفته فارسی
    برای دو رقمی کردن باید از رابطه استفاده کنی :
    یعنی اول بیا یکان رو محاسبه کن نمایش بده بعد دهگان رو هم محاسبه کن نمایش بده
    اگه توی محاسبه دهگان صفر باشه قاعدتا صفر رو نمایش میده
    برای روز های فارسی باید دنبال کتابخونه فارسی بگردی در غیر این صورت میمونه یک راهکار اونم هفت روز هفته رو به صورت عکس در بیاری و متناسب با اون روز همون عکس رو نمایش بدی
    برنامت رو هم دانلود کردم ولی هنوز ندیدم سر فرصت نگاه میندازم اگه نظری داشتم همینجا میگم
    *** اللّهم عجّل لولیک الفرج ***

  9. کاربران : 2 تشکر کرده اند از شما Doloop برای ارسال این پست سودمند:


  10. #7
    عضو جدید
    تاریخ عضویت
    Oct 2012
    نوشته ها
    7
    تشکر
    0
    تشکر شده 6 بار در 5 پست

    پیش فرض

    سلام
    برنامه ای که شما استفاده کردید تاریخ شمسیش مشکل داره ، این همون برنامه ای هست که تو اینترنت ریخته اما تاریخش مشکل داره یعنی توی تبدیل تاریخ مشکل داره
    برای روز هفته هم که توی زیربرنامه read_date_time داره خودش از روی ds1307 میخوه و میریزه توی weekday اما باید هر سری که تاریخ ds1307 را ست می کنی ، روز هفته را هم برای ds1307 ارسال کنی که این کد این کار را انجام نمیده ، زیربرنامه setdate را اینجوری تغییر بده :
    کد:
    Setdate: 
     
     _year = M_year - 2000 
     M_day = Makebcd(m_day) : M_month = Makebcd(m_month) : _year = Makebcd(_year) 
     I2cstart                                                   ' Generate start code 
     I2cwbyte Ds1307w                                           ' send address 
     I2cwbyte 3                                                 ' starting address in 1307
     I2cwbyte weekday                                              
     I2cwbyte M_day                                             ' Send Data to SECONDS 
     I2cwbyte M_month                                           ' MINUTES 
     I2cwbyte _year                                             ' Hours 
     I2cstop 
    Return
    ولی باید هر دفعه که تاریخ ds1307 را تغییر میدی ، متغیر weekday هم مقدار دهی کنی.
    برای اینکه تاریخ 1391/1/1 را به شکل 1391/01/01 نشون بدی هم باید از تابع format استفاده کنی ، موقع نمایش متغیر روی ال سی دی (مثلا روز یا ساعت یا ..) ، اول متغیر مثلا سال را به string تبدیل کن با دستور str بعد از format استفاده کن :

    کد:
    dim s as string * 4
    s=str(_day)
    lcd format(s,"00")
    من بسکام الان دم دست ندارم شاید یکسری دستورات رو پس و پیش نوشته باشم

  11. کاربران : 2 تشکر کرده اند از شما nicolas1390 برای ارسال این پست سودمند:


  12. #8
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط nicolas1390 نمایش پست ها
    سلام
    برنامه ای که شما استفاده کردید تاریخ شمسیش مشکل داره ، این همون برنامه ای هست که تو اینترنت ریخته اما تاریخش مشکل داره یعنی توی تبدیل تاریخ مشکل داره
    برای روز هفته هم که توی زیربرنامه read_date_time داره خودش از روی ds1307 میخوه و میریزه توی weekday اما باید هر سری که تاریخ ds1307 را ست می کنی ، روز هفته را هم برای ds1307 ارسال کنی که این کد این کار را انجام نمیده ، زیربرنامه setdate را اینجوری تغییر بده :
    کد:
    Setdate: 
     
     _year = M_year - 2000 
     M_day = Makebcd(m_day) : M_month = Makebcd(m_month) : _year = Makebcd(_year) 
     I2cstart                                                   ' Generate start code 
     I2cwbyte Ds1307w                                           ' send address 
     I2cwbyte 3                                                 ' starting address in 1307
     I2cwbyte weekday                                              
     I2cwbyte M_day                                             ' Send Data to SECONDS 
     I2cwbyte M_month                                           ' MINUTES 
     I2cwbyte _year                                             ' Hours 
     I2cstop 
    Return
    ولی باید هر دفعه که تاریخ ds1307 را تغییر میدی ، متغیر weekday هم مقدار دهی کنی.
    برای اینکه تاریخ 1391/1/1 را به شکل 1391/01/01 نشون بدی هم باید از تابع format استفاده کنی ، موقع نمایش متغیر روی ال سی دی (مثلا روز یا ساعت یا ..) ، اول متغیر مثلا سال را به string تبدیل کن با دستور str بعد از format استفاده کن :

    کد:
    dim s as string * 4
    s=str(_day)
    lcd format(s,"00")
    من بسکام الان دم دست ندارم شاید یکسری دستورات رو پس و پیش نوشته باشم
    سلام مرسی که جواب دادین اقای Doloop و اقای nicolas1390
    اقای nicolas1390 برنامه رو درسته از اینترنت گرفتم ولی برنامه 400 بوده که الان شده 842 خط، چون خیلی چیزها بهش اضافه و کم شده
    اره تو تاریخ شمسی یخورده اذیت داره و هر چی گشتم که مشکل رو برطورف کنم نتونستم!! شما میدونید مشکل چیه؟!؟!؟ضمنا من سخت افزاری بستم و تو سخت افزاری اصلا مشکل نداره!

    خب سوال؟ چرا برابر 3 قرار دادین کد زیر رو؟ قبلا 4 بود
    I2cwbyte 3
    خب برای فارسی نویسسیش چیکار کنم فونت فارسی از سایت eca گرفتم ولی نمیدونم چکارش کنم و روزهای هفه رو رو ال سی دی بنویسم بصورت فارسی چون اصلا تو کار فارسی نبودم

    اگه کمکم کنید ممنون میشم
    ویرایش توسط dlydavood : 14-12-2012 در ساعت 09:29

  13. #9
    عضو جدید
    تاریخ عضویت
    Oct 2012
    نوشته ها
    7
    تشکر
    0
    تشکر شده 6 بار در 5 پست

    پیش فرض

    نقل قول نوشته اصلی توسط dlydavood نمایش پست ها
    ضمنا من سخت افزاری بستم و تو سخت افزاری اصلا مشکل نداره!
    خب سوال؟ چرا برابر 3 قرار دادین کد زیر رو؟ قبلا 4 بود
    I2cwbyte 3
    خب برای فارسی نویسسیش چیکار کنم فونت فارسی از سایت eca گرفتم ولی نمیدونم چکارش کنم و روزهای هفه رو رو ال سی دی بنویسم بصورت فارسی چون اصلا تو کار فارسی نبودم

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

    0 برای ثانیه ، 1 دقیقه،۲ ساعت،۳ روز هفته ، 4 روز ، 5 ماه، 6 سال . میتونین زیربرنامه setdate و settime را با هم یکی کنید و از 0 شروع کنید ...

    فارسی نویسی توی ال سی دی کاراکتری را بلدم اما ال سی دی گرافیکی را نمیدونم ! من خیلی خیلی تازه کارم

  14. تشکرها از این نوشته :


  15. #10
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    اقای nicolas1390 دستت درد نکنه با همون روش فرمت که گفتی مشکل دو رقمی ساعت و تاریخ رو حل کردم
    البته تو قسمت منوی برنامم از همین روش استفاده کرده بودم ولی نمی دونستم چه جوری اینجا درستش کنم که نمونه مثالی که زده بودی بدردم خورد ایول

  16. #11
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط nicolas1390 نمایش پست ها
    خواهش می کنم
    چرا ،توی سخت افزار هم مشکل داره ، یادم نیست توی چه تاریخ هایی مشکل داشت اما اگه همون برنامه توی اینترنت باشه شک نکنین که مشکل داره ، دنبال الگوریتم دیگه باشین .

    0 برای ثانیه ، 1 دقیقه،۲ ساعت،۳ روز هفته ، 4 روز ، 5 ماه، 6 سال . میتونین زیربرنامه setdate و settime را با هم یکی کنید و از 0 شروع کنید ...

    فارسی نویسی توی ال سی دی کاراکتری را بلدم اما ال سی دی گرافیکی را نمیدونم ! من خیلی خیلی تازه کارم
    یعنی فقط همین زیر برنامه ها مشکل دارند؟ چندتا زیربرنامه می خواد؟

    اینطوری خوبه؟ اگه اره بعد جایگزین همون زیربرنامه setdate و settime کنم؟

    If _sec > 59 Then _sec = 0
    _sec = Makebcd(_sec)
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 0 ' starting address in 1307
    I2cwbyte _sec
    I2cstop

    '-------------------------------------
    If _min > 59 Then _min = 0
    _min = Makebcd(_min)
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 1 ' starting address in 1307
    I2cwbyte _min
    I2cstop


    '-------------------------------------

    If _hour > 23 Then _hour = 0
    _hour = Makebcd(_hour)
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 2 ' starting address in 1307
    I2cwbyte _hour
    I2cstop
    '---------------------------------------------------------------------------
    If Weekday > 7 Then Weekday = 1
    Weekday = Makebcd(weekday)
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 3 ' starting address in 1307
    I2cwbyte Weekday
    I2cstop

    '================================================= ========================================="

    If _day > 31 Then _day = 1
    _day = Makebcd(_day)
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 4 ' starting address in 1307
    I2cwbyte _day
    I2cstop

    '================================================= =============================="

    If _month > 12 Then _month = 1
    _month = Makebcd(_month)
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 5 ' starting address in 1307
    I2cwbyte _month
    I2cstop

    '================================================= ===================

    If _year > 99 Then _year = 0
    _year = Makebcd(_year)
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 6 ' starting address in 1307
    I2cwbyte _year
    I2cstop

  17. #12
    عضو جدید
    تاریخ عضویت
    Oct 2012
    نوشته ها
    7
    تشکر
    0
    تشکر شده 6 بار در 5 پست

    پیش فرض

    شما فقط همون کدی که دادم را جایگزین کنید ، زیربرنامه setdate را پاک کنید و زیربرنامه setdate که نوشتم را توی برنامه قرار بدید و تمام

  18. تشکرها از این نوشته :


  19. #13
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط nicolas1390 نمایش پست ها
    شما فقط همون کدی که دادم را جایگزین کنید ، زیربرنامه setdate را پاک کنید و زیربرنامه setdate که نوشتم را توی برنامه قرار بدید و تمام
    خب من اینکارو کردم، امیدورام مشکل حل شده باشه

    ببینید برای فارسی نوشتن روزهای هفته یک فونت من از این سایت eca گرفتم "font8*8" که تغییر داده بودن و همه جملات فارسی رو ساپورت می کرد ولی مشکل این بود که وقتی من وارد کپی می کردم تو فایلهام و بعد اجراش می کردم کل صفحه تو پروتئوس سیاه نشون می داد. حالا شما می گید فارسی کار نکردید
    من اگه بخوام بصورت انگلیسی نشون بدم چیکار کنم ؟
    اینا رو که نوشتم کجا بزارم ؟
    If Weekday = 1 Then Lcd " SAT"
    If Weekday = 2 Then Lcd " SUN"
    If Weekday = 3 Then Lcd " MON"
    If Weekday = 4 Then Lcd " TUE"
    If Weekday = 5 Then Lcd " WED"
    If Weekday = 6 Then Lcd " THU"
    If Weekday = 7 Then Lcd " FRI"
    با نوشتن انها مشکل حله یا نه؟ شرمنده

  20. #14
    عضو جدید
    تاریخ عضویت
    Oct 2012
    نوشته ها
    7
    تشکر
    0
    تشکر شده 6 بار در 5 پست

    پیش فرض

    کجاش رو خودتون باید تصمیم بگیرید ، همون جایی قرار بدید که دارین ساعت و تاریخ را نمایش میدید ! توی پست اول گفتم که شما موقع ست کردن تاریخ باید روز هفته را به ds1307 بدین ، خودش نمیتونه روز هفته را تشخیص بده ، اون فقط به روز هفته ای که شما بهش دادین یک روز اضافه می کنه تا 7 تا کامل بشه بعد دوباره شروع می کنه به شمردن ، من شنبه را صفر در نظر گرفتم و جمعه را 6.

  21. تشکرها از این نوشته :


  22. #15
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام اقا کسی میدونه اشکال این برنامه چیه که تو پروتئوس تاریخ ها رو به این صورت نشون میده؟!؟؟!
    5455998.jpg
    http://uploadkon.ir/uploads/5455998.jpg

  23. #16
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلا اقا کسی نیست کمک من کنه!! این برنامم اگه کسی می تونه کمک کنه دریغ نکنه ثواب داره
    http://uplod.ir/dqcd29fg1v5b/noname1.bas.htm
    noname1.bas - 17.1 Kb

  24. #17
    عضو جدید
    تاریخ عضویت
    Oct 2012
    نوشته ها
    7
    تشکر
    0
    تشکر شده 6 بار در 5 پست

    پیش فرض

    راستی یادم رفت توی کد setdate باید اون weekday هم makebcd کنی :
    کد:
    Setdate:     _year = M_year - 2000   M_day = Makebcd(m_day): weekday = Makebcd(weekday) : M_month = Makebcd(m_month) : _year = Makebcd(_year)   I2cstart                                                   ' Generate start code   I2cwbyte Ds1307w                                           ' send address   I2cwbyte 3                                                 ' starting address in 1307  I2cwbyte weekday                                                I2cwbyte M_day                                             ' Send Data to SECONDS   I2cwbyte M_month                                           ' MINUTES   I2cwbyte _year                                             ' Hours   I2cstop  Return
    کد بالا را جایگزین کد قبلی کن

  25. تشکرها از این نوشته :


  26. #18
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام مرسی، خودم هی میزاشتم و هی پاک میکردم چون نمیدونستم درسته یا نه ولی الان که شما گفتی میزارم
    اقا اینبرنامه من و پروتئوسش، ببین روز هفته رو نشون میده
    میشه همین قسمت روزهای هفته رو بررسی کنی شرمنده
    http://uplod.ir/botgl7b9xl7v/test.rar.htm
    test.rar - 872.6 Kb

  27. #19
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام مرسی، خودم هی میزاشتم و هی پاک میکردم چون نمیدونستم درسته یا نه ولی الان که شما گفتی میزارم
    اقا اینبرنامه من و پروتئوسش، ببین روز هفته رو نشون میده
    میشه همین قسمت روزهای هفته رو بررسی کنی شرمنده
    http://uplod.ir/botgl7b9xl7v/test.rar.htm
    test.rar - 872.6 Kb

  28. #20
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2008
    نام
    mashhad
    نوشته ها
    32
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام
    کسی از دوستان می تونه بگه این برنامه مشکلش چیه؟
    وقتی ماه میلادی میره 31 روزه هست به مشکل میخوره برنامه
    یعنی مثلا الان روز 30 میلادی هست بعد باید بشه 31 ولی نمیشه و میشه اول ماه جدید و بعد که میری تو منو برای تغییرات، چه تغییر بدی و چه ندی و بیای بیرون یکی به روز اضافه میکنه!!!

    این برنامه کسی می تونه کمک کنه؟!؟!؟

    $regfile = "m32def.dat"

    $include "font8x8.font"
    $crystal = 8000000

    Declare Function M_kabise(byref Sal As Word)as Byte
    Declare Function Sh_kabise(byref Sal As Word)as Byte
    '-----------------------------------------------------
    $hwstack = 64
    $swstack = 64
    $framesize = 64
    $lib "glcdKS108.lbx"
    Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portb , Enable = 2 , Cd = 0 , Ce = 3 , Ce2 = 4 , Reset = 5 , Rd = 1
    Setfont Font8x8
    ''''''''''''''''''''''''''''''''''''''''''
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Enable Adc
    Start Adc
    '-----------------------------------------------------
    Config Sda = Portb.7
    Config Scl = Portb.6
    '****************************
    Const Ds1307w = &HD0
    Const Ds1307r = &HD1


    Dim _sec As Byte
    Dim _min As Byte
    Dim _hour As Byte
    Dim _year As Word
    Dim Weekday As Byte
    '--------------
    Dim M_day As Word
    Dim Sh_day As Word
    Dim M_year As Word
    Dim Sh_year As Word
    Dim M_month As Word
    Dim Sh_month As Word
    Dim Kabise As Byte
    Dim Kole_roz_m As Word
    Dim Kole_roz_sh As Word
    '----------------
    Dim A1_day As Word
    Dim A1_month As Word
    Dim A1_year As Word
    Dim A1_hour As Byte
    Dim A1_min As Byte
    Dim Aselection As Byte
    A1_day = 0
    A1_year = 0
    A1_month = 0
    A1_hour = 0
    A1_min = 0

    Dim Z1 As String * 15
    Dim Z As String * 10
    Dim H As Byte
    Dim W As Word
    Dim Temperature As Single
    '-------------

    '********************************

    Dim Conter1 As Word
    Dim Conter2 As Word
    Dim Conter3 As Word
    Dim Conter4 As Word
    Dim Day_of_month(12) As Byte
    Day_of_month(1) = 31
    Day_of_month(2) = 28
    Day_of_month(3) = 31
    Day_of_month(4) = 30
    Day_of_month(5) = 31
    Day_of_month(6) = 30
    Day_of_month(7) = 31
    Day_of_month(8) = 31
    Day_of_month(9) = 30
    Day_of_month(10) = 31
    Day_of_month(11) = 30
    Day_of_month(12) = 31
    '----------------------

    Dim Temp1 As Integer
    Dim Temp2 As Integer
    Dim Temp3 As Word
    Dim Temp4 As Word
    Dim Temp5 As Byte

    '-------bUZZZZZ-----
    'Buzz Alias Pina.3
    Config Portc.3 = Output
    Portc.3 = 0

    '----------------------- keys
    Key_menu Alias Pinc.0
    Config Key_menu = Input
    Portc.0 = 1

    Key_incr Alias Pinc.1
    Config Key_incr = Input
    Portc.1 = 1

    Key_decr Alias Pinc.2
    Config Key_decr = Input
    Portc.2 = 1
    '-----------------------------------
    Dim Menu As Byte
    Dim Timer_1 As Word
    Dim Timer_2 As Word
    Dim P As String * 15
    P = " dlydavood"
    Dim S1 As String * 20
    Dim S As String * 20
    S1 = " dlydavood"
    Dim Blink_flag As Bit
    Dim Selection As Byte
    Dim X1_sec As String * 4
    Dim X2_min As String * 4
    Dim X3_hour As String * 4

    Dim X4_sh_day As String * 4
    Dim X5_sh_month As String * 4
    Dim X6_sh_year As String * 4

    Dim X7_m_day As String * 4
    Dim X8_m_month As String * 4
    Dim X9_m_year As String * 4
    '------------------------------------

    Cls
    Lcdat 4 , 1 , S1
    Waitms 500
    Gosub Read_date_time
    Gosub M_to_sh
    A1_day = Sh_day
    A1_month = Sh_month
    A1_min = _min - 3
    A1_hour = _hour
    A1_year = Sh_year
    Cls

    Do 'Loop Asli
    Gosub Read_date_time
    Gosub M_to_sh


    'damasang

    W = Getadc(1)

    Temperature = W / 2

    Lcdat 8 , 1 , "T:" ; Temperature ; " "
    '---------------------------------------------


    If A1_year = Sh_year Then
    If A1_month = Sh_month Then
    If A1_day = Sh_day Then
    If A1_hour = _hour Then
    If A1_min = _min Then
    Lcdat 8 , 120 , "A"
    End If
    If A1_min > _min Then
    Lcdat 8 , 120 , "A"
    End If
    End If
    If A1_hour > _hour Then
    Lcdat 8 , 120 , "A"
    End If
    End If
    If A1_day > Sh_day Then
    Lcdat 8 , 120 , "A"
    End If
    End If
    If A1_month > Sh_month Then
    Lcdat 8 , 120 , "A"
    End If
    End If


    If A1_year > Sh_year Then
    Lcdat 8 , 120 , "A"
    End If


    If A1_day = Sh_day And A1_month = Sh_month And A1_year = Sh_year And A1_hour = _hour And A1_min = _min Then

    Cls
    Lcdat 1 , 1 , "Alarm!!!!"
    Lcdat 3 , 1 , "Press Key_decr"
    Lcdat 4 , 59 , "button to"
    Lcdat 6 , 1 , "shut off"
    Lcdat 7 , 59 , "the alarm"
    Do
    Portc.3 = 1
    For H = 1 To 20
    If Key_decr = 0 Then Exit Do
    Waitms 10
    Next
    Portc.3 = 0
    For H = 1 To 20
    If Key_decr = 0 Then Exit Do
    Waitms 10
    Next
    Loop Until Key_decr = 0
    A1_min = A1_min - 2


    Portc.3 = 0


    Cls
    End If

    Lcdat 1 , 1 , P

    '--------------------2 raghami kardane date v time---------------
    X1_sec = Str(_sec)
    X1_sec = Format(x1_sec , "00")

    X2_min = Str(_min)
    X2_min = Format(x2_min , "00")

    X3_hour = Str(_hour)
    X3_hour = Format(x3_hour , "00")

    X4_sh_day = Str(sh_day)
    X4_sh_day = Format(x4_sh_day , "00")

    X5_sh_month = Str(sh_month)
    X5_sh_month = Format(x5_sh_month , "00")

    X6_sh_year = Str(sh_year)
    X6_sh_year = Format(x6_sh_year , "0000")

    X7_m_day = Str(m_day)
    X7_m_day = Format(x7_m_day , "00")

    X8_m_month = Str(m_month)
    X8_m_month = Format(x8_m_month , "00")

    X9_m_year = Str(m_year)
    X9_m_year = Format(x9_m_year , "0000")
    '----------------------------------------------------------------

    Lcdat 2 , 1 , "TIME: " ; X3_hour ; ":" ; X2_min ; ":" ; X1_sec
    Lcdat 4 , 1 , "D_SH: " ; X6_sh_year ; "/" ; X5_sh_month ; "/" ; X4_sh_day
    Lcdat 6 , 1 , "D_M_: " ; X9_m_year ; "/" ; X8_m_month ; "/" ; X7_m_day
    'If Sh_month <= 6 Then
    'If Sh_day = 31 Then
    'or
    'If Sh_month > 6 Then
    'If Sh_day = 30 Then
    ' Cls
    If _sec = 59 Then
    Waitms 300
    Cls
    Lcdat 1 , 1 , P
    Lcdat 2 , 1 , "TIME: " ; X3_hour ; ":" ; X2_min ; ":"
    Lcdat 4 , 1 , "D_SH: " ; X6_sh_year ; "/" ; X5_sh_month ; "/" ; X4_sh_day
    Lcdat 6 , 1 , "D_M_: " ; X9_m_year ; "/" ; X8_m_month ; "/" ; X7_m_day
    End If
    If _min = 59 Then
    Waitms 300
    Cls
    Lcdat 1 , 1 , P
    Lcdat 2 , 1 , "TIME: " ; X3_hour ; ": " ; ; ":" ; X1_sec
    Lcdat 4 , 1 , "D_SH: " ; X6_sh_year ; "/" ; X5_sh_month ; "/" ; X4_sh_day
    Lcdat 6 , 1 , "D_M_: " ; X9_m_year ; "/" ; X8_m_month ; "/" ; X7_m_day
    End If
    If _hour = 24 Then Cls

    '---------------------------- namayesh rozhaye hafte-------------------

    If Weekday = 0 Then Lcdat 8 , 80 , " SAT"
    If Weekday = 1 Then Lcdat 8 , 80 , " SUN"
    If Weekday = 2 Then Lcdat 8 , 80 , " MON"
    If Weekday = 3 Then Lcdat 8 , 80 , " TUE"
    If Weekday = 4 Then Lcdat 8 , 80 , " WED"
    If Weekday = 5 Then Lcdat 8 , 80 , " THU"
    If Weekday = 6 Then Lcdat 8 , 80 , " FRI"



    '---------------------------- WAIT AND READ KEY

    If Key_menu = 0 Then
    Waitus 10

    If Key_menu = 0 Then
    Cls
    Lcdat 4 , 45 , "MENU"

    Waitms 400
    Gosub Menu
    End If



    End If

    If Key_incr = 0 Then
    Waitus 10

    If Key_incr = 0 Then
    Cls
    Lcdat 4 , 24 , "ALARM-1-SET"

    Waitms 400
    Gosub Alarm1
    End If



    End If



    '------------------------------
    Loop


    Menu:

    Selection = 1
    Cls
    Do

    Incr Timer_1
    If Timer_1 > 5 Then
    Timer_1 = 0
    Toggle Blink_flag
    End If
    'Blink_flag = 0
    S1 = "TIME: "
    '-----------------------------
    If Selection = 1 And Blink_flag = 0 Then

    S1 = S1 + " "
    Else

    S = Str(_hour)
    S = Format(s , "00")
    S1 = S1 + S

    End If
    S1 = S1 + ":"
    '------------------------------
    If Selection = 2 And Blink_flag = 0 Then

    S1 = S1 + " "
    Else

    S = Str(_min)
    S = Format(s , "00")
    S1 = S1 + S

    End If
    S1 = S1 + ":"
    '------------------------------
    If Selection = 3 And Blink_flag = 0 Then

    S1 = S1 + " "
    Else

    S = Str(_sec)
    S = Format(s , "00")
    S1 = S1 + S

    End If


    Lcdat 1 , 1 , S1



    S1 = "DATE: "
    '--------------------------------
    If Selection = 4 And Blink_flag = 0 Then

    S1 = S1 + " "
    Else

    S = Str(sh_year)
    S = Format(s , "0000")
    S1 = S1 + S

    End If
    S1 = S1 + "/"
    '---------------------------------
    If Selection = 5 And Blink_flag = 0 Then

    S1 = S1 + " "
    Else

    S = Str(sh_month)
    S = Format(s , "00")
    S1 = S1 + S

    End If
    S1 = S1 + "/"
    '----------------------------------
    If Selection = 6 And Blink_flag = 0 Then

    S1 = S1 + " "
    Else

    S = Str(sh_day)
    S = Format(s , "00")
    S1 = S1 + S

    End If

    Lcdat 4 , 1 , S1





    If Key_menu = 0 Then
    Waitus 10
    If Key_menu = 0 Then Incr Selection
    End If


    '-----------------------------------
    If Key_incr = 0 Then
    Waitus 10
    If Key_incr = 0 Then

    If Selection = 1 Then Incr _hour
    If Selection = 2 Then Incr _min
    If Selection = 3 Then Incr _sec
    If Selection = 4 Then Incr Sh_year
    If Selection = 5 Then Incr Sh_month
    If Selection = 6 Then Incr Sh_day

    End If

    End If
    '------------------------------------
    If Key_decr = 0 Then
    Waitus 10
    If Key_decr = 0 Then

    If Selection = 1 Then Decr _hour
    If Selection = 2 Then Decr _min
    If Selection = 3 Then Decr _sec
    If Selection = 4 Then Decr Sh_year
    If Selection = 5 Then Decr Sh_month
    If Selection = 6 Then Decr Sh_day

    End If

    End If

    '--------------------------------------
    If _hour > 100 Then _hour = 24
    If _min > 100 Then _min = 59
    If _sec > 100 Then _sec = 59

    If _hour > 24 Then _hour = 00
    If _min > 59 Then _min = 00
    If _sec > 59 Then _sec = 00

    If Sh_year > 1470 Then Sh_year = 1390
    If Sh_month > 12 Then Sh_month = 1
    If Sh_day > 31 Then Sh_day = 1


    If Sh_year < 1390 Then Sh_year = 1470
    If Sh_month < 1 Then Sh_month = 12
    If Sh_day < 1 Then Sh_day = 31
    '---------------------------------------


    Waitms 40

    If Selection > 6 Then Exit Do

    Loop

    Cls
    Lcdat 4 , 40 , "saving"

    Wait 1
    Gosub Sh_to_m
    Gosub Setdate
    Gosub Settime
    Cls
    Return

    '----------------------------

    Alarm1:
    Cls
    Lcdat 1 , 40 , "Alarm1"
    Aselection = 1
    'Timer_1 = 0
    'Blink_flag = 0
    Do
    Incr Timer_1
    If Timer_1 > 5 Then
    Timer_1 = 0
    Toggle Blink_flag
    End If
    Z1 = "TIME: "
    '-----------------------------
    If Aselection = 1 And Blink_flag = 0 Then
    Z1 = Z1 + " "
    Else

    Z = Str(a1_hour)
    Z = Format(z , "00")
    Z1 = Z1 + Z

    End If
    Z1 = Z1 + ":"
    '------------------------------
    If Aselection = 2 And Blink_flag = 0 Then
    Z1 = Z1 + " "
    Else
    Z = Str(a1_min)
    Z = Format(z , "00")
    Z1 = Z1 + Z

    End If
    'Z1 = Z1 + ":"
    Lcdat 3 , 1 , Z1



    Z1 = "DATE: "
    '------------------------------
    If Aselection = 3 And Blink_flag = 0 Then
    Z1 = Z1 + " "
    Else
    Z = Str(a1_year)
    Z = Format(z , "0000")
    Z1 = Z1 + Z

    End If
    Z1 = Z1 + "/"
    '---------------------------------
    If Aselection = 4 And Blink_flag = 0 Then
    Z1 = Z1 + " "

    Else

    Z = Str(a1_month)
    Z = Format(z , "00")
    Z1 = Z1 + Z

    End If
    Z1 = Z1 + "/"
    '----------------------------------
    If Aselection = 5 And Blink_flag = 0 Then
    Z1 = Z1 + " "
    Else


    Z = Str(a1_day)
    Z = Format(z , "00")
    Z1 = Z1 + Z

    End If
    '-----------------

    Lcdat 6 , 1 , Z1


    If Key_menu = 0 Then
    Waitus 10
    If Key_menu = 0 Then Incr Aselection
    End If


    '-----------------------------------
    If Key_incr = 0 Then
    Waitus 10
    If Key_incr = 0 Then

    If Aselection = 1 Then Incr A1_hour
    If Aselection = 2 Then Incr A1_min
    If Aselection = 3 Then Incr A1_year
    If Aselection = 4 Then Incr A1_month
    If Aselection = 5 Then Incr A1_day

    End If

    End If
    '------------------------------------
    If Key_decr = 0 Then
    Waitus 10
    If Key_decr = 0 Then

    If Aselection = 1 Then Decr A1_hour
    If Aselection = 2 Then Decr A1_min
    If Aselection = 3 Then Decr A1_year
    If Aselection = 4 Then Decr A1_month
    If Aselection = 5 Then Decr A1_day

    End If

    End If

    '--------------------------------------
    If A1_hour > 100 Then A1_hour = 24
    If A1_min > 100 Then A1_min = 59

    If A1_hour > 24 Then A1_hour = 00
    If A1_min > 59 Then A1_min = 00

    If A1_year > 1470 Then A1_year = 1390
    If A1_month > 12 Then A1_month = 1
    If A1_day > 31 Then A1_day = 1


    If A1_year < 1390 Then A1_year = 1470
    If A1_month < 1 Then A1_month = 12
    If A1_day < 1 Then A1_day = 31
    '---------------------------------------


    Waitms 40

    If Aselection > 5 Then Exit Do

    Loop


    Cls
    Lcdat 4 , 40 , "saving"

    Wait 1
    Cls
    Return









    Read_date_time:
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 0 ' start address in 1307
    I2cstart ' Generate start code
    I2cwbyte Ds1307r ' send address
    I2crbyte _sec , Ack
    I2crbyte _min , Ack ' MINUTES
    I2crbyte _hour , Ack ' Hours
    I2crbyte Weekday , Ack ' Day of Week
    I2crbyte M_day , Ack ' Day of Month
    I2crbyte M_month , Ack ' Month of Year
    I2crbyte _year , Nack ' Year
    I2cstop
    _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
    M_day = Makedec(m_day) : M_month = Makedec(m_month) : _year = Makedec(_year)
    M_year = 2000 + _year

    Weekday = Makedec(weekday)


    Return


    Setdate:

    _year = M_year - 2000
    M_day = Makebcd(m_day) : M_month = Makebcd(m_month) : _year = Makebcd(_year)
    Weekday = Makebcd(weekday)


    If Weekday > 6 Then Weekday = 0
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 3 ' starting address in 1307
    I2cwbyte Weekday
    I2cwbyte M_day ' Send Data to SECONDS
    I2cwbyte M_month ' MINUTES
    I2cwbyte _year ' Hours
    I2cstop


    Return


    Settime:
    _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)

    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 0 ' starting address in 1307
    I2cwbyte _sec ' Send Data to SECONDS
    I2cwbyte _min ' MINUTES
    I2cwbyte _hour ' Hours
    I2cstop
    Return



    M_to_sh:

    '----------------
    If M_kabise(m_year) = 0 Then
    Day_of_month(2) = 28
    Else
    Day_of_month(2) = 29
    End If
    '----------------

    Conter2 = M_month - 1
    Kole_roz_m = 0

    For Conter1 = 1 To Conter2
    Kole_roz_m = Kole_roz_m + Day_of_month(conter1)
    Next
    Kole_roz_m = Kole_roz_m + M_day

    '**********************************

    If Kole_roz_m > 79 Then

    Sh_year = M_year - 621
    Kole_roz_sh = Kole_roz_m - 79

    Else

    Sh_year = M_year - 622

    Temp4 = M_year - 1
    Temp5 = M_kabise(temp4)

    If Temp5 = 0 Then
    Kole_roz_sh = Kole_roz_m + 286
    Else
    Kole_roz_sh = Kole_roz_m + 287
    End If

    End If

    '**********************************

    Sh_month = 1

    '****************
    While Kole_roz_sh > 30

    If Sh_month < 7 Then
    Kole_roz_sh = Kole_roz_sh - 31
    Else
    Kole_roz_sh = Kole_roz_sh - 30
    End If

    Incr Sh_month

    Wend
    '***************
    '---------------
    If Kole_roz_sh = 0 Then

    Decr Sh_month
    If Sh_month < 7 Then
    Sh_day = 31
    Else
    Sh_day = 30
    End If
    Else
    Sh_day = Kole_roz_sh
    End If
    '---------------
    Return


    Sh_to_m:

    '------------------
    Kole_roz_sh = 0
    '------------------

    If Sh_month > 6 Then

    Kole_roz_sh = 186
    Temp4 = Sh_month - 7
    Temp4 = Temp4 * 30
    Kole_roz_sh = Kole_roz_sh + Temp4

    Else

    Temp4 = Sh_month - 1
    Temp4 = Temp4 * 31
    Kole_roz_sh = Kole_roz_sh + Temp4

    End If
    Kole_roz_sh = Kole_roz_sh + Sh_day

    '****************************
    If Kole_roz_sh > 286 Then

    M_year = Sh_year + 622
    Kole_roz_m = Kole_roz_sh - 286

    Else

    M_year = Sh_year + 621
    Kole_roz_m = Kole_roz_sh + 79

    End If
    '**************************
    Temp5 = M_kabise(m_year)

    If Temp5 = 0 Then
    Day_of_month(2) = 28
    Else
    Day_of_month(2) = 29
    End If

    '----------------

    For M_month = 1 To 12

    If Kole_roz_m < 31 Then Exit For
    Kole_roz_m = Kole_roz_m - Day_of_month(m_month)

    Next


    If Kole_roz_m > Day_of_month(m_month) Then

    Kole_roz_m = Kole_roz_m - Day_of_month(conter1)
    Incr M_month

    End If

    M_day = Kole_roz_m

    Return


    End




    Function M_kabise(byref Sal As Word)as Byte

    Local T1 As Integer
    Local T2 As Integer
    Local T3 As Integer
    Local B As Byte
    '=========================
    T1 = Sal Mod 4
    T2 = Sal Mod 100
    T3 = Sal Mod 400
    B = 0
    '=========================
    '------
    If T1 = 0 And T2 <> 0 Then
    B = 1
    End If
    '------
    If T2 = 0 And T3 = 0 Then
    B = 1
    End If
    '------
    M_kabise = B

    End Function


    Function Sh_kabise(byref Sal As Word)as Byte

    Local T1 As Integer
    Local B As Byte
    '==================
    T1 = Sal Mod 33
    B = 0
    '==================
    '------
    If T1 = 1 Or T1 = 5 Or T1 = 9 Or T1 = 13 Or T1 = 17 Or T1 = 22 Or _
    T1 = 26 Or T1 = 30 Then

    B = 1

    End If
    '------
    Sh_kabise = B

    End Function

صفحه 1 از 2 12 آخرینآخرین

موضوعات مشابه

  1. پاسخ: 10
    آخرين نوشته: 12-02-2016, 09:17
  2. ساعت با تقویم فارسی با avr
    توسط mostafahk در انجمن گفت و گوي آزاد
    پاسخ: 2
    آخرين نوشته: 13-02-2013, 23:16
  3. پاسخ: 37
    آخرين نوشته: 23-06-2012, 23:57
  4. مشکل اساسی و قدیمی سریال در کدویژن
    توسط amiraliforoozandeh در انجمن AVR
    پاسخ: 4
    آخرين نوشته: 04-02-2012, 12:22
  5. آخرین آمار دسترسی اینترنت پر سرعت در ایران
    توسط arsalan681 در انجمن اخبار کامپیوتر و IT و مسابقات رباتیک
    پاسخ: 0
    آخرين نوشته: 20-08-2010, 12:29

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •