Guest User

Untitled

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