درود بر همگی دوستان کسی برنامه تبدیل تاریخ شمسی به میلادی در آی سی ds1307 رو داره؟راستش با lcd زیاد هست من ساعتش رو با 7سگمنت ساختم مشکلی هم با نمایش تاریخ میلادی ندارم اما میخوام با همین آی سی میلادی رو به شمسی تبدیل کنم کسی هست کمک کنه؟ممنون میشم
اطلاعیه
Collapse
No announcement yet.
برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)
Collapse
X
-
پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)
نه اخه ممکنه مقدارهای داخلش باشه که نشه تو برنامه ام بذارم و باید دس ببرم داخلش اصلا باید تغییر اساسی داده بشه ممکنه با متغییرهایی که من گرفتم قاطی پاطی شه :angry: .......راستی میشه برنامه رو چند تیکه کرد؟مثلا 4تا دکمه بذاری و چهار خط برنامه اشو داخل حلقه do-loop بذاری هرکدوم از کلیدها که زده شد بره داخل یه زیربرنامه که اونجاهم حلقه do-loop داشته باشه میخوام با اینکار حالت های ساعت و تاریخ رو تغییر بدم مثلا ساعتم رو هم 12ساعته بذارم(am-pm) هم 24ساعته یعنی واسه اینکار دوتا کلید بذارم.....واسه تاریخم 2تا بذاری میلادی و شمسی
میخواستم بدونم این راه ج میده یا باید برنامه رو جور دیگه ای نوشتدر روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........
دیدگاه
-
پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)
[code]
Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
Const Ds1307r = &HD1
Config Clock = User
Config Date = Dmy , Separator = / ' this will dim the bytes automatic
'dim other needed variables
Declare Function M_kabise(byref Sal As Word)as Byte
Declare Function Sh_kabise(byref Sal As Word)as Byte
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 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
.
.
.
Do
Gosub Getdatetime
If _sec = 0 Then
Gosub M_to_sh
end if
Loop
.
.
.
Getdatetime:
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 _day , Ack ' Day of Month
I2crbyte _month , Ack ' Month of Year
I2crbyte _year , Nack ' Year
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 4 ' starting address in 1307
I2cwbyte _day ' Send Data to SECONDS
I2cwbyte _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
'---------------------------- date chenge --------------------------------
'============================================ =============================
M_to_sh:
M_year = 2000 + _year : M_month = _month : M_day = _day
'----------------
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
'******************************************** ***********************************
'****************************** ****************
'WWW.ISEEE.IR ***************** SHAMSI TO MILADI ****************
'****************************** ****************
'******************************************** ***********************************
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
'**************************
If M_kabise(m_year) = 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
'============================================ ===================
'============================================ ===================
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
کد:بیا متغیراشم بهت دادم دیگه دست نبر توش فقط از متغیرا استفاده کن وبه چند نکته دقت کن اوی اینکه وقتی میخوای وارد یه زیر برنامه بشی مظمئن باش که متغیرهای داخلشو قبلا استفاده نکرده باشی یعنی وقتی میری تو زیر برنامه متغیر مقداری نداشته باشه که تو محاسباتی که روش انجاممیشه تاثیر بذاره :agree: دوم وقتی میخوای برنامه بنویسی همیشه خودتو بذار جای pointer برنامه رو خط به خط دنبال کن :read: سوم هیچ وقت به پروتئوس اعتماد نکن :angry:
دیدگاه
-
پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)
سلام تبدیل تاریخ که کاری به آیسی نداره و من منظورتون رو متوجه نشدم
برای حالت 4 مد کاری میتونی اول برنامه توی یک حلقه ی اصلی 4تا if بزاری که وضعیت کلیدها رو بخونه و به مد موردنظر پرش کنه بعد اونجا هم بزاریش توی یک حلقه ی دیگه البته با این شرط که اگر یک کلید دیگه زده شد از این حلقه بیاد بیرون و به اون حلقه اصلی برگرده و دوباره وضعیت کلیدها رو چک کنه
دیدگاه
-
پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)
نوشته اصلی توسط m.plusboy[code]
Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
Const Ds1307r = &HD1
Config Clock = User
Config Date = Dmy , Separator = / ' this will dim the bytes automatic
'dim other needed variables
Declare Function M_kabise(byref Sal As Word)as Byte
Declare Function Sh_kabise(byref Sal As Word)as Byte
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 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
.
.
.
Do
Gosub Getdatetime
If _sec = 0 Then
Gosub M_to_sh
end if
Loop
.
.
.
Getdatetime:
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 _day , Ack ' Day of Month
I2crbyte _month , Ack ' Month of Year
I2crbyte _year , Nack ' Year
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 4 ' starting address in 1307
I2cwbyte _day ' Send Data to SECONDS
I2cwbyte _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
'---------------------------- date chenge --------------------------------
'============================================ =============================
M_to_sh:
M_year = 2000 + _year : M_month = _month : M_day = _day
'----------------
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
'******************************************** ***********************************
'****************************** ****************
'WWW.ISEEE.IR ***************** SHAMSI TO MILADI ****************
'****************************** ****************
'******************************************** ***********************************
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
'**************************
If M_kabise(m_year) = 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
'============================================ ===================
'============================================ ===================
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
کد:بیا متغیراشم بهت دادم دیگه دست نبر توش فقط از متغیرا استفاده کن وبه چند نکته دقت کن اوی اینکه وقتی میخوای وارد یه زیر برنامه بشی مظمئن باش که متغیرهای داخلشو قبلا استفاده نکرده باشی یعنی وقتی میری تو زیر برنامه متغیر مقداری نداشته باشه که تو محاسباتی که روش انجاممیشه تاثیر بذاره :agree: دوم وقتی میخوای برنامه بنویسی همیشه خودتو بذار جای pointer برنامه رو خط به خط دنبال کن :read: سوم هیچ وقت به پروتئوس اعتماد نکن :angry:
نوشته اصلی توسط Masoud0711سلام تبدیل تاریخ که کاری به آیسی نداره و من منظورتون رو متوجه نشدم
برای حالت 4 مد کاری میتونی اول برنامه توی یک حلقه ی اصلی 4تا if بزاری که وضعیت کلیدها رو بخونه و به مد موردنظر پرش کنه بعد اونجا هم بزاریش توی یک حلقه ی دیگه البته با این شرط که اگر یک کلید دیگه زده شد از این حلقه بیاد بیرون و به اون حلقه اصلی برگرده و دوباره وضعیت کلیدها رو چک کنه
دستتون درد نکنه فقط این مد های کاری رو که گفتم مثلا تو برنامه اصلی شرط کلیدهارو هم گذاشتم بعد اگه رفت داخل یکی از مدها و اون مد رو اجرا کرد باید چیکارکنم که اگه کلید دیگری زده شد و خواست مد دیگه ای رو اجرا کنه چطوری از مد ای که داره کار میکنه بره به مد دیگه.....یا اون وضعیت کلیدها رو دائم چک کنه؟در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........
دیدگاه
-
پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)
نوشته اصلی توسط کوروش22
دستتون درد نکنه فقط این مد های کاری رو که گفتم مثلا تو برنامه اصلی شرط کلیدهارو هم گذاشتم بعد اگه رفت داخل یکی از مدها و اون مد رو اجرا کرد باید چیکارکنم که اگه کلید دیگری زده شد و خواست مد دیگه ای رو اجرا کنه چطوری از مد ای که داره کار میکنه بره به مد دیگه.....یا اون وضعیت کلیدها رو دائم چک کنه؟
یک راه دقیقترم اینه که از وقفه int استفاده کنی که اگه کلید رو فشار داری فورا بپره به برنامه اصلی
دیدگاه
-
پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)
نوشته اصلی توسط Masoud0711میتونی do loop حلقه ی هر مد رو مثلا به این صورت do loop untill pind.0=0 بزاری که اگر pind.0 فشار داده شد از این حلقه خارج شده و به حلقه اصلی بپره
یک راه دقیقترم اینه که از وقفه int استفاده کنی که اگه کلید رو فشار داری فورا بپره به برنامه اصلیoo: اصلا امکانش هست :read:
میشه واسه این وقفه یه مثال هم بزنی؟ممنون میشمدر روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........
دیدگاه
دیدگاه