PIC-Lernbeispiel:
Dotmatrixdisplay mit eigenen Zeichen


zurück zu Lernbeispiele , PIC-Prozessoren , Elektronik , Homepage


Eigene Zeichen auf einem Dotmatrixdisplay darstellen

Ich schreibe ein paar spezielle Zeichen in den CGRAM eines Dotmatrixdisplays, und stelle sie dar.
Bei diesem Lernbeispiel hat mich Sergey unterstützt, Danke.


Schaltung
Ich verwende einen PIC16F628 und ein Dotmatrixdisplay.
Das Display ist mit  7 Leitungen am Port B angeschlossen. 

Ein Schalter ist zwischen RB1 und Masse angeschlossen.

Die Schaltung entspricht der LCD-Tastatur-Platine , verbunden mit der 16F84-Testplatine oder der 16F84-Miniplatine .

Weitere Infos zu Dotmatrix-Displays findet man hier .

Schaltbild


Zeichengenerator

Wie Zeichen im Zeichengenerator abgespeichert sind, und wie man eigene Zeichen entwirft, wurde schon an anderer Stelle beschrieben. Nun will ich das auch praktisch umsetzen.

Im Programmcode speichere ich die Bytemuster für meine neuen Zeichen als RETLW-Tabelle ab:
 
; Tabelle fuer den CGRAM
CGRAMTABLE
        MOVF    CHARCTR,W
        ADDWF    PCL,F       ;TABLE FOR CUSTOM CGRAM
        ;CYRILLIC L , Tabellenoffset 0
        RETLW    B'01111'    ;  ****
        RETLW    B'00101'    ;   * *
        RETLW    B'00101'    ;   * *
        RETLW    B'00101'    ;   * *
  
      RETLW    B'00101'    ;   * *
  
      RETLW    B'10101'    ; * * *
  
      RETLW    B'01001'    ;  *  *
  
      RETLW    B'00000'    ;
  
      ;CYRILLIC I , Tabellenoffset 8
  
      RETLW    B'10001'    ; *   *
 
       RETLW    B'10001'    ; *   *
 
       RETLW    B'10011'    ; *  **
 
       RETLW    B'10101'    ; * * *
 
       RETLW    B'11001'    ; **  *
  
      RETLW    B'10001'    ; *   *
  
      RETLW    B'10001'    ; *   *
  
      RETLW    B'00000'    ;
....

Die Zeichen schreibe ich dann mit einer kleinen Routine in den CGRAM. Diese schreibt jeweils 8 Bytes aus der RETLW-Tabelle in den CGRAM. Mit welchem Byte der Tabelle sie beginnen soll, das wird in w übergeben:
 
.
.
.
.
;CGRAM Adresse auf 0x00 setzen
        MOVLW   B'00000000'
        CALL    SETCGADDR

;CGRAM mit den neuen Symbolen laden
        MOVLW    .0            ;0: CYR L
        CALL    CGRAMLOAD
        MOVLW    .8            ;1: CYR I

.
.
.
.

;*****************************************************
;SET CGRAM TEST ROUTINE
;IN: W=CGRAM LOCATION
;DESTROYS; W, CHARCTR
;*****************************************************
SETCGADDR:
        bcf     LcdRs          ; INSTR REG
        bcf     LcdRw          ; WRITE
        ANDLW   B'00111111'    ; CGRAM CHOPOFF
        IORLW   B'01000000'    ; CGRAM AREA
        CALL    OutLcdControl
        RETURN

;*****************************************************
;CGRAM CHARACTER LOAD ROUTINE
;IN: W=NUMBER
;DESTROYS; W, CHARCTR
;*****************************************************
CGRAMLOAD
        BSF     LcdRs          ; INSTR REG
        bcf     LcdRw          ; WRITE
        MOVWF   CHARCTR        ; CHARACTER COUNTER
        MOVLW   0X08
        MOVWF   TEMP           ; 8 BYTES TO SEND
           
CGRAMSUB1
        CALL    CGRAMTABLE     ; LOAD A CHAR FROM ROM TBL
        CALL    OutLcdDaten
        INCF    CHARCTR, F     ; INC CHAR COUNTER
        DECFSZ  TEMP, F
        GOTO    CGRAMSUB1
        RETURN

Die Ausgabe weist dann keine weiteren Besonderheiten auf.


Programmablauf


Programmlisting



zurück zu Lernbeispiele , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt: 12.08.2009
letzte Änderung: 12.08.2009