سلام دوستان من به یه مشکلی برخوردم یه ساعت با atmega16 روی برد برد زدم ولی نمدونم چرا به جای ساعت و تاریخ برنامه توی خط پایین ال سی دی مربع رو نشون میده ؟ :angry:
اطلاعیه
Collapse
No announcement yet.
یه مشکل با ال سی دی ساعت
Collapse
X
-
پاسخ : یه مشکل با ال سی دی ساعت
روی لینکی که گذاشتم کلیک کن میبینی
برنامه رو هم اینه ::::
$regfile = "m16def.dat"
$crystal = 1000000
$lib "ds1307clock.lib"
Config Portb = Input
Enable Interrupts
Config Lcdpin = Pin , Db4 = Pinc.3 , Db5 = Pinc.2 , Db6 = Pinc.1 , Db7 = _
Pinc.0 , Rs = Pinc.4 , E = Pinc.5
Config Lcd = 16 * 2
Cursor Off
Cls
Config Sda = Portd.7
Config Scl = Portd.6
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Dim State As Byte
Dim Weekday As Byte
Dim Myear As Integer 'input miladi(gregorian) year
Dim Mday As Integer 'input miladi day
Dim Mmonth As Integer 'input miladi month
Dim Mdayofyear As Integer
Dim Myear_ As Integer
Dim Jday As Integer 'Output jalali(shamsi) day
Dim Jmonth As Integer 'Output Jalali month
Dim Jyear As Integer 'Output Jalali year
Dim Jdayofyear As Integer
Dim Gnumdayofyear As Integer
Dim Isleapyear As Bit
Dim Isleapyearp As Bit
Dim Iloop As Byte
Dim Temp1 As Integer
Dim Temp2 As Integer
Dim Temp3 As Integer
Dim Temp4 As Integer
Dim Jmonth_a(12) As Byte
Dim Mmonth_a(12) As Byte
Mmonth_a(1) = 31
Mmonth_a(2) = 28
Mmonth_a(3) = 31
Mmonth_a(4) = 30
Mmonth_a(5) = 31
Mmonth_a(6) = 30
Mmonth_a(7) = 31
Mmonth_a(8) = 31
Mmonth_a(9) = 30
Mmonth_a(10) = 31
Mmonth_a(11) = 30
Mmonth_a(12) = 31
Gnumdayofyear = 365
Config Porta = Input
Porta = 255
Do
Gosub Getdatetime
Debounce Pina.0 , 0 , Setting , Sub
Myear = _year + 2000 'Sample miladi (gregorian) Year
Mday = _day 'Sample miladi day
Mmonth = _month
Temp1 = Myear Mod 4
Temp2 = Myear Mod 100
Temp3 = Myear Mod 400
Temp4 = Temp1 And Temp2
If Temp4 <> 0 Or Temp3 = 0 Then
Mmonth_a(2) = 28
Else
Mmonth_a(2) = 29
End If
Myear_ = Myear - 1
Temp1 = Myear_ Mod 4
Temp2 = Myear_ Mod 100
Temp3 = Myear_ Mod 400
Temp4 = Temp1 And Temp2
If Temp4 <> 0 Or Temp3 = 0 Then
Reset Isleapyearp
Else
Set Isleapyearp
End If
Temp1 = Mmonth - 1
For Iloop = 1 To Temp1
Mdayofyear = Mmonth_a(iloop) + Mdayofyear
Next
Mdayofyear = Mday + Mdayofyear
If Mdayofyear > 79 Then
Temp1 = Mdayofyear - 79
Jyear = Myear - 621
If Temp1 < 186 Then
Temp2 = Temp1 Mod 31
Temp3 = Temp1 / 31
If Temp2 = 0 Then
Jmonth = Temp3
Jday = 31
Else
Jmonth = Temp3 + 1
Jday = Temp2
End If
Else
Temp2 = Temp1 - 186
Temp3 = Temp2 Mod 30
Temp4 = Temp2 / 30
If Temp3 = 0 Then
Jmonth = Temp4 + 6
Jday = 30
Else
Jmonth = Temp4 + 7
Jday = Temp3
End If
End If
Else
Jyear = Myear - 622
If Isleapyearp = 1 Then
Mdayofyear = Mdayofyear + 11
Else
Mdayofyear = Mdayofyear + 10
End If
Temp2 = Mdayofyear Mod 30
Temp3 = Mdayofyear / 30
If Temp2 = 0 Then
Jmonth = Temp3 + 9
Jday = 30
Else
Jmonth = Temp3 + 10
Jday = Temp2
End If
End If
Locate 1 , 1
Lcd "> "
Locate 1 , 4
Lcd Jyear ; "/" ; Jmonth ; "/" ; Jday ; " "
Locate 1 , 16
Lcd "<"
Locate 2 , 1
Lcd "* " ; Time$ ; " *"
Mdayofyear = 0
Main:
If Pinb.0 = 1 Then
Home
Lcd " LEFT&REAR DOOR "
Lowerline
Lcd " OPEN "
Waitms 500
Goto Main
End If
Home
If Pinb.1 = 1 Then
Home
Lcd "RIGHT&REAR DOOR "
Lowerline
Lcd " OPEN "
Waitms 500
Goto Main
End If
If Pinb.2 = 1 Then
Home
Lcd "LEFT&FRONT DOOR "
Lowerline
Lcd " OPEN "
Waitms 500
Goto Main
End If
If Pinb.3 = 1 Then
Home
Lcd "RIGHT&FRONT DOOR "
Lowerline
Lcd " OPEN "
Waitms 500
Goto Main
End If
Waitms 300
Loop
End
Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Weekday = Makebcd(weekday)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 4
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cwbyte Weekday
I2cstop
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) : Weekday = Makebcd(weekday)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cwbyte Weekday
I2cstop
Return
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Setting:
If State = 0 Then
State = 1
Gosub Lcd_time
Elseif State = 1 Then
State = 2
Gosub Lcd_date
Elseif State = 2 Then
State = 0
End If
Return
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lcd_date:
Cls
Home
Lcd " Setting date"
Wait 1
Do
Locate 2 , 5
Lcd _year ; "/" ; _month ; "/" ; _day ; " "
If Pina.1 = 0 Then
Incr _day
If _day > 31 Then
_day = 1
End If
Elseif Pina.2 = 0 Then
Incr _month
If _month > 12 Then
_month = 1
End If
Elseif Pina.3 = 0 Then
Incr _year
If _year > 50 Then
_year = 9
End If
Elseif Pina.0 = 0 Then
Gosub Setdate
Cls
Lcd " SAVE ok"
Wait 1
Exit Do
End If
Waitms 350
Loop
Return
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lcd_time:
Cls
Home
Lcd " Setting time"
Wait 1
Do
Locate 2 , 5
Lcd _hour ; ":" ; _min ; ":" ; _sec ; " "
If Pina.1 = 0 Then
Incr _hour
If _hour > 23 Then
_hour = 0
End If
Elseif Pina.2 = 0 Then
Incr _min
If _min > 59 Then
_min = 0
End If
Elseif Pina.3 = 0 Then
Incr _sec
If _sec > 59 Then
_sec = 0
End If
Elseif Pina.0 = 0 Then
Gosub Settime
Cls
Lcd " SAVE ok"
Wait 1
Exit Do
End If
Waitms 350
Loop
Return
دیدگاه
-
پاسخ : یه مشکل با ال سی دی ساعت
سلام دوست عزیز
بی احترامی نباشه
اما وقتی دوستمون اقای کیانی عرض می کنند که با یه برنامه ساده LCD رو امتحان کنید منظورشون مطمئن شدن ار سالم بودن و درستی اتصالات LCD و
اگر درست نباشه وقت شما رو بیشتر میگیره . من هم همین نظر رو دارم شما باید قدم به قدم مشکلتون رو حل کنید .
باز هم ببخشیددر میان مردم پی دستی هستم پی گرمای نگاهی حتی در پس این همه چشم سردی غربت انسان پیداست
در پس، این همه نور این همه رنگ چه کسی میبیند اشک آن کودک را چشم آن مردی را
که شبانگاه، سر افکنده ز شرم و به یاد طفل اش بی صدا میگرید، می شکند
آری این شهر من است این همان شهر شما است در پی چشمی باش که نگاه اش آبی است و پر از نم نم باران بهار
دیدگاه
-
پاسخ : یه مشکل با ال سی دی ساعت
دوست عزیز مشکل رو پیدا کردم
در قسمت پیکر بندی ال سی دی (خط هفتم برنامه) برنامه رو اینجوری عوض کن
Rs = Pinc.5 , E = Pinc.4پروردگارا: به من زیستنی عطا کن که در لحظه مرگ بر بی ثمری لحظه ای که برای زیستن گذشته است حسرت نخورم، و مردنی عطا کن که بر بیهودگیش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست میداری
دیدگاه
-
پاسخ : یه مشکل با ال سی دی ساعت
کرسیتال که کریستال ساعته (32.768 کیلو هرتز)
چشم فایل پروتئوس رو هم میل یکنمپروردگارا: به من زیستنی عطا کن که در لحظه مرگ بر بی ثمری لحظه ای که برای زیستن گذشته است حسرت نخورم، و مردنی عطا کن که بر بیهودگیش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست میداری
دیدگاه
-
پاسخ : یه مشکل با ال سی دی ساعت
امروز بعد از کلی سر و کله زدن با مدار بازم نتونستم جواب بگیرم یه برنامه ساده نوشتم که یک led رو در پایه ی یک روشن کنه که بازم نشد با مولتی مترم تست کردم اصلا میکرو خروجی نداد میکرو رو عوض کردم بازم جواب نداد ال سی دی رو عوض کردم بازم جواب نداد تمامی اتصالات رو روی برد برد چک کردم بازم جواب نداد پورت خروجی رو تو برنامه اصلی عوض کرم بازم جواب نداد دیگه فکرم به جایی قد نمیده !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! :angry: :angry: :angry: :angry:
دیدگاه
دیدگاه