Advertisement
Guest User

Untitled

a guest
May 13th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. LJMP START
  2.  
  3. ; LCD registers ----------------------------------
  4.  LCDstatus equ 0FF2EH
  5.  LCDcontrol equ 0FF2CH
  6.  LCDdataWR equ 0FF2DH
  7.  LCDdataRD equ 0FF2FH
  8. // LCD control bytes ----------------------------------
  9. #define HOME 0x80 // put curcor to second line
  10. #define INITDISP 0x38 // LCD init (8-bit mode)
  11. #define HOM2 0xc0 // put curcor to second line
  12. #define LCDON 0x0e // LCD nn, cursor off, blinking off
  13. #define CLEAR 0x01 // LCD display clear
  14.  
  15. ORG 0100H
  16.  
  17. P5 EQU 0F8H
  18. P7 EQU 0DBH
  19.  
  20.  LCDcntrlWR MACRO x
  21.  LOCAL loop
  22.  loop:
  23.   MOV DPTR,#LCDstatus
  24.  MOVX A,@DPTR
  25.  JB ACC.7,loop ; check if LCD busy
  26.  MOV DPTR,#LCDcontrol ; write to LCD control
  27.  MOV A, x
  28.  MOVX @DPTR,A
  29.   ENDM
  30.  
  31.  LCDcharWR MACRO
  32.  LOCAL loop1,loop2
  33.  
  34.  PUSH ACC
  35.  loop1: MOV DPTR,#LCDstatus
  36.  MOVX A,@DPTR
  37.  JB ACC.7,loop1 ; check if LCD busy
  38.  
  39.  loop2: MOV DPTR,#LCDdataWR ; write data to LCD
  40.  POP ACC
  41.  MOVX @DPTR,A
  42.  ENDM
  43.  
  44.  init_LCD MACRO
  45.  LCDcntrlWR #INITDISP
  46.  LCDcntrlWR #CLEAR
  47.  LCDcntrlWR #LCDON
  48.  ENDM
  49.    
  50. START:
  51. : ustawienia w rejestrze DPTR wskaźnika na wartości ascii
  52. MOV DPH, #80H
  53. MOV DPL, #77H
  54. MOV A, #31H
  55. MOVX @DPTR, A ;przy danej wartości DPTR ma wskazywać na liczbe w A
  56. MOV DPH, #80H
  57. MOV DPL, #7BH
  58. MOV A, #32H
  59. MOVX @DPTR, A
  60. MOV DPH, #80H
  61. MOV DPL, #7DH
  62. MOV A, #33H
  63. MOVX @DPTR, A
  64. MOV DPH, #80H
  65. MOV DPL, #7EH
  66. MOV A, #41H
  67. MOVX @DPTR, A
  68. MOV DPH, #80H
  69. MOV DPL, #0B7H
  70. MOV A, #34H
  71. MOVX @DPTR, A
  72. MOV DPH, #80H
  73. MOV DPL, #0BBH
  74. MOV A, #35H
  75. MOVX @DPTR, A
  76. MOV DPH, #80H
  77. MOV DPL, #0BDH
  78. MOV A, #36H
  79. MOVX @DPTR, A
  80. MOV DPH, #80H
  81. MOV DPL, #0BEH
  82. MOV A, #42H
  83. MOVX @DPTR, A
  84. MOV DPH, #80H
  85. MOV DPL, #0D7H
  86. MOV A, #37H
  87. MOVX @DPTR, A
  88. MOV DPH, #80H
  89. MOV DPL, #0DBH
  90. MOV A, #38H
  91. MOVX @DPTR, A
  92. MOV DPH, #80H
  93. MOV DPL, #0DDH
  94. MOV A, #39H
  95. MOVX @DPTR, A
  96. MOV DPH, #80H
  97. MOV DPL, #0DEH
  98. MOV A, #43H
  99. MOVX @DPTR, A
  100. MOV DPH, #80H
  101. MOV DPL, #0E7H
  102. MOV A, #2AH
  103. MOVX @DPTR, A
  104. MOV DPH, #80H
  105. MOV DPL, #0EBH
  106. MOV A, #30H
  107. MOVX @DPTR, A
  108. MOV DPH, #80H
  109. MOV DPL, #0EDH
  110. MOV A, #23H
  111. MOVX @DPTR, A
  112. MOV DPH, #80H
  113. MOV DPL, #0EEH
  114. MOV A, #44H
  115. MOVX @DPTR, A
  116. ;
  117.  
  118. MOV R4, #0
  119. MOV R5, #0
  120.  
  121. PETLA: ;obsluga pierwszego wiersza
  122.     init_LCD
  123.     MOV R0, #7FH ;wysterowania linii portu P5 zerem logicznym aby mieć możliwość potem pobrać bajty z P7
  124.     MOV A, R0
  125.     MOV P5, A ; Wysterowanie lini portu dla pierwszego wiersza
  126.     MOV A, P7 ; odczytanie bitów klawiatury
  127.     ANL A, R0 ; iloczyn logiczny odzielenie bitów klawiatury
  128.     MOV R1, A ; zapisujemy wartość
  129.     CLR C ; czyścimy C aby nam nie odejmowało się w SUBB
  130.     SUBB A, R0 ;sprawdzenie czy jakaś kolumna w wierszu została naciśnięte wtedy w tym miejscu
  131.     ; bit przyjmie wartość 0 i przy odejmowaniu jeśli nie będzie zera będzie oznaczało żę użytkownik coś wcisnął
  132.     JZ NEXT1 ;JEZELI '0' PRZESKAKUJEMY DO KOLEJNEGO BLOKU
  133.     MOV A, R1 ; JEZELI NIE WYSZLO '0' TO PRZYWRACAMY WARTOSC AKUMULATORA
  134.     MOV DPH, #80H ; przenosimy wartości zczytwanych bitów do DPTR
  135.     MOV DPL,A            
  136.     MOVX A,@DPTR ; przenosimy wartość na którą DPTR wskazywał do A
  137.     LCDcharWR ; wyświetlamy na lcd    
  138.     MOV P1, A ;przenosimy A do portu P1 aby wyświetlić binarnie jaką liczbe podaliśmy
  139.     PETLA2:
  140.     JZ PETLA
  141.  
  142. NEXT1: obsłóga drugiego wierszu
  143. MOV R0, #0BFH
  144. MOV A, R0
  145. MOV P5, A
  146. MOV A, P7
  147. ANL A, R0 ;W AKUMULATORZE JEST TO CO WPISALISMY DO R0
  148. MOV R1, A
  149. CLR C
  150. SUBB A, R0
  151. JZ NEXT2 ;JEZELI '0' PRZESKAKUJEMY DO KOLEJNEGO BLOKU
  152. MOV A, R1 ; JEZELI NIE WYSZLO '0' TO PRZYWRACAMY WARTOSC AKUMULATORA
  153. MOV DPH, #80H
  154. MOV DPL,A    
  155. MOVX A,@DPTR
  156. MOV P1, A
  157. LCDcharWR
  158.  
  159. NEXT2: obsluga trzeciego wierszu
  160. MOV R0, #0DFH
  161. MOV A, R0
  162. MOV P5, A
  163. MOV A, P7
  164. ANL A, R0 ;W AKUMULATORZE JEST TO CO WPISALISMY DO R0
  165. MOV R1, A
  166. CLR C
  167. SUBB A, R0
  168. JZ NEXT3 ;JEZELI '0' PRZESKAKUJEMY DO KOLEJNEGO BLOKU
  169. MOV A, R1 ; JEZELI NIE WYSZLO '0' TO PRZYWRACAMY WARTOSC AKUMULATORA
  170. MOV DPH, #80H
  171. MOVX A,@DPTR
  172. MOV P1, A
  173. LCDcharWR
  174.  
  175. NEXT3: obsluga czwartego wierszu
  176. MOV R0, #0EFH
  177. MOV A, R0
  178. MOV P5, A
  179. MOV A, P7
  180. ANL A, R0 ;W AKUMULATORZE JEST TO CO WPISALISMY DO R0
  181. MOV R1, A
  182. CLR C
  183. SUBB A, R0
  184. JZ PETLA ;JEZELI '0' wracamy do pierwszegi wiersza
  185. MOV A, R1 ; JEZELI NIE WYSZLO '0' TO PRZYWRACAMY WARTOSC AKUMULATORA
  186. MOV DPH, #80H
  187. MOV DPL,A
  188. MOVX A,@DPTR
  189. MOV P1, A
  190. LCDcharWR
  191.     JMP START
  192. NOP
  193. NOP
  194. NOP
  195. JMP $
  196. END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement