PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ال سی دی گرافیکی با ساعت و تقویم و دماسنج و الارم



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

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

dlydavood
12-12-2012, 22:07
سلام مهندس
براي اينكه بتونيم مشكل برنامه رو متوجه بشيم بايد برنامه رو ببينيم پس لطفا برنامتونو قرار بدين تا دربارش نظر بديم.

سلام جناب مدیر
خیلی لطف کردین که سریع اومدین کمک الان میزارم
اینم لینک مستقیم
You can see links before reply
البته من زیاد در زمینه برنامه نویسی خوب نیستم
ببینید کد رو و بگین چی کار کنم مخصوصا برای روز های هفته
اگه لازمه پروتئوس مدار رو هم بذارم؟

dlydavood
13-12-2012, 09:52
سلام دوباره
چی شد مهندس برنامه رو دیدین؟

dlydavood
13-12-2012, 19:14
مشکل ثانیه حل شد و دیگه تو منو میرم و خارج میشم خود به خود به روز دیگه اضافه نمیشه You can see links before reply
فقط موند دورقمی کردن تاریخ و ساعت و روز های هفته فارسی You can see links before reply

Doloop
13-12-2012, 23:51
فقط موند دورقمی کردن تاریخ و ساعت و روز های هفته فارسی You can see links before reply

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

nicolas1390
14-12-2012, 08:24
سلام
برنامه ای که شما استفاده کردید تاریخ شمسیش مشکل داره ، این همون برنامه ای هست که تو اینترنت ریخته :mrgreen: اما تاریخش مشکل داره یعنی توی تبدیل تاریخ مشکل داره
برای روز هفته هم که توی زیربرنامه 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")

من بسکام الان دم دست ندارم شاید یکسری دستورات رو پس و پیش نوشته باشم

dlydavood
14-12-2012, 09:23
سلام
برنامه ای که شما استفاده کردید تاریخ شمسیش مشکل داره ، این همون برنامه ای هست که تو اینترنت ریخته :mrgreen: اما تاریخش مشکل داره یعنی توی تبدیل تاریخ مشکل داره
برای روز هفته هم که توی زیربرنامه 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 خط، چون خیلی چیزها بهش اضافه و کم شده:wink:
اره تو تاریخ شمسی یخورده اذیت داره و هر چی گشتم که مشکل رو برطورف کنم نتونستم!! شما میدونید مشکل چیه؟!؟!؟ضمنا من سخت افزاری بستم و تو سخت افزاری اصلا مشکل نداره!

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

اگه کمکم کنید ممنون میشم cry::

nicolas1390
14-12-2012, 09:48
ضمنا من سخت افزاری بستم و تو سخت افزاری اصلا مشکل نداره!
خب سوال؟ چرا برابر 3 قرار دادین کد زیر رو؟ قبلا 4 بود
I2cwbyte 3
خب برای فارسی نویسسیش چیکار کنم فونت فارسی از سایت eca گرفتم ولی نمیدونم چکارش کنم و روزهای هفه رو رو ال سی دی بنویسم بصورت فارسی چون اصلا تو کار فارسی نبودم

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

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

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

dlydavood
14-12-2012, 10:20
اقای nicolas1390 دستت درد نکنه با همون روش فرمت که گفتی مشکل دو رقمی ساعت و تاریخ رو حل کردم
البته تو قسمت منوی برنامم از همین روش استفاده کرده بودم ولی نمی دونستم چه جوری اینجا درستش کنم که نمونه مثالی که زده بودی بدردم خورد ایول

dlydavood
14-12-2012, 10:27
خواهش می کنم
چرا ،توی سخت افزار هم مشکل داره ، یادم نیست توی چه تاریخ هایی مشکل داشت اما اگه همون برنامه توی اینترنت باشه شک نکنین که مشکل داره ، دنبال الگوریتم دیگه باشین .

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

nicolas1390
14-12-2012, 10:32
شما فقط همون کدی که دادم را جایگزین کنید ، زیربرنامه setdate را پاک کنید و زیربرنامه setdate که نوشتم را توی برنامه قرار بدید و تمام

dlydavood
14-12-2012, 11:07
شما فقط همون کدی که دادم را جایگزین کنید ، زیربرنامه 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"
با نوشتن انها مشکل حله یا نه؟ شرمنده

nicolas1390
14-12-2012, 11:15
کجاش رو خودتون باید تصمیم بگیرید ، همون جایی قرار بدید که دارین ساعت و تاریخ را نمایش میدید ! توی پست اول گفتم که شما موقع ست کردن تاریخ باید روز هفته را به ds1307 بدین ، خودش نمیتونه روز هفته را تشخیص بده ، اون فقط به روز هفته ای که شما بهش دادین یک روز اضافه می کنه تا 7 تا کامل بشه بعد دوباره شروع می کنه به شمردن ، من شنبه را صفر در نظر گرفتم و جمعه را 6.

dlydavood
15-12-2012, 12:12
سلام اقا کسی میدونه اشکال این برنامه چیه که تو پروتئوس تاریخ ها رو به این صورت نشون میده؟!؟؟!
5455998.jpg (You can see links before reply)
You can see links before reply

dlydavood
15-12-2012, 20:37
سلا اقا کسی نیست کمک من کنه!! این برنامم اگه کسی می تونه کمک کنه دریغ نکنه ثواب داره:125:
You can see links before reply
noname1.bas - 17.1 Kb (You can see links before reply)

nicolas1390
15-12-2012, 23:57
راستی یادم رفت توی کد 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

کد بالا را جایگزین کد قبلی کن

dlydavood
16-12-2012, 09:37
سلام مرسی، خودم هی میزاشتم و هی پاک میکردم چون نمیدونستم درسته یا نه ولی الان که شما گفتی میزارم
اقا اینبرنامه من و پروتئوسش، ببین روز هفته رو نشون میده
میشه همین قسمت روزهای هفته رو بررسی کنی شرمنده
You can see links before reply
test.rar - 872.6 Kb (You can see links before reply)

dlydavood
16-12-2012, 09:37
سلام مرسی، خودم هی میزاشتم و هی پاک میکردم چون نمیدونستم درسته یا نه ولی الان که شما گفتی میزارم
اقا اینبرنامه من و پروتئوسش، ببین روز هفته رو نشون میده
میشه همین قسمت روزهای هفته رو بررسی کنی شرمنده
You can see links before reply
test.rar - 872.6 Kb (You can see links before reply)

dlydavood
31-12-2012, 23:33
سلام
کسی از دوستان می تونه بگه این برنامه مشکلش چیه؟
وقتی ماه میلادی میره 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

ramin.st
01-01-2013, 08:37
سلام دوست عزیز یک نگاه توی پوشه ی sample بسکام بنداز یک فایل هست به نام ds1307 که این ایسی رو به صورت system clock user راه اندازی کرده من خودم توی تابلوی نویسنده از این برنامه استفاده کردم و هیچ مشکلی نداشته
این پست رو نگاه کنین پروژه های 100% عملی با (avr (ramin fakhar sade - ایـــــــــران میـــــــکرو ™ (You can see links before reply)

dlydavood
01-01-2013, 09:13
سلام اقا رامین ممنون جواب دادین
من دیدم فایلی که شما میگی ولی این تبدیل میلادی به شمسی نداره
مشکل منم تو برنامه خودمم همین تبدیل میلادی به شمسی هست که به مشکل خورده، اگه میشه یه نگاه کوچیک به میلادی به شمسی و برعکسش بندازین

ramin.st
01-01-2013, 11:23
پروژه ای که توی پست خودم گذاشتم فرمول تبدیل میلادی به شمسی رو داره یک نگاه بندازین ! lov:lov: