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
. |
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