متوجه شدم .
پس حداقل مدار و بسكام رو نگاه كنيد و بگيد من اول بسازم بعد كم كم برنامه نويسي كنم يا فقط شبيه سازي كنم و ...
مسيري كه من بايد برم چيه اينطور كه شما ميگيد بايد بسكام خوبي بلد باشم درسته؟
من دقيقا بايد چكار كنم
مدار آماده هست بسكامشم دارم خوب كمي تغييرات ميخواد تا هم ساعت رو نمايش بده هم دما رو....چكار كنم
اين شماتيكشه
اين هم فايل بسكامش
کد:
$regfile = "m8def.dat"
$crystal = 1000000
Config Timer1 = Timer , Prescale = 8
Enable Interrupts
Enable Timer1
On Timer1 Ss
'--------------------------- 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
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Portc.5 = Output
Config Portd = Output
Config Portb = Output
Dp Alias Portc.5
Comm Alias Portd
Dataport Alias Portb
'------------------------------------------------------------------------------
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 , Hm As Byte , S As Bit
'------------------------------------------------------------------------------
Cursor Off
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
Gosub Seco
'-----------------------------
'-------------------------------------------------------------------------------
Main:
Do
Gosub Ds1307
Gosub 24_12
Gosub Chekkey
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
Gosub Seco
End If
Return
'-------------------------------------------------------------------------------
24_12:
If Pinc.4 = 1 Then Gosub Disply_24
If Pinc.4 = 0 Then Gosub Disply_12
Return
'-------------------------------------------------------------------------------
Disply_24:
Comm = &B1110 : Dp = 0 : Hm = Hour / 10 : Gosub 7seg
Comm = &B1101 : Dp = S : Hm = Hour Mod 10 : Gosub 7seg
Comm = &B1011 : Dp = 0 : Hm = Mine / 10 : Gosub 7seg
Comm = &B0111 : Dp = 0 : Hm = Mine Mod 10 : Gosub 7seg
Return
7seg:
Dataport = Lookup(hm , Dat)
Waitms 10
Return
'-------------------------------------------------------------------------------
Disply_12:
If Hour = 0 Then Hour = 12
If Hour > 12 Then Hour = Hour - 12
Comm = &B1110 : Dp = 0 : Hm = Hour / 10 : Gosub 7seg
Comm = &B1101 : Dp = S : Hm = Hour Mod 10 : Gosub 7seg
Comm = &B1011 : Dp = 0 : Hm = Mine / 10 : Gosub 7seg
Comm = &B0111 : Dp = 0 : Hm = Mine Mod 10 : Gosub 7seg
Return
'-------------------------------------------------------------------------------
Chekkey:
Debounce Pinc.1 , 0 , Seco , Sub
Debounce Pinc.2 , 0 , Mine , Sub
Debounce Pinc.3 , 0 , Hour , Sub
Return
'---------------------------------------------
Seco:
Incr Seco
If Seco > 59 Then Seco = 0
Seco = Makebcd(seco)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' starting address in 1307
I2cwbyte Seco
I2cstop
Return
'-------------------------------------
Mine:
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
'-------------------------------------
Hour:
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
'-------------------------------------
Dat:
Data &B00111111 , &B00000110 , &B01011011 , &B01001111
Data &B01100110 , &B01101101 , &B01111101 , &B00000111
Data &B01111111 , &B01101111
Ss:
Toggle S
Return