Advertisement
Guest User

Untitled

a guest
Jan 13th, 2017
530
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '******************************************************************************************
  2. '!!!!!Nie kasować!!!!!
  3.  
  4.  
  5. 'Autor orginału: Pier
  6. 'Modyfikacja do wersji z datą i temperaturą: Duch__
  7. 'email: duszkowski@o2.pl
  8. 'http://www.elektroda.pl/rtvforum/viewtopic.php?p=8135591#8135591
  9.  
  10. 'Program zawiera w obecnej wersji obsługę 1x DS18b20, docelowo mają to być 2 czujniki.
  11.  
  12. 'Fusebity:
  13. 'Internal RC 8MHz
  14.  
  15.  
  16. '!!!!!Nie kasować!!!!!
  17. '******************************************************************************************
  18.  
  19.  
  20.  
  21. '----Zegar VFD_IW-18----.'
  22.  
  23. 'opis podłączenia wyswietlacza VFD
  24. 'seg A - portd.0
  25. 'seg B - portd.1
  26. 'seg C - portd.2
  27. 'seg D - portd.3
  28. 'seg E - portd.4
  29. 'seg F - portd.5
  30. 'seg G - portd.6
  31. 'seg DP - portd.7
  32.  
  33. 'Siatki
  34. 'portb.0 - S8
  35. 'portb.1 - S9
  36. 'portb.2 - S7
  37. 'portb.3 - S6
  38. 'portb.4 - S5
  39. 'portb.5 - S4
  40. 'portb.6 - S3
  41. 'portb.7 - S2
  42.  
  43.  
  44.  
  45. $regfile = "M8def.dat"
  46. $crystal = 8000000
  47.  
  48. $lib "mcsbyte.lbx"                                          ' for smaller code
  49. $lib "ds1307clock.lib"                                      ' modified lib
  50.  
  51.  
  52. Dim I1 As Integer , Ss As String * 6
  53.  
  54. Dim Dsid1(8) As Byte
  55.  
  56. Config 1wire = Portc.0
  57. Dim Tempjednosci As Long
  58. Dim Tempdziesiatki As Long
  59. Dim Tempsetki As Long
  60. Dim Temptysiac As Long
  61. Dim Ktorywysw As Byte
  62. Dim Sekundy As Byte
  63. Dim Minuty As Byte
  64. Dim Godziny As Byte
  65. Dim Sekundyjed As Byte
  66. Dim Sekundydzies As Byte
  67. Dim Minutyjed As Byte
  68. Dim Minutydzies As Byte
  69. Dim Godzinyjed As Byte
  70. Dim Godzinydzies As Byte
  71. Dim Sekundy1 As Byte
  72. Dim Minuty1 As Byte
  73. Dim Godziny1 As Byte
  74. Dim Weekday As Byte
  75. Dim Dzien As Byte
  76. Dim Miesiac As Byte
  77. Dim Rok As Byte
  78. Dim Dzienjed As Byte
  79. Dim Dziendzies As Byte
  80. Dim Miesiacjed As Byte
  81. Dim Miesiacdzies As Byte
  82. Dim Rokjed As Byte
  83. Dim Rokdzies As Byte
  84. Dim Rok1 As Byte
  85. Dim Miesiac1 As Byte
  86. Dim Dzien1 As Byte
  87. Dim Czarny_ekran As Byte
  88. Dim Czekaj As Word
  89. Dim Ktory_ekran As Byte
  90. Dim Led As Byte
  91. Dim Ekran As Word
  92. Dim Czas_data_temp As Byte
  93. Dim Licz_ms As Byte
  94. Dim Ds As Byte
  95. Dim Ktora_instrukcja_ds As Word
  96. Declare Sub Getdatetime
  97. Declare Sub Settime
  98. Declare Sub Licz_moduly
  99. Declare Sub Migaj_dioda
  100. Declare Sub Licz_ekran
  101. Declare Sub Ds_read_1
  102. Declare Sub Ds_read_2
  103. Declare Sub Ds_read_3
  104. Declare Sub Disable_interrupts
  105. Declare Sub Enable_interrupts
  106. Config Debounce = 10
  107.  
  108. Config Sda = Portc.4
  109. Config Scl = Portc.5
  110.  
  111. 'address of ds1307
  112. Const Ds1307w = &HD0                                        ' Addresses of Ds1307 clock
  113. Const Ds1307r = &HD1
  114. Config I2cdelay = 100
  115. Config Pinc.3 = 0 : Portc.3 = 1
  116. Config Pinc.2 = 0 : Portc.2 = 1
  117. Config Portd = 255 : Portd = 11111111 : Config Portb = &B11111111 : Portb = &B11111111
  118. Call Disable_interrupts
  119. Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
  120. Call Enable_interrupts
  121.  
  122. S1 Alias Pinc.2
  123. S2 Alias Pinc.3
  124.  
  125. Czas_data_temp = 0
  126. Config Timer0 = Timer , Prescale = 8
  127. Call Enable_interrupts
  128. Enable Timer0
  129. Load Timer0 = 255
  130. On Timer0 Multipleksuj
  131. Poczatek:
  132.  
  133. '*******************************Program Główny**********************************
  134.  
  135. Do
  136. Gosub Licz_ekran
  137. Call Getdatetime
  138. Gosub Licz_moduly
  139. Debounce S1 , 0 , Ustaw_godz
  140.  
  141. Loop
  142. End
  143. '******************************Ustawianie godzin********************************
  144. Ustaw_godz:
  145. Do
  146. Czas_data_temp = 0
  147. Gosub Licz_moduly
  148. Debounce S1 , 0 , Incrgodz
  149. Debounce S2 , 0 , Zatwierdz_godz
  150. Loop
  151.  
  152. Incrgodz:
  153. Incr Godziny : If Godziny > 23 Then Godziny = 0             'Wzwiększa wartość godzin
  154. Godziny1 = Godziny
  155. Minuty1 = Minuty
  156. Call Settime
  157. Goto Ustaw_godz
  158.  
  159. Zatwierdz_godz:
  160. Goto Ustaw_min
  161.  
  162. '******************************Ustawianie minut*********************************
  163. Ustaw_min:
  164. Do
  165. Czas_data_temp = 0
  166. Gosub Licz_moduly
  167. Debounce S1 , 0 , Incrmin
  168. Debounce S2 , 0 , Zatwierdz_min
  169. Loop
  170.  
  171. Incrmin:
  172. Incr Minuty : If Minuty > 59 Then Minuty = 0                'Wzwiększa wartość godzin
  173. Godziny1 = Godziny
  174. Minuty1 = Minuty
  175. Call Settime
  176. Goto Ustaw_min
  177.  
  178. Zatwierdz_min:
  179. Goto Ustaw_dni
  180. '******************************Ustawianie dni*********************************
  181. Ustaw_dni:
  182. Do
  183. If Dzien < 1 Then Dzien = 1
  184. Czas_data_temp = 1
  185. Gosub Licz_moduly
  186. Debounce S1 , 0 , Incrdni
  187. Debounce S2 , 0 , Zatwierdz_dni
  188. Loop
  189.  
  190. Incrdni:
  191. Incr Dzien : If Dzien > 31 Then Dzien = 1                   'Wzwiększa wartość godzin
  192. Godziny1 = Godziny
  193. Minuty1 = Minuty
  194. Dzien1 = Dzien
  195. Miesiac1 = Miesiac
  196. Rok1 = Rok
  197. Call Settime
  198. Goto Ustaw_dni
  199.  
  200. Zatwierdz_dni:
  201. Goto Ustaw_miesiac
  202. '******************************Ustawianie miesiac*********************************
  203. Ustaw_miesiac:
  204. Do
  205. If Miesiac < 1 Then Miesiac = 1
  206. Czas_data_temp = 1
  207. Gosub Licz_moduly
  208. Debounce S1 , 0 , Incrmiesiac
  209. Debounce S2 , 0 , Zatwierdz_miesiac
  210. Loop
  211.  
  212. Incrmiesiac:
  213. Incr Miesiac : If Miesiac > 12 Then Miesiac = 1             'Wzwiększa wartość godzin
  214. Godziny1 = Godziny
  215. Minuty1 = Minuty
  216. Dzien1 = Dzien
  217. Miesiac1 = Miesiac
  218. Rok1 = Rok
  219. Call Settime
  220. Goto Ustaw_miesiac
  221.  
  222. Zatwierdz_miesiac:
  223. Goto Ustaw_rok
  224. '******************************Ustawianie rok*********************************
  225. Ustaw_rok:
  226. Do
  227. If Rok < 10 Then Rok = 10
  228. Czas_data_temp = 1
  229. Gosub Licz_moduly
  230. Debounce S1 , 0 , Incrrok
  231. Debounce S2 , 0 , Zatwierdz_rok
  232. Loop
  233.  
  234. Incrrok:
  235. Incr Rok : If Rok > 20 Then Rok = 10                        'Wzwiększa wartość godzin
  236. Godziny1 = Godziny
  237. Minuty1 = Minuty
  238. Dzien1 = Dzien
  239. Miesiac1 = Miesiac
  240. Rok1 = Rok
  241. Call Settime
  242. Goto Ustaw_rok
  243. '******************************Obsługa DS18b20**********************************
  244. Zatwierdz_rok:
  245. Goto Poczatek
  246.  
  247. Sub Ds_read_1
  248.          Call Disable_interrupts
  249.          1wreset
  250.          1wwrite &HCC
  251.          1wwrite &H44
  252.          Call Enable_interrupts
  253.  
  254. End Sub
  255.  
  256. Sub Ds_read_2
  257.          Call Disable_interrupts
  258.          1wreset
  259.          1wwrite &H55
  260.          1wverify Dsid1(1)
  261.          Call Enable_interrupts
  262. End Sub
  263.  
  264. Sub Ds_read_3
  265.          Call Disable_interrupts
  266.          1wwrite &HBE
  267.          I1 = 1wread(2)
  268.          I1 = I1 * 10
  269.          I1 = I1 / 16
  270.  
  271.          Tempjednosci = I1 Mod 10
  272.          Tempdziesiatki = I1 / 10
  273.          Tempdziesiatki = Tempdziesiatki Mod 10
  274.          Tempsetki = I1 / 100
  275.          Tempsetki = Tempsetki Mod 10
  276.          Temptysiac = I1 / 1000
  277.          Temptysiac = Temptysiac Mod 10
  278.          If I1 < 0 Then
  279.             Tempjednosci = Tempjednosci * -1
  280.             Tempdziesiatki = Tempdziesiatki * -1
  281.             Tempsetki = Tempsetki * -1
  282.             Temptysiac = Temptysiac * -1
  283.          End If
  284.          Call Enable_interrupts
  285. End Sub
  286.  
  287. 'Obliczanie modułów każdej z liczb które mają zostać zaprezentowane na wyświetlaczu
  288. Sub Licz_moduly
  289. Sekundyjed = Sekundy Mod 10
  290. Sekundydzies = Sekundy / 10
  291. Minutyjed = Minuty Mod 10
  292. Minutydzies = Minuty / 10
  293. Godzinyjed = Godziny Mod 10
  294. Godzinydzies = Godziny / 10
  295. Rokjed = Rok Mod 10
  296. Rokdzies = Rok / 10
  297. Miesiacjed = Miesiac Mod 10
  298. Miesiacdzies = Miesiac / 10
  299. Dzienjed = Dzien Mod 10
  300. Dziendzies = Dzien / 10
  301. End Sub
  302.  
  303. Sub Disable_interrupts
  304.     Disable Interrupts
  305. End Sub
  306.  
  307.  
  308. Sub Enable_interrupts
  309.     Enable Interrupts
  310. End Sub
  311.  
  312. Sub Licz_ekran
  313. Ekran = 0
  314. If Ekran = 255 Then
  315.    Ekran = 0
  316. Incr Ktory_ekran
  317. End If
  318.  
  319. If Ktory_ekran = 6 Then Ktory_ekran = 0
  320. Select Case Ktory_ekran
  321.       Case 0:
  322.          Call Disable_interrupts
  323.          Portd = &B111111111                                'Zgaszony
  324.          Portb = &B11111111
  325.          Gosub Ds_read_1
  326.          Ktory_ekran = 1
  327.       Case 1:
  328.          Czas_data_temp = 0
  329.       Case 2:
  330.          Call Disable_interrupts
  331.          Portd = &B111111111                                'Zgaszony
  332.          Portb = &B11111111
  333.          Gosub Ds_read_2
  334.          Ktory_ekran = 3
  335.       Case 3:
  336.          Czas_data_temp = 1
  337.       Case 4:
  338.          Call Disable_interrupts
  339.          Portd = &B111111111                                'Zgaszony
  340.          Portb = &B11111111
  341.          Gosub Ds_read_3
  342.          Ktory_ekran = 5
  343.       Case 5:
  344.          Czas_data_temp = 2
  345.  
  346.    End Select
  347.  
  348. End Sub
  349.  
  350. 'called from ds1307clock.lib
  351. Getdatetime:
  352.   I2cstart                                                  ' Generate start code
  353.   I2cwbyte Ds1307w                                          ' send address
  354.   I2cwbyte 0                                                ' start address in 1307
  355.   I2cstart                                                  ' Generate start code
  356.   I2cwbyte Ds1307r                                          ' send address
  357.   I2crbyte Sekundy , Ack
  358.   I2crbyte Minuty , Ack                                     ' MINUTES
  359.   I2crbyte Godziny , Ack                                    ' Hours
  360.   I2crbyte Weekday , Ack                                    ' Day of Week
  361.   I2crbyte Dzien , Ack                                      ' Day of Month
  362.   I2crbyte Miesiac , Ack                                    ' Month of Year
  363.   I2crbyte Rok , Nack
  364.   I2cstop
  365. Sekundy = Makedec(sekundy)
  366. Minuty = Makedec(minuty)
  367. Godziny = Makedec(godziny)
  368. Dzien = Makedec(dzien)
  369. Miesiac = Makedec(miesiac)
  370. Rok = Makedec(rok)
  371. Return
  372.  
  373. Settime:
  374.    Godziny1 = Makebcd(godziny1)
  375.    Minuty1 = Makebcd(minuty1)
  376.    Dzien1 = Makebcd(dzien1)
  377.    Miesiac1 = Makebcd(miesiac1)
  378.    Rok1 = Makebcd(rok1)
  379.    Weekday = Makebcd(weekday)
  380.   I2cstart                                                  ' Generate start code
  381.   I2cwbyte Ds1307w                                          ' send address
  382.   I2cwbyte 0                                                ' starting address in 1307
  383.   I2cwbyte 0                                                ' Send Data to SECONDS
  384.   I2cwbyte Minuty1                                          ' MINUTES
  385.   I2cwbyte Godziny1                                         ' Hours
  386.   I2cwbyte Weekday
  387.   I2cwbyte Dzien1
  388.   I2cwbyte Miesiac1
  389.   I2cwbyte Rok1
  390.   I2cstop
  391. Return
  392.  
  393.  
  394. Multipleksuj:
  395. Load Timer0 = 100
  396. Incr Licz_ms
  397.  
  398. If Czas_data_temp = 0 Then
  399. Portd = &B111111111
  400.    Incr Ktorywysw
  401.    If Ktorywysw = 8 Then
  402.       Ktorywysw = 0
  403.    End If
  404.  
  405.    Select Case Ktorywysw
  406.       Case 0:
  407.    Portd = Lookup(sekundyjed , Tabela)
  408.    Portb = &B11111101
  409.       Case 1:
  410.    Portd = Lookup(sekundydzies , Tabela)
  411.    Portb = &B11111110
  412.       Case 2:
  413.       If Sekundyjed = 0 Or Sekundyjed = 2 Or Sekundyjed = 4 Or Sekundyjed = 6 Or Sekundyjed = 8 Then
  414.       Portd = &B110111111                                   'Kreski
  415.       Portb = &B11111011
  416.       Else
  417.       Portd = &B111111111                                   'Zgaszony
  418.       End If
  419.       Case 3:
  420.    Portd = Lookup(minutyjed , Tabela)
  421.    Portb = &B11110111
  422.       Case 4:
  423.    Portd = Lookup(minutydzies , Tabela)
  424.    Portb = &B11101111
  425.       Case 5:
  426.          If Sekundyjed = 0 Or Sekundyjed = 2 Or Sekundyjed = 4 Or Sekundyjed = 6 Or Sekundyjed = 8 Then
  427.       Portd = &B110111111                                   'Kreski
  428.       Portb = &B11011111
  429.       Else
  430.       Portd = &B111111111                                   'Zgaszony
  431.       End If
  432.       Case 6:
  433.    Portd = Lookup(godzinyjed , Tabela)
  434.    Portb = &B10111111
  435.       Case 7:
  436.       If Godzinydzies = 0 Then
  437.          Portd = &B11111111
  438.  
  439.          Else
  440.          Portd = Lookup(godzinydzies , Tabela)
  441.          Portb = &B01111111
  442.       End If
  443.    End Select
  444.  
  445. End If
  446.  
  447. If Czas_data_temp = 1 Then
  448. Portd = &B111111111
  449. Incr Ktorywysw
  450. If Ktorywysw = 8 Then Ktorywysw = 0
  451. Select Case Ktorywysw
  452.    Case 0:
  453.       Portd = Lookup(rokjed , Tabela)
  454.       Portb = &B11111110
  455.    Case 1:
  456.       Portd = Lookup(rokdzies , Tabela)
  457.       Portb = &B11111011
  458.    Case 2:
  459.       Portd = &B101111111
  460.       Portb = &B11110111
  461.    Case 3:
  462.       Portd = Lookup(miesiacjed , Tabela)
  463.       Portb = &B11110111
  464.    Case 4:
  465.       Portd = Lookup(miesiacdzies , Tabela)
  466.       Portb = &B11101111
  467.    Case 5:
  468.       Portd = &B101111111
  469.       Portb = &B11011111
  470.    Case 6:
  471.       Portd = Lookup(dzienjed , Tabela)
  472.       Portb = &B11011111
  473.    Case 7:
  474.       Portd = Lookup(dziendzies , Tabela)
  475.       Portb = &B10111111
  476.    End Select
  477. End If
  478.  
  479. If Czas_data_temp = 2 Then
  480. Portd = &B111111111
  481. Incr Ktorywysw
  482. If Ktorywysw = 8 Then Ktorywysw = 0
  483. Select Case Ktorywysw
  484.  
  485.     Case 0:
  486.  
  487.       Portd = &B11000110                                    'Znak C
  488.       Portb = &B11111110
  489.    Case 1:
  490.       Portd = &B10011100                                    'Znak stopnia
  491.       Portb = &B11111011
  492.    Case 2:
  493.       Portd = Lookup(tempjednosci , Tabela)
  494.       Portb = &B11110111
  495.    Case 3:
  496.       Portd = &B101111111                                   'Przecinek
  497.       Portb = &B11101111
  498.    Case 4:
  499.       Portd = Lookup(tempdziesiatki , Tabela)
  500.       Portb = &B11101111
  501.    Case 5:
  502.       If I1 >= 100 Then
  503.       Portd = Lookup(tempsetki , Tabela)
  504.       Portb = &B11011111
  505.       End If
  506.  
  507.       If I1 < 100 And I1 >= 0 Then
  508.       Portd = &B11111111
  509.       End If
  510.  
  511.       If I1 > -100 And I1 < 0 Then
  512.       Portd = &B110111111                                   'Kreski
  513.       Portb = &B11011111
  514.  
  515.       End If
  516.  
  517.    Case 6:
  518.       If I1 >= 1000 Then
  519.       Portd = Lookup(temptysiac , Tabela)
  520.       Portb = &B10111111
  521.       Else
  522.       Portd = &B11111111
  523.       End If
  524.  
  525.       If I1 >= -550 And I1 =< -100 Then
  526.       Portd = Lookup(tempsetki , Tabela)
  527.       Portb = &B11011111
  528.       End If
  529.  
  530.     Case 7:
  531.     If I1 >= -550 And I1 =< -100 Then
  532.       Portd = &B110111111                                   'Kreski
  533.       Portb = &B10111111
  534.       End If
  535.  
  536.    End Select
  537. End If
  538. Return
  539.  
  540. Tabela:
  541. Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement