🇩🇪
; File: HD44780_2Wire.INC
; Author: Ottmar
; Created: 2014.01.08
; 2Wire Interfache mit HD74LS164
;******************************************************************
;-SUBROUTINEN - nicht zum direkten Aufruf bestimmt!
; Control8Bit: " mit 8Bit-Interface (nur intern)
; Clear_ShiftReg: " Löscht das Shiftregister
; Delay: " 1,5ms Delay zwischen LCD-Befehlen
; HD44780 Ausfuehrungszeit je cmmand = 37us+4us
; ausgenommen: RETURN HOME] = 1.52ms
; OutLcd: Ausgabe des oberen/unteren Nibbles (nur intern)
;
;-SUBROUTINEN - können aus anderem Code heraus aufgerufen werden
; Lcd_Init: Initialisierung von HD44780-LCD mit 4Bit-Interface
; OutDDRAM_Addr: Ausgabe einer DDRAM-Adresse an das LCD
; OutLcd_Ctrl: Ausgabe einer Instruktion an das LCD
; OutLcd_Ascii: Ausgabe eines Ascii-Zeichens, Wert im WREG
; z.B. movlw .35 -> Ausgabe '[' ROM Code A00!
; OutLcd_Data: Ausgabe eines einzelnen Zeichens Wert im WREG
; z.B. movfw BCD9 (darf nur 1 Stelle enthalten!"
; Lcd_Clear: Löscht den Text im LCD
; Lcd_Ready: Funktionstest! Ausgabe von "LCD 2Wire READY!"
; CGRAM_Load: ;Selbstdifiniertes Zeichen in das LCD laden
;
; Delay1ms: delays 1ms - 255ms /FOSC_MULT
; Delay100ms: delays 0.1s - 25.5s /FOSC_MULT
;*********************************************************************
; LCD-INITIALISIERUNG
; Die Initialisierung des LCD folgt der Vorgabe im Hitachi-Datenblatt
; "HD44780.pdf", Seite 213.
;;*********************************************************************
;; LCD-PROPERTIES (Eigenschaften an aktuellen LCD-Typ anpassen)
;;*********************************************************************
;; LCD_TYPE EQU 1 ;=1 LCD 2x8 und 2x16
;; LCD_TYPE EQU 2 ;=2=LCD 4x16
;; LCD_TYPE EQU 3 ;=3=LCD 4x20
; ;
; IF LCD_TYPE == 1 ;Uncomment LCD_DIGITS 2x8 OR 2x16 !!!
; LCD_LINES EQU .2 ;LCD 2x8 * 2x16
;; LCD_DIGITS EQU .8 ;LCD 2x8
;; LCD_DIGITS EQU .16 ;LCD 2x16
; ENDIF
;;-------------------------------------
;; NO CHANGES AFTER THIS LINE ALLOWED!
;;-------------------------------------
; LINE1 EQU 0x00 ;all LCDs
; LINE2 EQU 0x40 ;" "
; ;
; IF LCD_TYPE==2
; LINE3 EQU 0x10 ;LCDs 4x16 only
; LINE4 EQU 0x50 ;" " "
; LCD_LINES EQU .4 ;Lines
; LCD_DIGITS EQU .16 ;digits/line
; ENDIF
; ;
; IF LCD_TYPE==3
; LINE3 EQU 0x14 ;LCDs 4x20 only
; LINE4 EQU 0x54 ;" " "
; LCD_LINES EQU .4
; LCD_DIGITS EQU .20 ;digits/line
; ENDIF
; ;
; #DEFINE LCD_DATA LCD_LAT,LCDDAT ;Strobe Data (H->L -> Enable)
; #DEFINE LCD_CLK LCD_LAT,LCDCLK ;Strobe Clock (H->L)
; #DEFINE LCD_RS LcdFlags,7 ;0/1 Data-Mode/Instruction-Mode
; #DEFINE NIBBLE LcdFlags,6 ;1/0 send Upper/Lower Nibble to LCD
; ;
; SET_DDRAM_ADDR EQU 0x80 ;Function "SET DDRAM-ADDRESS"
; SET_CGRAM_ADDR EQU 0x40 ;"Set CGRAM Address" b'01000000
; ;
; DISPLAY_OFF EQU 0x08 ;Function "Display Disabled"
; DISPLAY_ON EQU 0x0C ;Function "Display enabled, Crsr On, Blink
Off
; ;; OHM
;;--SONDERZEICHEN gemeinsam HD44780+SPLC780A1 (keine Umlaute)
; OHM EQU b'11110100' ;Omega
; PI EQU b'11110111' ;Pi
; GRAD EQU b'11011111' ;° Grad
; MICRO EQU b'11100100' ;μ
; Komma EQU b'00101100' ;
Zitat von: Ottmar in 12.03.2025, 16:04:05 CET........gerade dabei, mich in I2C mit dem MSSP-Modul eines 18F einzuarbeiten......Das war auch meine letzte Übung, die allerdings auf einem 32-Bitter und MicroPython umgesetzt werden sollte. Liegt aber genauso auf der langen Bank, wie das Programmieren überhaupt. Die Demenz eines alten Freundes ist seit etlichen Wochen zu allem anderen noch dazu gekommen, der arme Kerl hat sonst niemanden, der sich zuständig fühlt.
......Ein HD44780 LCD soll mittels des Portexpanders PCF8754 angesteuert werden......