Advertisement
Guest User

zegar

a guest
Feb 23rd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. ;************************************************
  2. ;LEKCJA 6 - WYŚWIETLACZ 7-SEGMENTOWY
  3. ;PRZYKŁAD 3 - PRZEGLĄDANIE WYŚWIETLACZA
  4. ;************************************************
  5.  
  6. B2R7 EQU 23
  7.  
  8. SEG_ON EQU P1.6 ;włączenie wyświetlacza 7-segm.
  9. KEY EQU P3.5
  10.  
  11. ;Stałe używane w programie
  12. ONE EQU 006H ;kod cyfry 1
  13. TWO EQU 05BH ;kod cyfry 2
  14. THREE EQU 04FH ;kod cyfry 3
  15. FOUR EQU 066H ;kod cyfry 4
  16. FIVE EQU 06DH ;kod cyfry 5
  17. SIX EQU 07DH ;kod cyfry 6
  18. SEVEN EQU 007H ;kod cyfry 7
  19.  
  20. ;Pamięć wewnętrzna RAM
  21. DISPLAY EQU 30H
  22. KEY_LAST EQU DISPLAY+6
  23.  
  24. ;**************************************
  25. LJMP START
  26.  
  27. ORG 0BH
  28. LJMP INT_T0
  29.  
  30.  
  31. ORG 100H
  32. START:
  33. MOV TMOD,#1
  34. SETB RS0
  35. MOV R7,#20
  36. CLR RS0
  37. MOV B2R7,#20
  38. MOV TL0,#00H
  39. MOV TH0,#4CH
  40.  
  41. SETB EA
  42. SETB ET0
  43. SETB TR0
  44.  
  45.  
  46. MOV DISPLAY,#0 ;wpisz kody cyfr
  47. MOV DISPLAY+1,#0 ;dla kolejnych
  48. MOV DISPLAY+2,#0 ;wskaźników
  49. MOV DISPLAY+3,#0
  50. MOV DISPLAY+4,#0
  51. MOV DISPLAY+5,#0
  52. MOV DISPLAY+6,#SEVEN
  53.  
  54.  
  55. MOV R4,#142
  56. MOV SP,#DISPLAY+6
  57. LOOP_DISP: ;ustawienie danych do
  58. ;wyświetlania na 1-szym
  59. ;wskaźniku
  60. MOV R0,#DISPLAY ;adres pobierania kodów
  61. MOV R2,#6 ;licznik-il. wskaźników
  62. MOV R3,#00000001B ;wybór wskaźnika
  63. ;-kod 1 z 8
  64.  
  65. LOOP:
  66. SETB SEG_ON ;wyłącz poprzedni
  67. ;wskaźnik
  68.  
  69. MOV R1,#CSDS ;adres wyboru wskaźnika
  70. MOV A,R3 ;aktualny wskaźnik (1z8)
  71. MOVX @R1,A ;wpisz nr wskaźnika
  72.  
  73. ;RL A ;obrót w lewo - numer
  74. ;MOV R3,A ;następnego wskaźnika
  75. ;(kod 1 z 8)
  76.  
  77. MOV R1,#CSDB ;adres danych wskaźnika
  78. MOV A,@R0 ;kod aktualnego wskaźnika
  79.  
  80. LCALL GET_COD7
  81.  
  82. CJNE R3, #00000100B,OMIN
  83. SETB ACC.7
  84.  
  85. OMIN:
  86. CJNE R3, #00010000B,OMIN1
  87. SETB ACC.7
  88.  
  89. OMIN1:
  90.  
  91.  
  92. MOVX @R1,A ;wpisz kod segmentów
  93.  
  94. ;INC R0 ;adres pobierania kodu
  95. ;dla następnego wskaźnika
  96.  
  97. CLR SEG_ON ;włączenie wskaźnika
  98.  
  99. MOV C,KEY ;wstępny odczyt klawisza
  100. MOV A,#1 ;odczekanie 1ms-świecenie
  101. LCALL DELAY_MS ;jednego wskaźnika
  102.  
  103. JC KEY_ON ;kontrola jednoznaczności
  104. JB KEY,KEY_END ;odczytu klawisza
  105.  
  106. KEY_OFF:
  107. MOV A,R3 ;klawisz zwolniony
  108. CPL A
  109. ANL KEY_LAST,A ;zeruj odpowiedni bit
  110. SJMP KEY_END
  111.  
  112. KEY_ON:
  113. JNB KEY,KEY_END
  114. MOV A,R3 ;klawisz naciśnięty
  115. ANL A,KEY_LAST
  116. JNZ KEY_END ;klawisz był naciśnięty
  117. ;bez reakcji
  118.  
  119. MOV A,R3 ;klawisz był zwolniony
  120. ORL KEY_LAST,A ;ustaw odpowiedni bit
  121. INC @R0 ;zwiększ licznik
  122. ;naciśnięć - liczbę na
  123. ;odpowiednim wskaźniku
  124. KEY_END:
  125. MOV A,R3
  126. RL A ;numeru następnego
  127. MOV R3,A ;wskaźnika (kod 1 z 8)
  128. INC R0 ;adres danych następnego
  129. ;wskaźnika
  130.  
  131. DJNZ R2,LOOP ;kolejne świecenie
  132. ;siedmiu wskaźników
  133.  
  134. DJNZ R4,LOOP_DISP
  135. MOV R4,142
  136. CPL P1.7
  137.  
  138.  
  139. SJMP LOOP_DISP ;zacznij od wskaźnika 1
  140.  
  141. INT_T0:
  142. SETB RS0
  143. ORL TL0,#00H
  144. MOV TH0,#4CH
  145. DJNZ R7,EXIT
  146. MOV R7,#20
  147.  
  148. CPL P1.7
  149.  
  150. MOV R0,#DISPLAY ;jednostki sekund
  151. INC @R0
  152. CJNE @R0,#10,EXIT
  153. MOV @R0,#0
  154.  
  155. INC R0 ;dziesiątki sekund
  156. INC @R0
  157. CJNE @R0,#6,EXIT
  158. MOV @R0,#0
  159.  
  160. INC R0 ;jednostki minut
  161. INC @R0
  162. CJNE @R0,#10,EXIT
  163. MOV @R0,#0
  164.  
  165. INC R0 ;dziesiątki minut
  166. INC @R0
  167. CJNE @R0,#6,EXIT
  168. MOV @R0,#0
  169.  
  170. ;---------------------------------------------
  171. INC R0
  172. INC @R0 ;zliczanie jednostek godzin
  173. CJNE @R0,#4,DALEJ ;W DISPLAY+4
  174. MOV R5,DISPLAY+5
  175. CJNE R5,#2,DALEJ
  176. SJMP GODZ_00
  177.  
  178. DALEJ:
  179. CJNE @R0,#10,EXIT
  180. MOV @R0,#0
  181. ;---------------------------------------------
  182. INC R0
  183. INC @R0 ;zliczanie dziesiatek godzin
  184. ;CJNE @R0,#3,EXIT ;W DISPLAY+5
  185. SJMP EXIT
  186.  
  187. GODZ_00:
  188. CLR A ;nadejscie godziny 00.00.00
  189. MOV DISPLAY,A
  190. MOV DISPLAY+1,A
  191. MOV DISPLAY+2,A
  192. MOV DISPLAY+3,A
  193. MOV DISPLAY+4,A
  194. MOV DISPLAY+5,A
  195. ;---------------------------------------------
  196.  
  197.  
  198. EXIT:
  199.  
  200. CLR RS0
  201. RETI
  202.  
  203. ;**************************************
  204. ;Podprogram zamienia cyfrę na kod 7-segmentowy
  205. GET_COD7:
  206. ANL A,#0FH ;tabela kodów 0..15
  207. INC A ;pomiń rozkaz RET
  208. MOVC A,@A+PC ;pobierz kod
  209. RET
  210.  
  211. COD_7SEG:
  212. DB 03FH ;kod znaku 0
  213. DB 006H ;kod znaku 1
  214. DB 05BH ;kod znaku 2
  215. DB 04FH ;kod znaku 3
  216. DB 066H ;kod znaku 4
  217. DB 06DH ;kod znaku 5
  218. DB 07DH ;kod znaku 6
  219. DB 007H ;kod znaku 7
  220. DB 07FH ;kod znaku 8
  221. DB 06FH ;kod znaku 9
  222. ;DB 077H ;kod znaku A
  223. ;DB 07CH ;kod znaku b
  224. ;DB 039H ;kod znaku C
  225. ;DB 05EH ;kod znaku d
  226. ;DB 079H ;kod znaku E
  227. ;DB 071H ;kod znaku F
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement