Advertisement
Guest User

Untitled

a guest
Jun 12th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CMD_WR      EQU     0FF2CH ; Sets CGRAM address
  2. DATA_WR     EQU     0FF2DH ; Sets DDRAM address
  3. READ_STATUS EQU     0FF2EH ; Reads busy flag
  4.  
  5. INIT        EQU     038H    ; Function Set
  6. CLEAR       EQU     001H    ; Clear display
  7. TURN_ON     EQU     06H     ; Display ON Cursor ON Blink OFF
  8.  
  9. COLUMN      EQU     0DBH    ;Kolumna
  10.  
  11. ORG 0
  12.  
  13. START:
  14.     LCALL INIT_LCD
  15.     MOV R3, #0 ; R3=0 – nic nie wcisniete, R3=1 - wcisniete
  16.  
  17.  
  18. START2:
  19.     MOV A, R3
  20.     JZ CLEAR_LCD ;Jeżeli A=0 to nic nie jest wcisniete i czysci wyswietlacz
  21.  
  22.     LCALL odczyt_wiersza
  23.     SJMP START2
  24.  
  25.  
  26. ;----------------------------------------------
  27. ; Odczyt wiersza    A = maska wyboru wiersza
  28. ; Wyjscie CY = 0 - nic nie wcisniete
  29. ;         CY = 1 - A kod klawisza (0..3) 0 - z prawej
  30. ;----------------------------------------------
  31. odczyt_wiersza:
  32.     MOV A, COLUMN
  33.     CPL A
  34.     ANL A, #00001111B
  35.     MOV R0, #4
  36. LOOP:
  37.     JB ACC.3, RESULT
  38.     RL A
  39.     DJNZ R0, LOOP
  40.     MOV R3, #0
  41.     RET
  42.        
  43. RESULT:
  44.     MOV R3, #1
  45.     DEC R0
  46.     MOV A, R0
  47.     ADD A, #'0'
  48.     LCALL WRITE_CHAR   
  49.     RET
  50.    
  51.  
  52. INIT_LCD:
  53.     MOV A, #INIT        ;inicjalizacja wyswietlacza
  54.     LCALL WRITE_CMD    
  55.  
  56.     MOV A, #CLEAR       ;czyszczenie wyswietlacza
  57.     LCALL WRITE_CMD
  58.  
  59.     MOV A, #TURN_ON     ;wlaczenie wyswietlacza
  60.     LCALL WRITE_CMD
  61.     RET
  62. CLEAR_LCD:
  63.     MOV A, #CLEAR       ;czyszczenie wyswietlacza
  64.     LCALL WRITE_CMD
  65.     RET
  66. WRITE_CMD:
  67.     LCALL CHECK_BUSY        ;sprawdza czy wyswietlacz jest zajety
  68.     MOV DPTR, #CMD_WR       ;przeslanie adresu linii sterowania
  69.     MOVX @DPTR, A           ;przeslanie akumulatora na linie sterowania
  70.     RET
  71.  
  72. WRITE_CHAR:
  73.     LCALL CHECK_BUSY       ;sprawdza czy wyswietlacz jest zajety                                    
  74.     MOV DPTR, #DATA_WR     ;przeslanie adresu linii zapisu danych
  75.     MOVX @DPTR, A          ;przeslanie akumulatora na linie zapisu danych
  76.     RET
  77.  
  78. CHECK_BUSY:
  79.     PUSH ACC
  80.     MOV DPTR, #READ_STATUS  ;odczytanie statusu
  81. CB_LOOP:
  82.     MOVX A, @DPTR
  83.     JB ACC.7, CB_LOOP
  84.     POP ACC
  85.     RET
  86.  
  87. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement