سلام
پروژه ام تایمر با بسکامه به این صورت که سه تا رله داشته باشیم
و واسه هر رله بشه سه تا زمان روشن خاموش تنظیم کرد
من یه برنامه دارم که ساعته با ای سی DS1307 اما نمیدونم واسه تایمرا چطور منو بسازم
اونم اینطور باشه که مثلا اگر دکمه منو رو زدیم ال سی دی بنویسه شماره تایمرو وارد کنید و ما با 2 دکمه UP و DOWN از 1 تا 9 تایمرو انتخاب کنیم و بعد مثلا دکمه OK رو بزنیم و وارد تنظیماته اون تایمر بشیم و زمان شروع و پایانه وصل بودنشو تنظیم کنیم
تایمرها 9 تا برای 3 تا رله.یعنی هرکدوم 3 تا
دوستان اگه میتونید تورو خدا کمک کنید زیاد وقت ندارم
مررررررررررسی پیشاپیش
اینم برنامه ایه که من دارم
کد:
'Download from WWW.PICPARS.COM
$regfile = "m8def.dat"
$crystal = 1000000
'------------------------ lcd -----------------------------------------------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Pind.0 , E = Pind.1 , Db4 = Pind.2 , Db5 = Pind.3 , Db6 = Pind.4 , Db7 = Pind.5
Cls
'--------------------------- ds 1307 -----------------------------------------
$lib "ds1307clock.lib"
'configure the scl and sda pins
Config Sda = Portd.7
Config Scl = Portd.6
'address of ds1307
Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
Const Ds1307r = &HD1
'------------------------------ key --------------------------------------------
Config Pinc.1 = Input
Key_menu Alias Pinc.1
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
'------------------------------------------------------------------------------
Config Debounce = 30
Dim A As Byte , B As Byte , Data1 As Byte , C As Byte
Dim Seco As Byte , Mine As Byte , Hour As Byte
Dim S As Byte
'----------------------------------------------------------------------------
Cursor Off
Cls
'-------------------------------------------------------------------------------
Main:
Do
Gosub Ds1307
Gosub Disply_24
Gosub Chekkey
'For Conter1 = 1 To 40000
If Pinc.1 = 0 Then
Waitms 100
If Key_menu = 0 Then
Cls
Locate 1 , 1
Lcd " MENU "
Wait 1
Cls
Gosub Menu
End If
Waitus 10
End If
'Next
Loop
'-------------------------------------------------------------------------------
Ds1307:
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' start address in 1307
I2cstart ' Generate start code
I2cwbyte Ds1307r ' send address
I2crbyte Seco , Ack 'sec
I2crbyte Mine , Ack ' MINUTES
I2crbyte Hour , Nack ' Hours
I2cstop
Seco = Makedec(seco) : Mine = Makedec(mine) : Hour = Makedec(hour)
If Seco > 59 Then Seco = 0
If Mine > 59 Then Mine = 0
If Hour > 23 Then
Hour = 0
End If
Return
'-------------------------------------------------------------------------------
Disply_24:
Locate 1 , 1
Lcd "Time = " ; Hour ; ":" ; Mine ; ":" ; Seco ; " "
Return
'-------------------------------------------------------------------------------
Chekkey:
Debounce Pinc.2 , 0 , Minute , Sub
Debounce Pinc.3 , 0 , Hours , Sub
Debounce Pinc.4 , 0 , Menu , Sub
Return
'---------------------------------------------
'-------------------------------------
Minute:
Incr Mine
If Mine > 59 Then Mine = 0
Mine = Makebcd(mine)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 1 ' starting address in 1307
I2cwbyte Mine
I2cstop
Return
'-------------------------------------
Hours:
Incr Hour
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
Return
'-------------------------------------
Menu:
Locate 1 , 1
Lcd "INT TIMER NUM"
Locate 2 , 1
Lcd "NUMBER =" ; S ;
S = 0
If Pinc.4 = 0 Then Incr S
S = S + 1
If S > 9 Then S = 0
Wait 4
If S = 0 Then Cls
Return